当前位置:体坛均波-有意思吧 > 2017年190期太湖字谜

2017年190期太湖字谜

发布时间:2019年1月4日20时44分21秒

如何构建一台网络引导服务器(三)|Linux中国__财经头条注册登录新闻头条号新浪财经APP宏观经济A股港股美股基金理财黄金期货能源互联网金融房地产更多外汇管理消费科技互联网手机保险数码科普创业银行新三板其他如何构建一台网络引导服务器(三)|Linux中国如何构建一台网络引导服务器(三)|Linux中国2019年01月02日09:55Linux中国语音播报缩小字体放大字体微博微信分享0腾讯QQQQ空间致谢译自|?fedoramagazine.org?作者|GregoryBartholomew译者|LCTT/qhwdw在?如何构建一台网络引导服务器(一)[1]?中,我们提供了一个极简的?iPXE[2]?引导脚本来引导你的网络引导镜像。

许多用户除了使用网络引导镜像外,可能在机器本地也有一个操作系统。

但是使用常见的工作站的BIOS去切换引导加载器是很笨拙的。

在本系列文件的第三部分,我们将向你展示如何设置一个更复杂的iPXE配置。

它将允许终端用户以更容易的方式去选择引导哪个操作系统。

它也可以配置为让系统管理员从一台中央服务器来统一管理引导菜单。

