一招鲜吃遍天:PXE自动部署Ubuntu 22.04实录,居然能直接“套娃”24.04的配置?

一法通,万法通。我们此前已经玩转了Ubuntu 24.04的自动安装(插上U盘自动装系统?一文掌握Ubuntu服务器版自动安装镜像制作),并为大批量部署Ubuntu 24.04量身定制了PXE无人值守装机方案(一劳永逸:实战Ubuntu服务器PXE自动化部署,从此装机so easy),可谓是指尖轻点,系统自成,解决了手动安装效率低下的问题,不需要额外的U盘介质,全程不用人工干预。
类似的,在Windows系统中一般使用WDS功能(Windows Server 绝技:PXE 服务 WDS 部署,让系统安装如虎添翼!),PXE技术允许计算机在网络环境下启动,而无需依赖本地的存储设备或已安装的操作系统。
有读者不禁要问:此等“神功”是否只能用于24.04?若遇旧版系统如Ubuntu 22.04,是否就得“推倒重来”?
今天,我们就来揭晓答案——不仅通用,而且几乎是“依样画葫芦”,轻松拿下!
搭建PXE这座“自动装机工厂”,依然需要四大功臣各司其职:部署PXE系统需要使能DHCP服务器功能,用于为PXE客户端分配IP地址,这个我们用isc-dhcp-server来实现;还需要传输PXE引导文件,这个我们用tftpd-hpa来实现;还需要存储Ubuntu安装镜像和自动安装配置文件,这个我们用apache2来实现;还需要提供pxelinux.0等PXE引导文件,这个需要安装syslinux-common来获取。
了解了这些,我们直接执行命令安装这些软件就可以了:
apt-get update
apt-get install isc-dhcp-server tftpd-hpa apache2 syslinux-common -y
apt list isc-dhcp-server tftpd-hpa apache2 syslinux-common

为了避免冲突,我们还是单独配置一个网卡来提供PXE服务。

然后,我们参考DHCP服务器配置(网络之路22:DHCP基础实验),编辑DHCP服务器配置文件/etc/dhcp/dhcpd.conf,将next-server配置为PXE服务器。
subnet 10.168.11.0 netmask 255.255.255.0 {
range 10.168.11.100 10.168.11.200;
option routers 10.168.11.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 8.8.8.8;
default-lease-time 600;
max-lease-time 7200;
next-server 10.168.11.1;
filename “pxelinux.0”;
}

重启DHCP服务以使配置生效:
systemctl restart isc-dhcp-server
systemctl enable isc-dhcp-server
systemctl status isc-dhcp-server

接下来,我们配置TFTP服务器,创建一个TFTP存储路径,并将PXE引导文件复制进来:
mkdir -p /var/lib/tftpboot/pxelinux.cfg
cp /usr/lib/syslinux/modules/bios/ldlinux.c32 /var/lib/tftpboot/
cp /usr/lib/syslinux/modules/bios/libutil.c32 /var/lib/tftpboot/
cp /usr/lib/syslinux/modules/bios/menu.c32 /var/lib/tftpboot/
cp /usr/lib/PXELINUX/pxelinux.0 /var/lib/tftpboot/

然后,我们修改TFTP服务器配置文件/etc/default/tftpd-hpa,将TFTP服务器的根目录修改为/etc/default/tftpboot:
nano /etc/default/tftpd-hpa
TFTP_USERNAME=”tftp”
TFTP_DIRECTORY=”/var/lib/tftpboot/”
TFTP_ADDRESS=”:69″
TFTP_OPTIONS=”–secure”

重启TFTP服务,使配置生效。

systemctl restart tftpd-hpa
systemctl status tftpd-hpa

接下来,我们配置HTTP服务器。在Apache根目录/var/www/html创建两个路径:/var/www/html/iso/用于存储安装镜像,并将安装镜像上传于此;/var/www/html/autoinstall用于存储自动部署配置文件。
mkdir -p /var/www/html/iso /var/www/html/autoinstall

