基于ubuntu部署PXE Server用于网络安装ubuntu
环境说明 操作系统镜像:ubuntu-22.04.1-live-server-amd64.iso 可以直接去官网下载https://ubuntu.com/download/server
选择的是最小化安装
安装必须的服务端软件
安装HTTP服务器这里使用的是apache2sudo apt-get install apache2
安装DHCP、TFTP服务器 dnsmasq同时实现了DHCP、TFTP、DNS三种服务器sudo apt-get install dnsmasq
安装后报53端口冲突,可以参考如下文章解决:
启动或重启 dnsmasq 提示端口 53 被占用的解决方案 – Yogile – 博客园
准备相关文件
1. tftpd的默认服务根目录是/var/ftpd
ftpd├── boot│ └── live-server│ ├── initrd│ └── vmlinuz├── grub│ └── x86_64-efi│ ├── command.lst│ └── crypto.lst│ ├── fs.lst│ └── terminal.lst│ ├── bootx64.efi│ └── grub.cfg└── grubx64.efi 说明 文件initrd、vmlinuz、command.lst、crypto.lst、fs.lst和terminal.lst来自 ubuntu安装包
bootx64.efi、grubx64.efi 引导程序,来自shim.signed 和grub-efi-amd64-signed安装包
sudo apt-get download shim.signed
dpkg -x shim-signed_1.51+15.4-0ubuntu9_amd64.deb shim
sudo apt-get download grub-efi-amd64-signed
dpkg -x grub-efi-amd64-signed_1.182~22.04.1+2.06-2ubuntu10_amd64.deb grub
cp ./grub/usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed /var/ftpd/grubx64.efi
cp ./shim/usr/lib/shim/shimx64.efi.signed /var/ftpd/grub/bootx64.efi
grub.cfg 自建,内容如下
menuentry “Try or Install Ubuntu Server” {
set gfxpayload=keep
linux /boot/live-server/vmlinuz root=/dev/ram0 ramdisk_size=1500000 ip=dhcp url=’http://192.168.0.49/iso/ubuntu-22.04.1-live-server-amd64.iso’ autoinstall ds=nocloud-net\;s=http://192.168.0.49/autoinstall/ —
initrd /boot/live-server/initrd
}
这里的ip:192.168.0.49是“安装源服务器”传输以上文件所用的那个网卡的网络地址,根据实际情况修改。
2. apache2的默认服务根目录是 /var/www/html
html/├── autoinstall│ ├── meta-data│ └── user-data├── index.html└── iso └── ubuntu-22.04.1-live-server-amd64.iso
说明
autoinstall 目录存放参数自动配置文件,user-data、meta-data是cloud-init要求的文件名。
meta-data只需创建一个依此命名的空文件;
user-data的内容可以参考此安装源服务器在 /var/log/installer/ 目录下的 autoinstall-user-data ,这是基于当前的系统的应答文件,我们可以以它作为基础,根据实际情况进行修改。
iso 目录存放操作系统镜像文件。
(三) 修改配置文件
dnsmasq的默认配置文件为/etc/dnsmasq.conf,关键配置有以下几个
# 指定服务的网卡,对应上述ip:192.168.0.49的那张网卡名
interface=enp2s0
# 绑定端口
bind-interfaces
# 设置DHCP分发IP端范围、地址掩码、IP地址有效时间(网段自定义)
dhcp-range=192.168.0.50,192.168.0.150,255.255.255.0,12h
# 设置引导程序相对tftp根目录的路径
dhcp-match=set:efi-x86_64,option:client-arch,7
dhcp-boot=tag:efi-x86_64,grub/bootx64.efi
# 打开tftp服务
enable-tftp
# 设置tftp根路径
tftp-root=/var/ftpd
# 设置日志路径
log-facility=/var/log/dnsmasq.log
修改配置后,重启dnsmasq服务才能生效。
sudo service dnsmasq restart
至此,安装源服务器上的配置都已修改完毕,接着网络启动所有客户端服务器就
开始进行网络安装了。
——————————————————————————————————————–
测试验证过程:
一、使用Hyper-V虚拟化环境验证
验证主机系统:Windows 10,16G内存
Hyper-V 管理器版本如下:
PXE server配置如下图所示,新增了一张网卡MyPrivateNet专门用于PXE启动
PXE server安装 ubuntu-22.04.1-live-server-amd64.iso时选择最小化安装
PXE client配置如下:
在PXE server上安装上述步骤配置后,启动时
二、使用物理机验证
1、选择一台物理机作为PXE server,最小化安装 ubuntu-22.04.1-live-server-amd64.iso
2、另选一台服务器作为PXE client,组网如下,服务器配置有RAID卡的话,需要提前对系统盘做RAID。
按照前文配置说明完成对PXE server的部署后,启动PXE client,当出现如下画面的时候代表已经连接到PXE server
这一步显示的就是我们再grub.cfg中配置的菜单:menuentry “Try or Install Ubuntu Server”
在PXE server查看dnsmasq日志,正常的启动日志如下:
PXE client在OS安装完成后会自动重启。
记录一下测试过程中遇到的问题:
1、最后一步分区的时候报错,提示如下:
根据倒数第二行的提示,按enter键后去查看crash日志:
从日志可以看出我们再user-data中配置的ubuntu-vg在文件系统中已经存在。
原因就是我们测试用的PXE client已经安装过操作系统了
而且之前的操作系统并没有安装到系统盘sda上 ,清除掉nvme0n1p3上的ubuntu-vg之后重新PXE安装即可