一个交互式iPXE引导菜单下面这些命令重定义了网络引导镜像的?boot.cfg?来作为一个交互式的iPXE引导菜单,并使用了一个5秒倒计时的定时器:$MY_FVER=29$MY_KRNL=$(ls-c/fc$MY_FVER/lib/modules|head-n1)$MY_DNS1=192.0.2.91$MY_DNS2=192.0.2.92$MY_NAME=server-01.example.edu$MY_EMAN=$(echo$MY_NAME|tr'.'""|tac|tr""'.'|cut-b-${#MY_NAME})$MY_ADDR=$(host-tA$MY_NAME|awk'{print$4}')$cat$HOME/esp/linux/boot.cfg#!ipxesettimeout5000:menumenuiPXEBootMenuitem--key1lcl1.MicrosoftWindows10item--key2f$MY_FVER2.RedHatFedora$MY_FVERchoose--timeout\${timeout}--defaultlclselected||gotoshellsettimeout0goto\${selected}:failedechobootfailed,droppingtoshell...gotoshell:shellechotype'exit'togetthebacktothemenusettimeout0shellgotomenu:lclexit:f$MY_FVERkernel--namekernel.efi\${prefix}/vmlinuz-$MY_KRNLinitrd=initrd.imgroip=dhcprd.peerdns=0nameserver=$MY_DNS1nameserver=$MY_DNS2root=/dev/disk/by-path/ip-$MY_ADDR:3260-iscsi-iqn.$MY_EMAN:fc$MY_FVER-lun-1netroot=iscsi:$MY_ADDR::::iqn.$MY_EMAN:fc$MY_FVERconsole=tty0console=ttyS0,115200n8audit=0selinux=0quietinitrd--nameinitrd.img\${prefix}/initramfs-$MY_KRNL.imgboot||gotofailedEND上述菜单有五个节:??menu?定义了显示在屏幕上的实际菜单内容。

??failed?提示用户发生了错误,并将用户带到shell以错误错误。

??shell?提供了交互式命令提示符。

你可以在引导菜单出现时按下?Esc?键进入,或者是?boot?命令失败时也会进入到命令提示符。

??lcl?包含一个提供给iPXE退出的简单命令,以及返还控制权给BIOS。

在iPXE之后,无论你希望缺省引导的设备(即:工作站的本地硬件)是什么,都必须在你的工作站的BIOS中正确地作为下一个引导设备列出来。

??f29?包含前面文章提到同一个网络引导代码,但使用最终的退出代码来替换掉?gotofailed。

从你的?$HOME/esp/linux?目录中复制更新后的?boot.cfg?到所有客户端系统的ESP中。

如果一切顺利,你应该会看到类似下面图片的结果:一个服务器托管的引导菜单你可以添加到网络引导服务器的另一个特性是,能够从一台中央位置去管理所有客户端的引导菜单。

这个特性尤其适用于批量安装(升级)一个新版本的操作系统。

在你将新内核和新的?initramfs?复制到所有客户端的ESP之后,这个特性可以让你执行一种?原子事务[3]?去切换所有客户端到新操作系统。

安装Mojolicious:$sudo-i#dnfinstall-yperl-Mojolicious定义“bootmenu”应用程序:#mkdir/opt/bootmenu#cat/opt/bootmenu/bootmenu.pl#!/usr/bin/envperluseMojolicious::Lite;useMojolicious::Plugins;plugin'Config';get'/menu';app-start;END#chmod755/opt/bootmenu/bootmenu.pl为“bootmenu”应用程序定义配置文件:#cat/opt/bootmenu/bootmenu.conf{hypnotoad={listen=['http://*:80'],pid_file='/run/bootmenu/bootmenu.pid',}}END这是一个非常简单的Mojolicious应用程序,它监听80端口,并且只回应对?/menu?的请求。

如果你想快速了解Mojolicious能做什么,运行?manMojolicious::Guides::Growing?去查看手册。

按?Q?键退出手册。

将?boot.cfg?移到我们的网络引导应用程序中作为一个名为?menu.html.ep?的模板:#mkdir/opt/bootmenu/templates#mv$HOME/esp/linux/boot.cfg/opt/bootmenu/templates/menu.html.ep定义一个systemd服务去管理引导菜单应用程2017年190期太湖字谜序:#cat/etc/systemd/system/bootmenu.service[Unit]Description=ServesiPXEMenusoverHTTPAfter=network-online.target[Service]Type=forkingDynamicUser=trueRuntimeDirectory=bootmenuPIDFile=/run/bootmenu/bootmenu.pidExecStart=/usr/bin/hypnotoad/opt/bootmenu/bootmenu.plExecReload=/usr/bin/hypnotoad/opt/bootmenu/bootmenu.plAmbientCapabilities=CAP_NET_BIND_SERVICEKillMode=process[Install]WantedBy=multi-user.targetEND在本地防火墙中为HTTP服务添加一个例外规则,并启动bootmenu服务:#firewall-cmd--add-servicehttp#firewall-cmd--runtime-to-permanent#systemctlenablebootmenu.service#systemctlstartbootmenu.service用?wget?测试它:$sudodnfinstall-ywget$MY_BOOTMENU_SERVER=server-01.example.edu$wget-q-O-http://$MY_BOOTMENU_SERVER/menu以上的命令应该会输出类似下面的内容:#!ipxesettimeout5000:menumenuiPXEBootMenuitem--key1lcl1.MicrosoftWindows10item--key2f292.RedHatFedora29choose--timeout${timeout}--defaultlclselected||gotoshellsettimeout0goto${selected}:failedechobootfailed,droppingtoshell...gotoshell:shellechotype'exit'togetthebacktothemenusettimeout0shellgotomenu:lclexit:f29kernel--namekernel.efi${prefix}/vmlinuz-4.19.4-300.fc29.x86_64initrd=initrd.imgroip=dhcprd.peerdns=0nameserver=192.0.2.91nameserver=192.0.2.92root=/dev/disk/by-path/ip-192.0.2.158:3260-iscsi-iqn.edu.example.server-01:fc29-lun-1netroot=iscsi:192.0.2.158::::iqn.edu.example.server-01:fc29console=tty0console=ttyS0,115200n8audit=0selinux=0quietinitrd--nameinitrd.img${prefix}/initramfs-4.19.4-300.fc29.x86_64.imgboot||gotofailed现在,引导菜单服务器已经正常工作了,重新构建?ipxe.efi?引导加载器,使用一个初始化脚本指向它。

第一步,先更新我们在本系列文章的第一部分中创建的?init.ipxe?脚本:$MY_BOOTMENU_SERVER=server-01.example.edu$cat$HOME/ipxe/init.ipxe#!ipxedhcp||exitsetprefixfile:///linuxchainhttp://$MY_BOOTMENU_SERVER/menu||exitEND现在,重新构建引导加载器:$cd$HOME/ipxe/src$makeclean$makebin-x86_64-efi/ipxe.efiEMBED=../init.ipxe将更新后的引导加载器复制到你的ESP中:$cp$HOME/ipxe/src/bin-x86_64-efi/ipxe.efi$HOME/esp/efi/boot/bootx64.efi将更新后的引导加载器复制到所有的客户端中之后,以后更新引导菜单只需要简单地编辑?/opt/bootmenu/templates/menu.html.ep?文件,然后再运行如下命令:$sudosystemctlrestartbootmenu.service做一步的改变如果引导菜单服务器工作正常,在你的客户端系统上的?boot.cfg?文件将更长。

比如,重新添加Fedora28镜像到引导菜单中:$sudo-i#MY_FVER=28#MY_KRNL=$(ls-c/fc$MY_FVER/lib/modules|head-n1)#MY_DNS1=192.0.2.91#MY_DNS2=192.0.2.92#MY_NAME=$(/hostname)#MY_EMAN=$(echo$MY_NAME|tr'.'""|tac|tr""'.'|cut-b-${#MY_NAME})#MY_ADDR=$(host-tA$MY_NAME|awk'{print$4}')相关新闻加载中点击加载更多头条号入驻Linux中国Linux技术资讯社区。