已复制
全屏展示
复制代码

PXE+Kickstart批量安装CentOS7


· 5 min read

本文详细记录了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 nametftp服务器IP地址;
  • c. NICtftp的地址去获取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的配置文件,保证配置文件中只有一个labeldefault启动的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服务器,然后进行后续的一系列自动安装过程。

🔗

文章推荐