一劳永逸:实战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 updateapt-get install isc-dhcp-server tftpd-hpa apache2 syslinux-common -yapt 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-serversystemctl enable isc-dhcp-serversystemctl status isc-dhcp-server

接下来,我们配置TFTP服务器,创建一个TFTP存储路径,并将PXE引导文件复制进来:
mkdir -p /var/lib/tftpboot/pxelinux.cfgcp /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-hpaTFTP_USERNAME="tftp"TFTP_DIRECTORY="/var/lib/tftpboot/"TFTP_ADDRESS=":69"TFTP_OPTIONS="--secure"

重启TFTP服务,使配置生效。
systemctl restart tftpd-hpasystemctl 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/defaultDEFAULT menu.c32MENU TITLE PXE Boot MenuPROMPT 0TIMEOUT 30LABEL Ubuntu 24.04 Auto InstallMENU LABEL Install Ubuntu 24.04 (Autoinstall)KERNEL vmlinuzINITRD initrdAPPEND 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-datainstance-id: ubuntu-autoinstall

再新建一个user-data文件/var/www/html/autoinstall/user-data,将之前的autoinstall.yaml文件内容直接复制进来即可。
nano /var/www/html/autoinstall/user-dataautoinstall: 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-datachmod -R 755 /var/www/html/

到这里,我们就完成了所有的配置工作,可以启动所有的服务了,确保服务状态正常。
systemctl restart isc-dhcp-server tftpd-hpa apache2systemctl enable isc-dhcp-server tftpd-hpa apache2systemctl status isc-dhcp-server tftpd-hpa apache2

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

到这里,就可以调用cloud-init自动安装配置文件进行全自动部署了,演示视频如下:
可以看到,除了需要我们给设备上电启动之外,服务器可以全自动完成Ubuntu系统的安装,整个过程耗时约25分钟。你对这个PXE全自动部署Ubuntu系统的方案还满意吗?
**推荐阅读***
粉丝福利:白嫖天翼云免费的VPN网关及1000块钱
粉丝福利:5本图书免费送!一本书读懂TCP/IP,掌握互联网的通用语言!
10分钟搞定跨境访问!Squid代理搭建全指南
连WiFi就能切IP!揭秘企业级路由器多VPN出口黑科技!
WireGuard太复杂?十分钟教你用Netmaker一键搞定全球组网
从入门到精通:解锁tcpdump的终极指南,让你的网络问题无所遁形
别再折腾真机了!阿里云一键部署VSR路由器,全网实验随心配
远程办公利器:手把手教你搭建FortiGate SSL-VPN安全隧道
告别繁琐命令行:用开源ToughRADIUS轻松管理H3C SSLVPN千名用户
400元自建企业级Wi-Fi!零基础搭建AC+AP环境,全网最简组网指南
免费又专业!FreeRADIUS对接H3C无线网络,完美实现Portal认证
MacOS用户福音:手把手教你在新版macOS上安装H3C iNode客户端
实测确认!MSR路由器自带SSL授权,免费搭建远程接入就这么简单
H3C SSL VPN高阶技巧:从IP绑定到ACL过滤,打造安全远程接入
亲测Oracle XE在Windows系统的安装:比Linux更友好,但有一个坑
Oracle开发入门:从安装SQL Developer到操作HR数据库
零代码开发!用Oracle APEX快速构建数据库应用










