【分享】使用 PXE + Kickstart 无人值守安装 Linux
介绍
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等认证培训及考证