PXE无人值守安装CentOS
1. 环境
1.1 操作系统
本文中PXE服务器操作系统为CentOS7最小化安装
# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
1.2 节点
本例中共涉及到两台服务器
- PXE服务器,IP:10.10.105.205
- PXE客户机,IP:无
2 PXE装机流程介绍
- 通过BIOS设置PXE客户机从网络启动
- PXE客户机从网络启动时,会从0.0.0.0到255.255.255.255进行全网广播,查找DHCP服务
- 找到dhcp服务后, PXE客户机会从DHCP服务请求一个IP地址
- dhcp服器查询一个空闲的未被使用的IP地址返回给PXE客户机,并告诉下一跳的位置
- PXE客户机设置好IP地址,并根据下一跳信息到tftp服务请求bootstrap引导文件(pxelinux.0)和bootstrap配置文件(pxelinux.cfg)
- PXE客户机加载bootstrap引导,并根据bootstrap配置加载启动菜单
- 手动/超时自动选择启动菜单后,PXE客户机根据bootstrap配置到tftp服务请求内核文件(vmlinuz)和虚拟文件系统(initrd.img)
- PXE客户机加载内核和虚拟文件系统,并根据bootstrap配置到http服务下载kickstart文件
- PXE客户机根据kickstart文件自动安装操作系统,安装过程中需要其他文件也会到http服务下载获取
从上面的描述中,我们可以看到,PXE服务器需要安装dhcp、tftp、http
3 部署PXE服务器
3.0 准备
避免麻烦,直接关闭防火墙systemctl stop firewalld && systemctl disable firewalld
3.1 安装dhcp、tftp、http
yum install -y dhcp tftp-server httpd
3.2 配置dhcp
vi /etc/dhcp/dhcpd.conf
subnet 10.10.105.0 netmask 255.255.255.0 {
range 10.10.105.240 10.10.105.249;
default-lease-time 3600;
filename "pxelinux.0";
next-server 10.10.105.205;
}
注意:上面的内容直接复制粘贴可能会导致导致dhcpd服务启动失败,也许是由于空格格式导致
- 第一行:配置DHCP子网
- 第二行:配置可用DHCP分配的IP范围
- 第三行:默认租期1小时
- 第四行:下一跳--文件名
- 第五行:下一跳--IP地址
根据第四行和第五行的配置,PXE客户机拿到IP地址后会访问10.10.105.205
上的tftp服务下载pxelinux.0
这个文件
3.3 配置tftp
3.3.1 开启tftp服务
vi /etc/xinetd.d/tftp
,将disable
改成no
,否则无法开启tftp服务。另外,仔细查看该文件可以看到这一行server_args = -s /var/lib/tftpboot
,说明可供tftp下载的文件的默认存放位置在/var/lib/tftpboot
目录
3.3.2 为tftp提供待下载的文件
在装机流程介绍中,我们知道tftp服务需要提供pxelinux.0
、pxelinux.cfg
、initrd.img
、vmlinuz
的下载,那么这些文件从哪来呢?
pxelinux.0和menu.c32
yum install -y syslinux
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot
menu.c32我们会在pxelinux.cfg中用到
initrd.img和vmlinuz
- 将一个CentOS的ISO文件上传到PXE服务器,本文:
/iso/CentOS-7.5-x86_64-Everything-1804.iso
- 挂载这个 ISO文件:
mount /iso/CentOS-7.5-x86_64-Everything-1804.iso /mnt
- 将initrd.img和vmlinuz拷贝到tftp服务:
cp /mnt/images/pxeboot/initrd.img /var/lib/tftpboot
、cp /mnt/images/pxeboot/vmlinuz /var/lib/tftpboot
- 取消挂载:
umount /mnt
pxelinux.cfg
mkdir /var/lib/tftpboot/pxelinux.cfg
vi /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32
timeout 300
prompt 0label 1
menu label ^1) Install CentOS7.5
menu default
kernel vmlinuz
append initrd=initrd.img method=http://10.10.105.205/CentOS7.5/ ks=http://10.10.105.205/ks.cfg
- 第一行:使用的菜单模块
- 第二行:菜单选择超时时间,如果在规定时间内没有手动做出选择则按默认的菜单执行安装
- 第三行:固定写法
- 第四行:空行
- 第五行:开式定义一个菜单
- 第六行:设置菜单显示内容
- 第七行:设置当前菜单为默认选项
- 第八行:设置系统内核文件
- 第九行:设置文件系统文件并设置相关参数,method和ks参数配置的地址来源于http服务
3.4 配置http
3.4.1 挂载 ISO文件到http
httpd的可供下载的文件默认存放在/var/www/html
,所以:
- 创建目录
mkdir /var/www/html/CentOS7.5
- 挂载 ISO:
mount /iso/CentOS-7.5-x86_64-Everything-1804.iso /var/www/html/CentOS7.5
3.4.2 准备kickstart
当我们创建虚拟机并安装完CentOS操作系统后,默认存在一个文件/root/anaconda-ks.cfg
文件,
- 将这个文件拷贝到
/var/www/html/
目录下:cp /root/anaconda-ks.cfg /var/www/html/ks.cfg
- 编辑这个文件
vi /var/www/html/ks.cfg
- 找到
# Use CDROM installation media
修改cdrom
为url --url http://10.10.105.205/CentOS7.5/
- 找到
# Partition clearing information
修改clearpart --none --initlabel
为clearpart --all --initlabel
- 文件最后增加一行,内容
reboot
- 找到
- 授权:
chmod 644 /var/www/html/ks.cfg
3.5 重启所有服务使我们的配置生效
systemctl restart dhcpd && systemctl enable dhcpd
systemctl restart tftp && systemctl enable tftp
systemctl restart httpd && systemctl enable httpd
然后测试下http服务器能否正常访问
curl http://10.10.105.205/CentOS7.5/
curl http://10.10.105.205/ks.cfg
4 测试PXE服务器的部署结果
将PXE重启,通过BIOS设置为网络启动