IPXE应用(解决自动化安装系统等待3分钟的问题)
一、解决自动化安装系统等待3分钟的问题
之前部署的自动化在同一时间内多台客户机无法安装不同的操作系统(PXE+kickstarts方案),现使用IPXE++kickstarts方案即可完美解决。
二、IPXE简介:
ipxe官方网站:http://ipxe.org/download 在github上的资源:https://github.com/ipxe/ipxe 源码包官网下载(慢):git clone https://github.com/ipxe/ipxe.git 本地下载:wget -http-user=qwe --http-password=qwe http://61.160.213.184/dl/ipxe/ipxe.tar.gz
PXE简介
PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求DHCP服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端(客户端)基本软件设置,从而引导预先安装在服务器中的终端操作系统。PXE可以引导多种操作系统,如:Windows95/98/2000/windows2003/windows2008/winXP/win7/win8,linux系列系统等。
gPXE/iPXE是PXE的扩展版,支持HTTP协议,可以通过http、ISCSI SAN、Fibre Channel SAN via FCoE AoE SAN wireless network Infiniband network等方式启动。iPXE由gPXE分支而来(fork),功能更丰富。
Windows环境下可以使用Tiny IPXE server软件轻松实现,Linux下则要搭建相应环境,相对较复杂。
三、布署流程
1、安装依赖包
yum install -y gcc binutils make perl liblzma mtools mkisofs xz-devel syslinux
2.编译IPXE源码
cd ~ wget --http-user=qwe --http-password=qwe http://61.160.213.184/dl/ipxe/ipxe.tar.gz tar zxvf ipxe.tar.gz cd ipxe/src/ make
3、安装 tftp+dhcp+xinetd+httpd
yum install dhcp tftp-server xinetd httpd
四、配置环境
1、修改tftp配置。
sed -i '/disable/s/yes/no/' /etc/xinetd.d/tftp
2、修改dhcpd配置(示例)
vim /etcvim /etc/dhcp/dhcpd.conf
option client-arch code 93 = unsigned integer 16; default-lease-time 600; max-lease-time 7200; subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.60 192.168.1.70; option routers 192.168.1.1; class "pxeclients" { match if substring (option vendor-class-identifier, 0, 9) = "PXEClient"; next-server 192.168.1.120; if option client-arch != 00:00 { filename "ipxe/ipxe.efi"; } else { filename "ipxe/c7.5/undionly.kpxe"; #此处位置可以指定不同引导文件,对应不同的启动菜单 } } #server-name "TestIPXE"; }
3、 修改/etc/httpd/conf/httpd.conf
sed -i 's/#ServerName www.example.com:80/ServerName 127.0.0.1:80/g' /etc/httpd/conf/httpd.conf
4、配置ipxe目录
mkdir /var/lib/tftpboot/ipxe
mkdir /var/www/html/ipxe
5、 定制 undionly.kpxe(关键)
说明:默认undionly.kpxe 循环启动,如果要使用自己的ipxe菜单,则需要定制编译才可以
cd ipxe/src/ cat >demo.ipxe<<EOF #!ipxe dhcp chain http://192.168.1.120/ipxe/ipxe_c7.5.html EOF make bin/undionly.kpxe EMBED=demo.ipxe
chain http://192.168.1.120/ipxe/ipxe_c7.5.html指向不同的启动菜单
拷贝文件到tftp目录
cp bin/undionly.kpxe /var/lib/tftpboot/ipxe/
如果要使用UEFI启动,则需要下载ipxe.efi
6、制作ipxe启动菜单(L系统一个系统一个菜单,windows的做C和全格各一个菜单)
L系统
vim /var/www/html/ipxe/ipxe_c7.5.html
cat >/var/www/html/ipxe/ipxe_c7.5.html<<EOF #!ipxe #自定义变量 set dirpath http://192.168.1.120 set kspath ${dirpath}/kickstarts #定义菜单 #clear custom_choice #菜单名称 menu My First Menu Test #菜单明细 item --gap Linux series item centos7 --CentOS 7.5 item HardDisk --From hard disk item custom_exit --Exit #定义选择参数 #无选择则30S后退出 #choose --default custom_exit --timeout 30000 custom_choice || goto custom_exit choose --default centos7 --timeout 5000 custom_choice || goto custom_exit echo ${cls} goto ${custom_choice} goto custom_exit #引导Label :centos7 kernel ${dirpath}/centos7.5/isolinux/vmlinuz ip=dhcp ks=${kspath}/7.5ks.cfg repo=${dirpath}/centos7.5 initrd ${dirpath}/centos7.5/isolinux/initrd.img boot || goto custom_exit :custom_exit chain utils.ipxe exit EOF
Windows系统
vim /var/www/html/ipxe/ipxe_w10_qg.html
cat >/var/www/html/ipxe/ipxe_w10_qg.html<<EOF #!ipxe #自定义变量 set dirpath http://192.168.1.120 set kspath ${dirpath}/kickstarts #定义菜单 #clear custom_choice #菜单名称 menu My First Menu Test #菜单明细 item --gap Windows series item win10x64 --Windows 10 x64 item HardDisk --From hard disk item custom_exit --Exit #定义选择参数 #无选择则30S后退出 #choose --default custom_exit --timeout 30000 custom_choice || goto custom_exit choose --default win10x64 --timeout 50000 custom_choice || goto custom_exit echo ${cls} goto ${custom_choice} goto custom_exit #引导Label :win10x64 kernel ${dirpath}/memdisk raw iso initrd ${dirpath}/win10pe_w10quange.iso boot || goto custom_exit :custom_exit chain utils.ipxe exit EOF
配置基本完成,启动服务并设置开机自启
systemctl start xinetd systemctl start dhcpd systemctl start httpd systemctl enable xinetd systemctl enable dhcpd systemctl enable httpd systemctl status xinetd systemctl status dhcpd systemctl status httpd
客户端开机pxe引导
修改DHCP配置文件,在重启下服务
systemctl restart dhcpd
定制 undionly.kpxe要记得编译重新拷贝
vim demo.ipxe
#!ipxe dhcp chain http://192.168.1.120/ipxe/ipxe_w10_qg.html
make bin/undionly.kpxe EMBED=demo.ipxe cp bin/undionly.kpxe /var/lib/tftpboot/ipxe/w10_qg/