要使用PXE批量部署,必须要有DHCP,TFTP,一个可以作为镜像源传输的Web服务或者文件服务,这里使用apache做镜像源,RockyLinux9作为批量部署的镜像,拿VMware模拟环境。正常最好使用Web服务器来做镜像源传输,一个是万一出错好排查,另一个是有的可能不支持某些服务做镜像源(例如RHEL不支持NFS...比较麻烦)
题外话,我的centos7镜像很老了,同时我是使用的镜像直接挂载作为软件下载源的。如果是新一点的发行版安装的软件名称是不一样的,下面开始...
环境构建
先通过虚拟网络编辑器创建一个新的网Vmnet,设置为NAT模式,不使用DHCP

新建一个虚拟机作为服务端,硬件配置随意,网络适配器保证是刚刚创建的VMnet8,CD设置成要批量部署的镜像ISO
创建另一个虚拟机作为要安装镜像的客户端,配置随意,内存最好2G以上,否则可能报错影响镜像安装


开始配置服务器
启动后镜像安装时直接下一步好了,也可以省事选择现有的直接安装好,网卡我也没有进行配置,主打的一个用命令行折磨自己。另外就是centos7的默认特权操作还挺麻烦的...一会儿就会过期要输密码,所以我会直接以root登录来部署

安装完成后先配置网卡,网卡文件在/sysconfig/networks-scripts/文件夹中,以ifcfg开头网卡设备名称结尾,我的是ens33所以是ifcfg-ens33。也可以使用nmtui、nmcli来操作更快一些,但是改文件后需要重启一下Network-Manager服务,否则配置有可能不加载,用nmcli的reload也没用
需要修改默认的获取ip方式为静态,改为开机自启,在文件末尾两行添上地址和掩码

改完后重启,通过ip addr看到地址变更后就ok了

删掉所有repo,手写repo以本地ISO作为下载源,镜像我提前挂载到了/mnt/cdrom下。如果你使用网络下载源请跳过该部分...

最后yum clean all,并yum makecache即可。如果没有出现大一段文字报错那配置是没有问题的

安装DHCP服务使用httpd软件包,完成后修改/etc/dhcp/dhcpd.conf,添加DHCP配置,如下示例
# 全局配置 option domain-name "pxe.example.com"; # 可选,设置域名 default-lease-time 600; max-lease-time 7200; authoritative; # 声明为网络中的权威 DHCP 服务器 # 子网配置(客户端所在网段) subnet <客户端子网> netmask <子网掩码> { range <起始IP> <结束IP>; # 分配给客户端的IP范围 option routers <网关IP>; # 可选,客户端默认网关 option subnet-mask <子网掩码>; # 可选,客户端默认掩码 option domain-name-servers <DNS服务器IP>; # 可选,客户端DNS # PXE 核心选项:告知客户端 TFTP 服务器IP和引导文件名 next-server <PXE服务器IP>; # TFTP服务器IP(即PXE服务器自身IP) filename "pxelinux.0"; # BIOS环境引导文件(UEFI需改为 grubx64.efi) }完成后用systemctl enable --now dhcpd运行服务
安装TFTP服务,TFTP用来传输PXE启动的镜像。tftp-server是以socket运行的,如果要修改配置需要改运行服务的systemd。xinted托管的tftp服务用的更多,这里安装xinetd和tftp-server软件包,配置文件位于/etc/xinetd.d/tftp,直接将disable设置为no再启动一下服务就可以了。也可以改server_args来修改tftp的文件夹,只不过多一些步骤,默认的文件夹就是后面syslinux默认安装的位置

安装syslinux,这些文件是PXE引导需要的文件。软件包名称为syslinux-tftpboot,新一些的发行版要用syslinux-common

如果你修改了tftp默认的文件夹位置,需要手动复制文件到TFTP文件夹,下面的文件中需要menu.c32,vesamenu.c32,libutil.c32,chain.c32

在tftp文件夹下新建一个以pxelinux.cfg命名的文件夹,新建一个default名称的文件编辑如下内容

解释一下各个参数的意思,同时append选择一种方式写就可以了,无盘启动是我在其他地方看到的一个教程所写的,顺带提一嘴,正常写用最下面那个就可以了
DEFAULT menu.c32 # 使用菜单模块,也可以使用vesamenu.c32 PROMPT 0 # 不显示命令行提示符(超时后自动选择默认选项) TIMEOUT 300 # 超时时间(单位:1/10秒,300=30秒) MENU TITLE PXE install # 菜单标题 # 选项 标签 LABEL ubuntu2204 # 选项名称,这个也和菜单标题自己随便写 MENU LABEL ^1.rocky9 install # ^是显示作用,这个也是标题自己随便写 KERNEL vmlinuz # 内核路径(相对于 TFTP 根目录) INITRD initrd.img # 初始化路径,这个具体依据安装镜像提供的来,也可以将这个加在下一行append中 APPEND root=/dev/nfs nfsroot=192.168.1.100:/srv/nfs/rocky9 ip=dhcp rw # NFS 无盘启动,这个依赖内核对NFS的支持,视情况可能要改NFS版本 APPEND inst.repo=nfs:192.168.10.1:/srv/nfs/rocky9 # 正常的写法,不同发行版镜像有些不同,debian的开头用的是url或者其他,
安装apache,软件包为httpd,我的已经安装了,完成后在网站文件夹/var/www/html下新建一个文件夹作为镜像目录。因为旧的DVD口被用作软件镜像源了,所以新加一个DVD,挂载要部署镜像


如果设置了已连接但是没有出现sr1可以手动让所有scsi主机扫描一下...最后将镜像挂载到之前新建的目录

再将vmlinuz和initrd文件复制到TFTP文件夹下

别忘了关防火墙systemctl stop firewalld,到此服务端配置告一段落...
客户端启动!
如果看到下面的界面,就代表成功一大半了。这里按下Enter键,会自动加载界面,等一会儿就能进安装页面了...

加载后就和正常装linux的过程一样了


如果加载过程中出现了如下界面就将内存调大,是因为内存不足导致的问题

