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 节点

本例中共涉及到两台服务器

  1. PXE服务器,IP:10.10.105.205
  2. PXE客户机,IP:无

2 PXE装机流程介绍

  1. 通过BIOS设置PXE客户机从网络启动
  2. PXE客户机从网络启动时,会从0.0.0.0到255.255.255.255进行全网广播,查找DHCP服务
  3. 找到dhcp服务后, PXE客户机会从DHCP服务请求一个IP地址
  4. dhcp服器查询一个空闲的未被使用的IP地址返回给PXE客户机,并告诉下一跳的位置
  5. PXE客户机设置好IP地址,并根据下一跳信息到tftp服务请求bootstrap引导文件(pxelinux.0)和bootstrap配置文件(pxelinux.cfg)
  6. PXE客户机加载bootstrap引导,并根据bootstrap配置加载启动菜单
  7. 手动/超时自动选择启动菜单后,PXE客户机根据bootstrap配置到tftp服务请求内核文件(vmlinuz)和虚拟文件系统(initrd.img)
  8. PXE客户机加载内核和虚拟文件系统,并根据bootstrap配置到http服务下载kickstart文件
  9. 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.0pxelinux.cfginitrd.imgvmlinuz的下载,那么这些文件从哪来呢?

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

  1. 将一个CentOS的ISO文件上传到PXE服务器,本文:/iso/CentOS-7.5-x86_64-Everything-1804.iso
  2. 挂载这个 ISO文件:mount /iso/CentOS-7.5-x86_64-Everything-1804.iso /mnt
  3. 将initrd.img和vmlinuz拷贝到tftp服务:cp /mnt/images/pxeboot/initrd.img /var/lib/tftpbootcp /mnt/images/pxeboot/vmlinuz /var/lib/tftpboot
  4. 取消挂载:umount /mnt

pxelinux.cfg

mkdir /var/lib/tftpboot/pxelinux.cfg
vi /var/lib/tftpboot/pxelinux.cfg/default

default menu.c32
timeout 300
prompt 0

label 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,所以:

  1. 创建目录mkdir /var/www/html/CentOS7.5
  2. 挂载 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文件,

  1. 将这个文件拷贝到/var/www/html/目录下:cp /root/anaconda-ks.cfg /var/www/html/ks.cfg
  2. 编辑这个文件vi /var/www/html/ks.cfg
    • 找到# Use CDROM installation media修改cdromurl --url http://10.10.105.205/CentOS7.5/
    • 找到# Partition clearing information修改clearpart --none --initlabelclearpart --all --initlabel
    • 文件最后增加一行,内容reboot
  3. 授权: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设置为网络启动

相关资料

posted @ 2022-04-27 22:25  柚子苹果果  阅读(203)  评论(0编辑  收藏  举报