目录
一、PXE简介
PXE(Preboot execute environment 是一种能够让计算机通过网络启动的引导方式,只要网卡支持PXE协议即可使用Kickstart 是一种无人值守的安装方式,工作原理就是预先把原本需要运维人员手工填写的参数保存成一个 ks.cfg 文件,当安装过程中出现需要填写参数时则自动匹配 Kickstart 生成的文件,所以只要 Kickstart 文件包含了安装过程中所有需要人工填写的参数,那么运维人员就完全不需要干预,等待安装完毕即可。
坦白来讲,使用光盘或U 盘这种传统物理方式安装系统效率真的很低,尤其当需要批量部署系统时更是明显。一般的机房设备都会在数百台以上,即便购买了数百张系统光盘,那也必需对每台设备初始化安装向导,免不了会有选错的参数,更何况如此多的设备没有几天肯定装不完吧。其实我们可以用 PXE+DHCP+TFTP+VSAod+Kickstat 部署出无人值守安装系统,这种系统能够实现自动化运维.避免了重复性劳动,帮助提升工作效率。
简单文本传输协议TFTP(TrivialFile Transfer Protocol是一种基于UDP 协议的传输协议其与前面学习的 vsftpd 服务程序的 FTP 协议有很大不同,TFTP 协议不具备FTP 的许多功能 (例如列出目录,密码认证等等),但TFTP 协议配置非常简单,而且资源消耗更低,非常适合传输不敏感的文件。
二、PXE实现过程及服务作用
(一)PXE实现过程

图中为PXE客户端获取文件过程,其实现过程可以分为以下几个步骤:
客户端启动:
客户端计算机开机时,其网卡(必须支持PXE)会自动发送一个DHCP请求广播包到网络中,请求IP地址分配和其他相关信息。
DHCP服务响应:
PXE服务器上的DHCP服务接收到请求后,除了分配给客户端一个IP地址和网络配置信息外,还会在DHCP选项中包含一个特殊的引导文件名称(pxelinux.0引导文件的路径)以及TFTP服务器的IP地址。
客户端下载引导程序:
客户端根据DHCP回应中的信息,通过TFTP协议从指定的TFTP服务器上下载PXE引导加载器。
引导加载器工作:
下载完成之后,客户端执行该引导加载器。引导加载器进一步与服务器通信,获取安装配置信息和必要的内核、initrd映像等文件。
操作系统加载及安装:引导加载器使用获取到的操作系统镜像文件和可能的自动化应答文件(kickstart文件),开始操作系统安装流程。
自动化安装:
如果设置了自动化安装脚本,则安装过程无需人工干预,按照预定义的参数和设置进行操作系统的安装、分区、软件包选择等步骤。
完成安装并重启:当操作系统安装完成后,系统通常会自动重启,并且从本地硬盘启动新安装的操作系统。
(二)服务作用
1.DHCP服务
用于自动分配IP地址、子网掩码、默认网关、DNS服务器等网络参数给启动的客户端计算机。在PXE场景下,DHCP服务器还会提供一个特殊选项,其中包含TFTP服务器的IP地址以及引导文件名,这样客户端就知道去哪里下载引导程序。
2.TFTP服务
TFTP是一种简单且安全的文件传输协议,适用于无盘工作站或者系统初始化环境。PXE客户端根据DHCP获取到的信息,通过TFTP从指定的服务器下载预启动执行环境的引导程序(pxelinux.0)及后续的内核镜像、initrd等安装所需文件
3.FTP服务
因为TFTP不支持断点续传等高级功能,对于大文件传输效率较低,而HTTP(S)或FTP则更稳定高效
4.syslinux
在PXE环境中,TFTP服务器上通常会提供一个由Syslinux提供的名为pxelinux.0的引导加载程序。当客户端通过PXE启动时,会下载这个文件并执行
三、搭建PXE服务器与无人值守
(一)搭建PXE服务器
1.部署环境
首先准备两台机器,关闭服务器的防火墙与核心防护
|--------|---------------|
| PXE服务器 | 192.168.83.30 |
| 客户端 | 未安装任何系统 |
下载dhcp、ftp、tftp、syslinux服务程序
yum install dhcp vsftpd tftp-server.x86_64 syslinux -y

2.配置dhcp
首先复制一些模板配置文件
cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
再去修改/etc/dhcp/dhcpd.conf 文件

cs
subnet 192.168.83.0 #分配的子网
netmask 255.255.255.0 #子网掩码
range 192.168.83.100 192.168.83.200; #分配的IP地址范围
option routers 192.168.83.2; #网关
next-server 192.168.83.30; #指定tftp服务地址
filename "pxelinux.0; #指定启动文件
启动dhcp服务

3.修改tftp服务
可以通过rpm -ql 去查找配置文件位置

先来修改配置文件
分析 vsftpd 服务程序时发现,FTP 服务器为了随时能够回应客户端的请求必需运行一个长期驻扎在系统中的守护进程,但这样也意味着会有一定的资源浪费,网络守护进程服务程序 xinetd 便是为了解决资源浪费问题而设计的,因为xinetd 服务程序会同时监听多个系统端口,依据客户端请求的端口再转发给指定的服务程序,而 tftp 便是由 xinetd服务程序来管理的。

启动tftp服务

4.配置vsftpd程序
在/var/ftp/下新建一个目录,并将光盘挂载到该目录下,供客户端下载

启动ftp服务

现在,我们将光盘中的initrd.img vmlinuz 两个文件复制到启动文件的存放位置,即/var/lib/tftpboot

5.配置syslinux服务程序
syslinux是用于提供引导加载的服务程序,目的是筒化安装 Linux 系统的时间,安装 syslinux 服务程序
还记得在配置dhcp时指定了一个pxelinux.0的启动文件,就是由syslinux服务提供的,现在需要找到它,并将它复制到/var/lib/tftpboot/目录下

tftpboot目录下已经有了三个文件了,分别是:
initrd.imd:初始化镜像文件
pxelinux.0:用于网络启动的引导加载器,当客户端通过PXE启动时首先会下载并执行这个文件。
vmlinuz:内核文件,用于加载操作系统并开始安装过程。
现在,还需要建立一个叫做pxelinux.cfg的目录文件
6.手写配置文件
pxelinux.cfg目录下的需要手写一个配置文件default,这个文件定义了引导菜单、内核选项、initrd映像等安装参数。

cs
default linux:#设置默认的引导项为"linux"
timeout 300: #超时等待时间。此处设置为300秒即5分钟。
label linux: #定义一个名为"linux"的引导标签,该标签描述了一组用于启动Linux操作系统的命令行参数
kernel vmlinuz:#指定了内核映像文件
#append initrd=initrd.img method=ftp://192.168.83.30/cdrom:添加了一系列传递给内核的启动参数:
initrd=initrd.img:#指示要使用的初始化RAM磁盘映像文件。
method=ftp://192.168.83.30/cdrom:#设置安装介质来源为FTP服务器上的CD-ROM目录。
这意味着在启动 Linux后,操作系统会通过FTP
协议从指定IP地址的服务器获取安装所需的资源
到这里,我们的配置参数就设置好了,再次提醒注意防火墙与和核心防护
此时,在/var/lib/tftpboot/目录下,应该会有四大文件:
initrd.img
vmlinuz (光盘内 images)
pxelinux.0(安装syslinux)
pxelinux.cfg (手动创建文件夹)/创建 default 的文件
7.初步测试
去客户机测试一下吧,新建一台客户机





可以看到,直接就可以跳到这一步,不需要去添加映像文件,配置信息,但是还需要手动设置一些信息,想要彻底一键安装,还需要设置kickstart(无人值守)
(二)kickstart无人值守
1.安装图形化工具

2.打开图形工具
在应用程序里打开kickstart工具,或者使用命令


3.基本配置

注释:给root密码加密后,生成一个加密后的root密码
4.安装方法

注释:IP地址后面的 / 一定不要忘了输入,/:代表/var/ftp目录
5.引导装载的程序选项

6.分区信息

首先添加/boot分区,自定义大小

再添加swap分区,自定义大小

最后添加/分区,在不知道磁盘大小的情况下,就选择使用磁盘上未使用的全部空间,所以要先建立/boot分区与swap分区

7.防火墙配置

8.显示配置

9.安装后脚本
可以设置一些你要运行的脚本,比如
useradd -u 1100 kysw:创建一个名为kysw的用户,并指定uid号为1100
echo "pa12ss34wd56" | passwd kysw --stdin:免交互设置密码为pa12ss34wd56
10.保存文件

必须保存在/var/ftp目录下,因为是通过FTP服务来传输文件的



回到Xshell或者虚拟机当中查看/var/ftp目录,会有一个名为ks.cfg的文件

11.添加配置文件
此时,需将该目录写道配置文件中
vim /var/lib/tftpboot/pxelinux.cfg/defautl

12.再次测试
再次打开客户机,从网络环境中进入,就可以直接安装到字符界面,中间不需要在手动操作

可以看到,设置的脚本也生效了
四、Cobbler工具
(一)cobbler工具的特点
Cobbler是一款开源的Linux系统自动化安装部署工具,主要用于简化网络操作系统安装、管理和更新过程。在PXE批量装机环境中,Cobbler起到了关键的作用:
自动化配置服务:Cobbler可以自动配置和管理DHCP、TFTP、DNS等服务,为PXE启动提供所需的环境。
系统镜像管理:它能够管理不同版本的操作系统安装源,包括ISO文件、kickstart或preseed等自动化应答文件,以及内核和initrd映像。
快速部署:只需简单的命令行操作或者Web界面操作,即可快速创建并配置新的PXE引导菜单项,实现一键式批量安装操作系统。
多平台支持:Cobbler不仅支持多种Linux发行版(如Red Hat、CentOS、Ubuntu等),还支持Windows等其他操作系统。
(二)实际操作
将之前的PXE服务器先还原,或者使用一台新的机器做为服务器
1.安装cobbler工具与dhcp
cobbler工具光盘中是没有软件包的,需要先下载额外源,而后再下载工具
cobbler工具,并不能提供dhcp服务,所以还需要安装dhcp服务


这个时候,我们开启cobblerd、httpd、tftp、dhcpd服务会显示失败,因为有些配置还没有完成
我们可以输入cobbler check命令,检查Cobbler服务器的配置和运行状态

可以看到有好多的信息,那么分析一下这些信息
|-------------------|------------------------------------------------------------------------------------------------------------------------------|
| 1.服务器字段设置 | Cobbler需要将/etc/cobbler/settings文件中的 server字段设置为非 'localhost' 的值 。应设置为PXE客户端能够访问到的实际主机名或IP地址。 |
| 2.next_server字段设置 | 同样在/etc/cobbler/settings 文件中,将 next_server字段设置为PXE网络上启动服务 器的真实IP地址,而不是 '127.0.0.1'(本地回环地址)。 |
| 3.SELinux状态 | 由于系统启用了SELinux,需要按照Cobbler Wiki页面的指导来确保Cobbler在当前SELinux环境中正常工作。 |
| 4.TFTP服务配置 | 需要在 /etc/xinetd.d/tftp 文件中将 'disable' 参数改为 'no',以启用并允许通过xinetd启动TFTP服务。 |
| 5.缺少网络引导加载器 | 检查 /var/lib/cobbler/loaders 目录下是否包含所有架构所需的引导加载器文件。若仅支持x86/x86_64架构,确保已安装最新版本的syslinux包,并确认pxelinux.0、menu.c32等文件存在。 |
| 6.启动rsyncd服务 | 使用systemctl工具启用并启动rsyncd.service,以便Cobbler可以管理镜像同步等相关功能。 |
| 7.debmirror包未安装 | 若要管理和部署Debian系统及其仓库,需安装debmirror软件包。 |
| 8.默认密码安全 | 默认的模板密码设置仍为 'cobbler',为了安全性,请更改此密码。可以使用提供的openssl命令生成一个新的加密密码,并将其替换到 /etc/cobbler/settings 文件中的 default_password_crypted 字段。 |
| 9.电源管理工具缺失 | 发现没有安装用于电源管理(如重启、关机)的fencing工具。如果需要使用这些可选功能,请安装cman或fence-agents相关包。 |
2.修改配置文件
上面的信息,我们不需要全部修改,只需要操作其中的几个,剩下的,只需要使用cobbler sync命令同步一下即可。
在打开配置文件之前,首先来生成一个加密密码

那么我们先打开配置文件vim /etc/cobbler/settings
先修改第8条信息
将101行的加密密码替换成自己生成的密码

修改第2条信息
在第278行next_server字段,将回环地址设置成自己的ip地址

修改第1条信息
在第390行server字段,将回环地址设置成自己的ip地址

将第242行manage_dhcp的值设置为1,表示通过cobbler工具生成dhcp.conf配置文件

将第298行的pxe_just_once的值设置为,表示,如果客户端有系统,则该工具不生效,防止重复安装系统

到这里,配置文件就修改完毕了
3.配置dhcp
dhcp在/etc/cobbler/dhcp.template有一个模板文件
vim打开后,将内容按自己的IP段设置好,跟dhcp服务配置文件基本一致

第28行的next_server与cobbler配置文件中的nxet_server想对应,所以不需要更改
4.重启服务
重启服务之前使用cobbler sync命令同步一下

看到末尾的TASK COMPLET,而且没有报错信息,就表示成功了

此时再重启一下服务

查看一下dhcp的配置文件

使用tree命令查看一下/var/lib/tftpboot文件

可以看到,它同步了我们需要的信息,不需要我们再去手动配置
5.下载安装文件
现在基本上已经把所有的步骤都做完了,但是还有最重要的一步,下载安装系统需要的文件,从光盘里面下载
首先先挂载光盘
而后使用cobbler import --name=centos-7-x86_64 --path=/mnt --arch=x86_64下载,因为文较大,所以需要等待一会

这条命令表示将/mnt目录下的所有文件,拷到一个固定目录/var/www/cobbler/ks_mirror/,取一个名字叫做centos-7.7-x86_64

6.客户机验证
还是一样,使用客户机以网络方式启动,会进入下图这样的界面,选择centos-7-x86_64,这就是我们之前拷贝光盘文件时设置的文件名,也可以设置成其它的名字
