PXE实现Linux自动装机实践(VM环境)
PXE简介
PXE全称为:Preboot Execute Environment。从翻译直接看是(预引导执行环境)的意思。允许客户机通过网络从远程服务器上下载引导镜像,并加载安装文件或者整个操作系统。可以实现如下功能:
规模化:同时装配多台服务器
自动化:安装系统、配置各种服务
远程实现:不需要光盘、U盘等安装介质
PXE交互流程
从上图可以其交互流程,可简单的进行如下总结:
1、客户端启动系统,选择从网卡启动
2、从DHCP服务器中获取到IP地址等信息
3、还获取到tftp server 以及网络引导程序 pexliunx.0
4、通过网卡读取到ftfp server (/var/lib/tftpboot) 上的pexlinux.0,读取到内存中
5、在内存中执行引导程序
6、读取引导程序的配置文件(/var/lib/tftpboot/pxelinux.cfg/default)上的pexlinux.0,读取到内存中
7、读取default中的内容
8.根据配置文件去引导安装系统
9.系统安装过程
通过HTTP实现PXE自动装机
整体配置思路
- 配置YUM源
- 关闭防火墙和SELiunx
- 安装dhcp、tftp-server、httpd、syslinux
- 配置dhcp、tftp-server
- 安装system-config-kickstart(需要注意的,从RHEL8.0后system-config-kickstart被弃用,如果要使用kickstart,PXE SERVER必须安装桌面)
- 配置httpd,并修改YUM源
- 启动system-config-kickstart按照引导配置生成ks无人值守脚本
- 将ks文件复制到httpd的ks目录,并修改tftp-server配置文件
- 重启dhcp、tftp-server、httpd,并开始装机进程
配置YUM源
创建新yum配置文件 /etc/yum.repos.d/pxe.repo
[development] # 如果使用http进行装机此处标识必须为 development
name = rhel
baseurl = file:///media
enabled = yes
gpgcheck = no # 为测试环境不进行校验
end
配置完成后,执行如下命令重新生成yum 目录
yum cleam all
yum repolist all
关闭防火墙和SELinux
systemctl disable firewalld.service # 开机防火墙禁用
systemctl stop firewalld.service # 关闭防火墙
setenforce 0 # 将SELinux临时修改为Permissive模式。如果要直接关闭修改/etc/selinux/config 文件即可
安装dhcp、tftp-server、httpd、syslinux
按照如下脚本进行安装
yum install tftp-server.x86_64 -y
yum install httpd -y
yum -y install dhcp
yum -y install syslinux
yum -y install syslinux-tftpboot.noarch # 安装该rpm包后,在/var/lib/tftpboot 目录下就会自动生成pxelinux.0文件,可以都安装
配置dhcp 、tftp-server
修改dhcp配置文件
进入 /usr/share/doc/dhcp-server 将 dhcpd.conf.example 文件复制到/etc/dhcp/dhcpd.conf。并修改配置文件
# option definitions common to all supported networks...
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;
next-server 192.168.136.120; # 为本地tftp-server地址
filename "/pxelinux.0"; # 指定tftp的引导程序
default-lease-time 600;
max-lease-time 7200;
#
# A slightly different configuration for an internal subnet.
subnet 192.168.136.0 netmask 255.255.255.0 { # dhcp 地址池网段,如果有多个端口可以创建复制该段,创建多个地址池
range 192.168.136.150 192.168.136.160; # 动态分配范围
option domain-name-servers ns1.internal.example.org; # 本机fqdn
option domain-name "internal.example.org"; # dns
option routers 192.168.136.254; # 网关地址
option broadcast-address 192.168.136.255; # 广播地址
default-lease-time 600; #默认租约
max-lease-time 7200; # 最大租约
}
修改tftp-server配置文件
- 修改配置文件vim /etc/xinetd.d/tftp
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
disable = no # 修改为 no
per_source = 11
cps = 100 2
flags = IPv4
}
- 复制pxe引导程序到tftpboot中
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot # 如果安装了syslinux-tftpboot.noarch可以不执行该步骤
- 配置default文件
在/var/lib/tftpboot目录下创pxelinux.cfg目录,并配置defualt文件
cd /var/lib/tftpboot
mkdir pxelinux.cfg # 用于存放用于ISOLINUX引导加载器,其作用为定义启动菜单、配置启动参数、控制启动行为、多引导支持
mkdir rhel7.6 # 用于存放 initrd 初始化镜像文件 vmlinuz 内核文件。此两个文件版本必须与PXE Cline装机的目标系统内核版本一致。
cp /media/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
cp /media/isolinux/* /var/lib/tftpboot
cp /media/images/pxeboot/initrd.img /var/lib/tftpboot/rhel7.6/
cp /media/images/pxeboot/vmlinuz /var/lib/tftpboot/rhel7.6/
修改ISOLINUX引导加载器
vim /var/lib/tftpboot/pxelinux.cfg/default
default vesamenu.c32
timeout 60 #默认为600,单位10/1秒。
display boot.msg
label rhel7.6
menu label ^Install rhel7.6 # 目录标签
kernel /rhel7.6/vmlinuz # 指定内核路径
append initrd=/rhel7.6/initrd.img #指定初始化引导程序路径
安装system-config-kickstart
yum install -y system-config-kickstart
配置httpd,并修改YUM源
- 进入httpd根目录下,创建iso挂载点并将iso挂载,创建ks文件目录
cd /var/www/html # httpd根目录
mkdir cdrom
mkdir ks
#将iso镜像挂
umount /dev/sr0 /media # 具体设备dev名称按实际情况
vim /etc/fstab # 修该,fastab,开机自动挂载
/dev/sr0 /var/www/html/cdrom iso9660 defaults,loop 0 0 #添加挂载信息,配置完成后,执行 mount -a 挂载。
- 修改YUM源
[development]
name = rhel
baseurl = http://192.168.136.120/cdrom # 指定yum源为httpd根目录下路径
enabled = yes
gpgcheck = no
启动system-config-kickstart按照引导配置生成ks无人值守脚本
system-config-kickstart
基本配置
安装方法
选择HTTP方式,HTTPF服务器地址为本机地址,HTTP目录为创建httpd根目录/var/www/html下的/cdrom。为ISO镜像挂载点
引导装载程序选项
分区信息
如果是新安装,建议选择 清除主引导记录,删除所有现存分区
网络配置
网络设备填写 eth0即可。内核中依旧显示为eth0,只是会有映射到具体NIC口
[root@localhost pxeboot]# dmesg | grep eth
[ 2.290891] e1000 0000:02:01.0 eth0: (PCI:66MHz:32-bit) 00:0c:29:3b:aa:58
[ 2.290897] e1000 0000:02:01.0 eth0: Intel(R) PRO/1000 Network Connection
验证(按需即可)
防火墙配置(按需即可)
显示配置(按需即可)
软件包安装(按需即可)
安装后脚本
如果有其它脚本,解释程序填写 /bin/sh即可
有部分系统默认不创建任何用户。为后续方便可以创建admin用户。
单击【保存】生成ks文件
完成后即可在root下看到生成的ks文件
将ks文件复制到httpd的ks目录,并修改tftp-server配置文件
# 将ks文件复制到httpd的指定ks路径下
cp /root/ks20240610.cfg /var/www/html/ks
# 修改tftf-server配置,指定ks文件路径
label rhel7.6
menu label ^Install rhel7.6
**menu default** # 注该menu default 为label check中移动到该标签下,一个default中只能有一个 menu default
kernel /rhel7.6/vmlinuz
append initrd=/rhel7.6/initrd.img **ks=http://192.168.136.120/ks/ks20240610.cfg**
label check
menu label Test this ^media & install Red Hat Enterprise Linux 7.6
kernel vmlinuz
append initrd=initrd.img inst.stage2=hd:LABEL=RHEL-7.6\x20Server.x86_64 rd.live.check quiet
重启dhcp、tftp-server、httpd,并开始装机进程
systemctl restart httpd
systemctl restart tftp
systemctl restart dhcpd
完成以上一切后,重启PXE Clinet 即可。