一劳永逸:实战Ubuntu服务器PXE自动化部署,从此装机so easy

我们前面介绍了如何使用自动安装配置Ubuntu(插上U盘自动装系统?一文掌握Ubuntu服务器版自动安装镜像制作),当时就有读者反馈,面对大批量服务器部署,手动安装效率低下,即使有自动部署脚本,也需要大量U盘,有没有完全不用人工干预的部署方式?
当然有了,我们前面介绍了Windows的WDS功能(Windows Server 绝技:PXE 服务 WDS 部署,让系统安装如虎添翼!),类似的功能也能在Linux上使用,同样也是使用PXE(Preboot eXecution Environment,预启动执行环境),这个由Intel公司开发的技术,允许计算机在网络环境下启动,而无需依赖本地的存储设备或已安装的操作系统。
今天,我们就来盘一下如何在Ubuntu系统中部署一个能自动化安装Ubuntu系统的PXE系统,实现Ubuntu系统的无人值守全自动安装。
首先,部署PXE系统的组件跟WDS类似,需要使能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/tftpd-hpa:
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,配置如下:
nano /var/lib/tftpboot/pxelinux.cfg/default
DEFAULT menu.c32
MENU TITLE PXE Boot Menu
PROMPT 0
TIMEOUT 30
LABEL Ubuntu 24.04 Auto Install
MENU LABEL Install Ubuntu 24.04 (Autoinstall)
KERNEL vmlinuz
INITRD initrd
APPEND root=/dev/ram0 ramdisk_size=1024 ip=dhcp url=http://10.168.11.1/iso/ubuntu-24.04.2-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-24.04.2-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文件内容直接复制进来即可。

nano /var/www/html/autoinstall/user-data
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

再创建一个空的vendor-data文件,并检查Apache目录的访问权限为755。
touch /var/www/html/autoinstall/vendor-data
chmod -R 755 /var/www/html/

到这里,我们就完成了所有的配置工作,可以启动所有的服务了,确保服务状态正常。
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系统的安装,整个过程耗时约25分钟。你对这个PXE全自动部署Ubuntu系统的方案还满意吗?

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

铁军哥的头像铁军哥

相关推荐

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