PXE+Kickstart批量安装CentOS7
本文详细记录了PXE+Kickstart无人值守批量安装CentOS7的全过程。
一. PXE介绍
PXE(Pre-boot Execution Environment)
叫做预启动执行环境,它提供了一个通过网络启动操作系统或者启动安装器anaconda
的环境。PXE
的代码是内嵌在网卡内芯片上的。安装的第一步是加载一个启动管理器(boot loader
)来加载内核和安装器(anaconda
)。
1.1 anaconda
是Red Hat、CentOS、Fedora
等Linux的安装管理程序。它可以提供文本、图形等安装管理方式,并支持Kickstart
等脚本提供自动安装的功能。
1.2 PXE启动流程
- a. 网卡(
NIC
)申请DHCP
信息,获得有效的客户端IP地址; - b. 同时
DHCP
服务器提供bootloader name
和tftp
服务器IP
地址; - c.
NIC
用tftp
的地址去获取bootloader
,然后BIOS
执行bootloader
,通常bootloader
叫做pxelinux.0
; - d.
Bootloader
再次用tftp
去找kickstart
配置文件ks.cfg
,按配置文件内容运行。 - e. 启动
anconda
安装器,由于ks.cfg
中定义了安装镜像的位置以及安装器所需的必要信息,所以安装器就能在没有人为干预的情况下进行安装。
1.3 pxelinux.0配置
pxelinux.0
是网络boot loader
程序,由syslinux
包提供,它的配置文件是通过tftp server
上的pxelinux.cfg/filename
位置提供,其中filename
的名称可以有如下几种,pxelinux.0
程序按照如下的文件名顺序查找,直到找到一个文件为止。pxelinux.0
程序能够解释它的配置文件内容。
- 查找客户端网卡
UUID
命名的配置文件
(pxelinux.cfg/b8945908-d6a6-41a9-611d-74a6ab80b83d
); - 查找以
ARP type code 01
开头"-"
分隔的MAC
地址
(pxelinux.cfg/01-aa-bb-cc-dd-ee-ff
); - 查找用16进制表示的
IP
地址,可用gethostip
得到
(pxelinux.cfg/C000025
); - 查找
default
文件名
(pxelinux.cfg/default
)。 pxelinux.0
配置文件语法
display #表示显示的菜单
default # 表示如果有多个label的话,默认去加载哪一个label
prompt 0 | 1 # 一般情况是1,是否需要用户输入label名称
timeout # 这个时间没有设置的话,就会加载默认的label
label # 相当于grub里面的title
kernel # 是内核名称
append # 内核命令行的参数
二. 安装ftp服务
yum install -y vsftpd
systemctl start vsftpd
systemctl enable vsftpd
firewall-cmd --add-service=ftp --permanent
firewall-cmd --reload
ftp
服务的家目录是/var/ftp
, 而/var/ftp/pub
是ftp的公共目录,不需要任何权限即可访问,往公共目录创建测试文件,测试ftp的共享功能是否正确。
三. 安装tftp服务
yum install -y tftp tftp-server xinetd
vim /etc/xinetd.d/tftp
# 修改如下为no,表示需要xineted服务管理tftp
disable = no
# 重启xinetd服务
systemctl restart xinetd
firewall-cmd --add-port=69/udp --permanent
firewall-cmd --reload
四. 安装dhcp服务
yum install -y dhcp
编辑配置文件vim /etc/dhcp/dhcpd.conf
,配置详细详细请查看文章 CentOS7搭建DHCP服务。
default-lease-time 600;
max-lease-time 7200;
subnet 192.168.40.0 netmask 255.255.255.0 {
range 192.168.40.200 192.168.40.250;
option subnet-mask 255.255.255.0;
option routers 192.168.40.2;
option domain-name-servers 114.114.114.114, 8.8.8.8;
next-server 192.168.40.60;
filename "pxelinux.0";
}
systemctl restart dhcpd
systemctl enable dhcpd
firewall-cmd --add-service=dhcp --permanent
firewall-cmd --reload
五. 配置文件
PXE的启动需要一些光盘的内容,所以直接将光盘挂载到ftp的公共目录下,为了复制一些必要文件,同时也为了后续的系统安装下载提供服务。pxelinux.0
程序需要安装syslinux包。
yum install -y syslinux
mount /dev/sr0 /var/ftp/pub/
cp /usr/share/syslinux/{pxelinux.0,vesamenu.c32,menu.c32} /var/lib/tftpboot/
cp /var/ftp/pub/images/pxeboot/{initrd.img,vmlinuz} /var/lib/tftpboot/
mkdir /var/lib/tftpboot/pxelinux.cfg
cp /var/ftp/pub/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
pxelinux.0
boot loader
启动程序。vesamenu.c32
制定启动器使用什么模式的背景。Vesamenu.c32图形模式。menu.c32
制定启动器使用什么模式的背景。menu.c32文本模式。initrd.img
initrd是“initial ramdisk”的简写。initrd一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。它包含了部分基础的设备驱动以及虚拟文件系统。vmlinuz
是一个缩减版的、可引导的内核文件,可以控制下一步的镜像下载等工作。“vm”代表“Virtual Memory”,vmlinux是未压缩的内核,vmlinuz是vmlinux的压缩文件。isolinux.cfg
是pxelinux.0
的配置文件。
添加一个pxe的配置文件,保证配置文件中只有一个label
是default
启动的label
,删除其他不必要的label
。 或者只保留一个label
vim /var/lib/tftpboot/pxelinux.cfg/default
DEFAULT bootoslinux
PROMPT 0
TIMEOUT 60
label bootoslinux
menu label ^aniu 7.0
menu default
kernel vmlinuz
append initrd=initrd.img ks=ftp://192.168.40.60/ks.cfg
六. 安装kickstart组件
最后一步是安装kickstart
,它提供了操作系统具体的安装内容。system-config-kickstart
命令是一个图形化界面工具,所以需要桌面环境才行。
yum install system-config-kickstart
system-config-kickstart
cp /root/ks.cfg /var/ftp/
system-config-kickstart
注意事项:
- 默认生成的
ks.cfg
文件没有软件包的部分,所以软件包部分从/root/anaconda-ks.cfg
文件获取。
七. 打开客户端电源
最后打开客户端电源,如果是 VMware 的话,保证他们在同一个虚拟网络上,并且关闭VMware自带的dhcp服务,避免多个dhcp服务存在,此时客户端服务器没有安装过系统,所以找不到系统就尝试从网络启动,寻找dhcp服务器,然后进行后续的一系列自动安装过程。