IPXE应用(解决自动化安装系统等待3分钟的问题)

作者: oldboy 分类: Notes 发布时间: 2022-05-25 16:50

一、解决自动化安装系统等待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/

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

标签云