使用PXE配合kickstart实现无人部署安装操作系统
环境准备:
RHEL7.9-Server-dvd.iso RHEL7.9主机一台 无系统主机一台 kickstart PXE tftp Apache DHCP软件包
PXE (Preboot Execution Environment)
概述
PXE(Preboot Execution Environment,预启动执行环境)是一个允许计算机通过网络引导操作系统的协议。它主要用于无盘工作站和自动化操作系统部署。
工作原理
- 网络启动:计算机通过 BIOS/UEFI 选择网络启动。
- DHCP 请求:计算机发送 DHCP 请求获取 IP 地址。
- PXE 服务器响应:DHCP 服务器或 PXE 服务器响应请求,提供 IP 地址和 PXE 引导程序(通常是 TFTP 服务器地址和引导文件名)。
- 下载引导文件:计算机从 TFTP 服务器下载引导文件(如 PXELINUX)。
- 引导操作系统:计算机通过下载的引导文件启动操作系统安装程序或直接启动操作系统。
用途
- 无盘工作站:允许计算机无需本地存储设备,通过网络启动和运行操作系统。
- 大规模操作系统部署:在数据中心或企业环境中,通过 PXE 实现自动化、大规模的操作系统部署。
Kickstart
概述
Kickstart 是一种用于自动化安装 Red Hat Enterprise Linux(RHEL)、CentOS 和 Fedora 等操作系统的工具。通过一个预配置的文件(ks.cfg
),Kickstart 允许无须人工干预地安装和配置操作系统。
工作原理
- 创建 Kickstart 文件:包含安装选项、软件包选择和配置指令的文本文件。
- 启动安装程序:通过 PXE 或可引导介质启动操作系统安装程序,并指定 Kickstart 文件的位置。
- 自动化安装:安装程序读取 Kickstart 文件并根据其中的指令自动进行操作系统安装和配置。
用途
- 无人值守安装:自动化和标准化操作系统安装过程,减少人工干预和出错风险。
- 批量部署:在数据中心或大规模服务器环境中,通过 Kickstart 文件快速部署多个相同配置的系统。
- 自定义安装:通过 Kickstart 文件预定义安装选项、软件包和配置,确保所有系统具有一致的配置。
PXE 和 Kickstart 联合使用
PXE 和 Kickstart 常常联合使用以实现大规模、无人值守的操作系统部署:
- PXE 引导:计算机通过 PXE 从网络启动。
- 自动化配置:PXE 引导程序指定 Kickstart 文件的位置。
- 无人值守安装:计算机自动读取 Kickstart 文件并执行安装和配置,无需人工干预。
实现步骤
- 设置 DHCP 服务器:提供 IP 地址和 PXE 引导程序。
- 配置 TFTP 服务器:提供 PXE 引导程序和相关文件。
- 配置 Apache/Nginx 服务器:提供 Kickstart 文件。
- 创建 Kickstart 文件:包含安装和配置指令的
ks.cfg
文件。 - PXE 引导配置:在 PXE 引导程序中指定 Kickstart 文件的位置。
通过kickstart配置好自动化配置文件,Apache服务器提供ks.cfg配置文件、以及提供网络镜像;DHCP服务给无操作的主机分配IP,并通过DHCP服务让主机找到系统安装文件入口,然后通过tfpt传输安装文件再根据kickstart的配置自动安装系统,在大规模服务器批量部署操作系统时候可以很大程度的提高部署效率.
#准备工作
#搭建本地仓库
[root@rhel7-server ~]# mkdir /rhel7
[root@rhel7-server ~]# mount /dev/sr0 /rhel7
[root@rhel7-server ~]# cat /etc/yum.repos.d/rhel7.repo
[rhel7]
name=rhel7
baseurl=file:///rhel7
gpgcheck=0
enable=1
#关闭防火墙
[root@rhel7-server ~]# systemctl disable firewalld
[root@rhel7-server ~]# systemctl mask firewalld
详细步骤
1.配置Apache 服务
#安装httpd软件包
[root@rhel7-server ~]# yum install -y httpd
#把本地镜像传到网络
[root@rhel7-server ~]# ln -s /rhel7/ /var/www/html/
#等待kickstart配置完,把ks.cfg放到/var/www/html/下供访问
[root@rhel7-server ~]# cp ks.cfg /var/www/html/
#重启Apache服务
[root@rhel7-server ~]# systemctl enable --now httpd
测试apache页面是否正确搭建
2.安装DHCP
#安装DHCP软件
[root@rhel7-server ~]# yum install dhcp -y
#复制DHCP配置文件模版
[root@rhel7-server ~]# \cp -f /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
#编辑配置文件
[root@rhel7-server ~]# cat /etc/dhcp/dhcpd.conf
#域名 DNS
option domain-name "dtxt.org";
option domain-name-servers 114.114.114.114;
#租期
default-lease-time 600;
max-lease-time 7200;
#日志文件格式输出
log-facility local7;
#配置子网段 掩码 IP池范围 网关
subnet 10.211.55.0 netmask 255.255.255.0 {
range 10.211.55.100 10.211.55.199;
option routers 10.211.55.1;
#这里是让待装系统主机在获取IP后,再次到目的Server上寻找pxelinux.0文件 通过tftp传输
next-server 10.211.55.70;
filename "pxelinux.0";
}
#重启DHCP服务
[root@rhel7-server ~]# systemctl enable --now dhcpd
查看DHCP分配信息
[root@rhel7-server ~]# cat /var/lib/dhcpd/dhcpd.leases
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-4.2.5
server-duid "\000\001\000\001.BD\340\000\034BD\365\010";
lease 10.211.55.100 {
starts 0 2024/08/04 14:15:28;
ends 0 2024/08/04 14:25:28;
cltt 0 2024/08/04 14:15:28;
binding state active;
next binding state free;
rewind binding state free;
hardware ethernet 00:1c:42:bd:2a:9b;
}
3.配置kickstart
#安装软件
[root@rhel7-server ~]# yum install system-config-kickstart -y
#请切换到GUI界面启动kickstart进行配置
具体配置如下图:
到这里kickstart的GUI配置结束
#添加必要软件包
[root@rhel7-server ~]# vim ks.cfg
#在%post前添加包
%packages
@base
httpd
%end
#检查配置文件的语法
#没有任何提示即表示语法检测通过 , 有错会报错提示
[root@rhel7-server ~]# ksvalidator ks.cfg
#[现在把ks.cfg 放到apache目录下]
此时 已经可以开机在有镜像的主机上使用ks.cfg安装脚本了 Tab 添加 ks=http://10.211.55.70/ks.cfg
但是这种方式安装依赖于连接本地镜像,而且得手动配置
4.配置PXE(实现真正的无人值守)
#安装PXE 、 tftp软件包
[root@rhel7-server ~]# yum install -y syslinux tftp-server
#启动tfpt-server
[root@rhel7-server ~]# systemctl enable --now tftp
#从镜像拷贝启动文件 以及 PXE 文件
[root@rhel7-server ~]# cp /rhel7/isolinux/* /var/lib/tftpboot/
[root@rhel7-server ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
[root@rhel7-server ~]# cd /var/lib/tftpboot/
[root@rhel7-server tftpboot]# ll
总用量 113280
-r--r--r--. 1 root root 2048 8月 4 23:07 boot.cat
-r--r--r--. 1 root root 84 8月 4 23:07 boot.msg
-r--r--r--. 1 root root 321 8月 4 23:07 grub.conf
-r--r--r--. 1 root root 51795161 8月 4 23:07 initrd.img
-r--r--r--. 1 root root 24576 8月 4 23:07 isolinux.bin
-r--r--r--. 1 root root 3166 8月 4 23:07 isolinux.cfg
-r--r--r--. 1 root root 190896 8月 4 23:07 memtest
-rw-r--r--. 1 root root 26743 8月 4 23:07 pxelinux.0
-r--r--r--. 1 root root 186 8月 4 23:07 splash.png
-r--r--r--. 1 root root 2438 8月 4 23:07 TRANS.TBL
-r--r--r--. 1 root root 57003457 8月 4 23:07 upgrade.img
-r--r--r--. 1 root root 153104 8月 4 23:07 vesamenu.c32
-r-xr-xr-x. 1 root root 6769496 8月 4 23:07 vmlinuz
#将isolinux.cfg 启动界面配置文件 作为模版 给到PXE要求的pxelinux.cfg/default
[root@rhel7-server tftpboot]# mkdir pxelinux.cfg
[root@rhel7-server tftpboot]# cp isolinux.cfg pxelinux.cfg/default
#调整安装启动参数 等待时间 镜像位置 ks位置
[root@rhel7-server tftpboot]# vim pxelinux.cfg/default
timeout 50 #5s
.
.
.
label linux
menu label ^Install Red Hat Enterprise Linux 7.9
menu default #设置为默认选中
kernel vmlinuz
# append initrd=initrd.img inst.stage2=hd:LABEL=RHEL-7.9\x20Server.x86_64 quiet
append initrd=initrd.img repo=http://10.211.55.70/rhel7 ks=http://10.211.55.70/ks.cfg quiet #quiet 表示静默安装
5.安装测试
启动待安装主机
PXE测试OK
直接开启虚拟机 显示网络然后DHCP获取到IP、然后到安装界面、默认选择的第一项直接安装、倒计时5s、然后自动执行系统核心及软件包安装
要注意的是因为BIOS或者默认是网络启动,在系统安装完毕后需要调整为从硬盘启动而不是网络,否则会无限循环安装…(所以也建议在写ks的配置时候不勾选安装完成后自动重启)
或者是临时选择网络启动,硬盘启动优先级第一位,虚拟机里设置也就是同时勾选,图上的顺序即可