
介绍
PXE 全称 "Preboot eXecution Environment" 译: 预启动执行环境;
能够从网络(http、vsftp、tftp)中引导操作系统安装而不是从存储中(SSD/HDD/DVD)引导操作系统安装。
Kickstart 安装提供了一种部分自动或全自动的安装过程方式,Kickstart 文件包含安装过程中需要询问用户的所有问题与答案;
例如: 您希望系统使用哪个时区?驱动器如何分区?要安装哪些软件包?
因此,在安装开始时提供准备好的 Kickstart 文件就可以允许用户自动执行安装而无需任何干预,这在同时部署大量 RHEL 系统时特别有用。
实验环境
本实验中, PXE 服务器IP地址为: 192.168.82.200 系统为 CentOS 7.8; 需要安装的软件包如下:
1.dnsmasq: 支持 PXE、TFTP 和 DHCP 服务的轻量级 DNS 转发工具
2.syslinux: 用于网络引导的 Linux 引导加载程序
3.tftp-server: 存放 vmlinuz 和 initrd 镜像并用于下载
4.vsftpd: 用于存放 iso 镜像的所有文件并用于下载
部署 PXE + Kickstart 服务器(按照步骤顺序跟着操作)
1.安装 dnsmasq 软件包
[root@localhost ~]# yum -y install dnsmas
2.修改 dnsmasq 配置文件
- [root@localhost ~]# vim /etc/dnsmasq.conf
- # 以下填写你的网卡名
- interface=ens192,lo
- domain=0x01
- # 以下配置 DHCP 的 "接口;起始分配的IP地址; 网关; 子网掩码; 租期"
- dhcp-range= ens192,192.168.82.201,192.168.82.254,255.255.255.0,1h
- # 以下配置 PXE 服务器IP地址,也就是本机的IP地址,请自行替换 "192.168.82.200" 为自己的服务器地址
- dhcp-boot=pxelinux.0,pxeserver,192.168.82.200
- # 以下配置 DHCP 客户端分配到的网关
- dhcp-option=3,192.168.82.254
- # 以下配置 DHCP 客户端分配到的 DNS 服务器地址
- dhcp-option=6,223.5.5.5
- # 以下配置 DHCP 客户端的广播地址
- dhcp-option=28,192.168.82.255
- # 以下配置 识别到 PXE 后,命令行显示的字符串,以及持续时间60秒
- pxe-prompt="Press F8 for menu.",60
- # 以下配置 按完F8 后,提示符显示的字符串
- pxe-service=x86PC,"Install CentOS from PXE server",pxelinux
- # 以下启用 tftp 功能
- enable-tftp
- # 以下定义 tftp 工作目录
- tftp-root=/var/lib/tftpboo
3.安装 syslinux 和 tftp-server 软件包
syslinux 软件包提供的引导加载程序位于: /usr/share/syslinux 目录中
tftp-server 软件包的工作目录位于: /var/lib/tftpboot 目录中
[root@localhost ~]# yum -y install syslinux tftp-serve
4.将 syslinux 引导加载程序复制到 tftp 服务器的工作目录
[root@localhost ~]# cp -r /usr/share/syslinux/* /var/lib/tftpboo
5.创建 PXE 配置文件
PXE 配置文件应位于 pxelinux.cfg 目录下,默认名为: default
- [root@localhost ~]# mkdir /var/lib/tftpboot/pxelinux.cfg
- [root@localhost ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
- 1 default menu.c32
- 2 prompt 0
- 3 timeout 300
- 4 ONTIMEOUT local
- 5
- 6 menu title ########## PXE Boot Menu ##########
- 7
- 8 label 1
- 9 menu label ^1) Install CentOS 7.8 (minimal install)
- 10 kernel centos7/vmlinuz
- 11 append initrd=centos7/initrd.img inst.ks=ftp://192.168.82.200/pub/ks.cfg method=ftp://192.168.82.200/pub devfs=nomoun
需要自行修改的地方:
第6行: 自定义 PXE 菜单标题的名字(可选)
第9行: 自定义菜单选项的名字
第10行: 定义内核镜像(vmlinuz) 和 内存盘(initrd) 的位置; 如上表示在 /var/lib/tftpboot/centos7 目录下(目前该目录还未创建)
第11行:
● initrd=centos7/initrd.img 表示指定内存盘位于哪个目录(即还未创建的 /var/lib/tftpboot/centos7)
● inst.ks=ftp://xx.xx.xx.xx/pub/ks.cfg 表示指定 kickstart 文件的位置,然后进行自动安装; 如不写,则无法全自动安装
● method=ftp://xx.xx.xx.xx/pub 表示指定 iso 安装光盘的内容存放的位置
*注:
ftp://xx.xx.xx.xx 换成当前服务器的 IP 地址即可; 如果你愿意,也可以用 http,但需自行部署 Nginx/Apache;
如果你愿意,可以指定多个菜单(label),来创建不同的操作系统版本进行自动安装
6.创建 vmlinuz 和 initrd 的下载目录
[root@localhost ~]# mkdir /var/lib/tftpboot/centos
7.将 iso 镜像挂载到系统上
注意,这里的 iso 镜像是:你要批量安装系统的 iso 镜像,而不是当前系统版本的 iso 镜像
- [root@localhost ~]# mount /dev/sr0 /mnt
- [root@localhost ~]# lsblk
- NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
- sda 8:0 0 300G 0 disk
- ├─sda1 8:1 0 1G 0 part /boot
- └─sda2 8:2 0 299G 0 part
- ├─centos-root 253:0 0 50G 0 lvm /
- ├─centos-swap 253:1 0 7.9G 0 lvm [SWAP]
- └─centos-home 253:2 0 241.1G 0 lvm /home
- sr0 11:0 1 4.5G 0 rom /mnt
- # 如果你不想把镜像挂载到光驱上,而是直接下载到系统上,则执行以下命令进行挂载:
- [root@localhost ~]# wget https://xxxx.xxx.com/centos/7.9/isos/CentOS-x.x.xxxx-x86_64-dvd1.iso
- [root@localhost ~]# mount -o loop CentOS-x.x.xxxx-x86_64-dvd1.iso /mn
8.将 iso 镜像中的 vmlinuz 和 initrd 复制到 tftpboot 目录下的 centos7 目录
- [root@localhost ~]# cp /mnt/images/pxeboot/vmlinuz /var/lib/tftpboot/centos7
- [root@localhost ~]# cp /mnt/images/pxeboot/initrd.img /var/lib/tftpboot/centos
9.安装 vsftpd 并将所有 iso 镜像内容复制到 ftp 工作目录
- [root@localhost ~]# yum -y install vsftpd
- [root@localhost ~]# cp -r /mnt/* /var/ftp/pub
- [root@localhost ~]# chmod -R 755 /var/ftp/pu
10.创建 Kickstart 文件,必须命名为 ks.cfg 才能自动识别
默认情况下:/root/anaconda-ks.cfg 就是当前服务器安装过程的 Kickstart 文件,直接将其复制到 ftp 工作目录;
也就是说,用户必须自己亲自走一遍安装系统的过程,然后该 anaconda-ks.cfg 文件就会记忆用户所有的配置,包括系统的 root 密码
[root@localhost ~]# cp /root/ anaconda-ks.cfg /var/ftp/pub/ks.cf
11.修改 ks.cfg 内容,配置安装完后自动重启系统
- [root@localhost ~]# vim /var/ftp/pub/ks.cfg
- # Partition clearing information
- clearpart --none --initlabel
- reboot # <-- 手动加上,不加则安装完成后不会自动重启系
12.配置 ks.cfg 文件权限为 755
[root@localhost ~]# chmod 755 /var/ftp/pub/ks.cf
13.关闭 SELinux,否则启动过程中会出现无法读取 ks.cfg 的情况(用户也可自行永久关闭 SELinux)
[root@localhost ~]# setenforce
14.启动所有相关服务
- [root@localhost ~]# systemctl enable --now dnsmasq
- [root@localhost ~]# systemctl enable --now vsftp
附: 如果不关闭防火墙,则需要开启如下端口:

验证效果




配置逻辑图

end
欢迎关注微信公众号【厦门微思网络】。http://www.xmws.cn专业IT认证培训19周年
主要课程:思科、华为、红帽、ORACLE、VMware、CISP、PMP等认证培训及考证