然后,我们就可以配置PXE引导菜单了,创建一个PXE默认配置文件/var/lib/tftpboot/pxelinux.cfg/default,将之前Ubuntu 24.04相关的配置替换成Ubuntu 22.04,如下所示:
nano /var/lib/tftpboot/pxelinux.cfg/default
DEFAULT menu.c32
MENU TITLE PXE Boot Menu
PROMPT 0
TIMEOUT 30

LABEL Ubuntu 22.04 Auto Install
MENU LABEL Install Ubuntu 22.04 (Autoinstall)
KERNEL vmlinuz
INITRD initrd
APPEND root=/dev/ram0 ramdisk_size=1024 ip=dhcp url=http://10.168.11.1/iso/ubuntu-22.04.5-live-server-amd64.iso autoinstall ds=nocloud-net;s=http://10.168.11.1/autoinstall/ cloud-config-url=/dev/null

之后,我们挂载上传的ISO镜像,并从ISO镜像中提取内核和initrd引导文件到TFTP目录。
mount /var/www/html/iso/ubuntu-22.04.5-live-server-amd64.iso /mnt

cp /mnt/casper/vmlinuz /var/lib/tftpboot/
cp /mnt/casper/initrd /var/lib/tftpboot/

操作完成之后卸载镜像即可。
umount /mnt
接下来,到了我们比较熟悉的cloud-init自动安装配置文件编辑环节(解锁Ubuntu高效部署!自动安装配置文件YAML全解析),这里我们还是直接用之前创建好的文件。先新建一个meta-data文件/var/www/html/autoinstall/meta-data:
nano /var/www/html/autoinstall/meta-data
instance-id: ubuntu-autoinstall

再新建一个user-data文件/var/www/html/autoinstall/user-data,将之前的autoinstall.yaml文件内容直接复制进来即可。

autoinstall:
version: 1
identity:
hostname: ttserver
password: “$1$Hnq9upy8$q0/gssInati7SLnW7cBsS0”
username: tt
source:
id: ubuntu-server
storage:
layout:
name: lvm
sizing-policy: all
ssh:
install-server: true
allow-pw: true
packages:
– wireguard
kernel-crash-dumps:
enabled: false
timezone: “Asia/Shanghai”
late-commands:
– curtin in-target — sed -i ‘s/^#\?PermitRootLogin.*/PermitRootLogin yes/’ /etc/ssh/sshd_config
– curtin in-target — systemctl restart sshd
– curtin in-target — systemctl stop cloud-init
– curtin in-target — systemctl disable cloud-init
– curtin in-target — apt-get purge -y cloud-init

当然,我们按照之前的方法,将自动安装脚本直接做到安装镜像里面也是可以的(插上U盘自动装系统?一文掌握Ubuntu服务器版自动安装镜像制作),这样可以省略一部分服务器配置。
再创建一个空的vendor-data文件,并检查Apache目录的访问权限为755。
touch /var/www/html/autoinstall/vendor-data
chmod -R 755 /var/www/html/

到这里,我们就完成了所有的配置工作,可以启动所有的服务了,检查服务状态,看到绿色的active (running)字样,就能继续前进了。
systemctl restart isc-dhcp-server tftpd-hpa apache2
systemctl enable isc-dhcp-server tftpd-hpa apache2
systemctl status isc-dhcp-server tftpd-hpa apache2

接下来,我们就可以测试PXE引导的效果了。一般情况下,如果没有安装系统、也没有引导安装介质,默认会跳转到网络引导,如下所示:

到这里,就可以调用cloud-init自动安装配置文件进行全自动部署了,演示视频如下:
可以看到,除了需要我们给设备上电启动之外,服务器可以全自动完成Ubuntu系统的安装,而且Ubuntu 22.04比Ubuntu 24.04的部署耗时要稍微短一些。

至此,将Ubuntu 24.04调整为Ubuntu 22.04的PXE自动化部署已大功告成。实践表明,此方案兼容性极强,颇有“放之四海而皆准”的风范。一套流程,多版本通用,运维效率倍增,怎能不让人拍案叫好?

声明:来自铁军哥,仅代表创作者观点。链接:https://eyangzhen.com/3780.html

铁军哥的头像铁军哥

相关推荐

关注我们
关注我们
购买服务
购买服务
返回顶部