文章目录
引言
在现代数据中心和服务器管理中,快速、高效的批量操作系统安装变得尤为重要。传统的单机光驱或U盘安装方式已不能满足大规模服务器部署的需求。PXE(预启动执行环境)技术结合Kickstart应答文件,可以实现无人值守的自动化安装,极大地提升了装机效率。
一、系统装机的三种引导方式
- 硬盘启动:从已安装操作系统的硬盘启动。
- 光驱(U盘)启动:通过加载外部介质(如光驱、U盘)中的操作系统镜像进行安装。
- 网络启动(PXE):通过网络从远程服务器下载引导镜像和安装文件,实现操作系统的安装。
二、系统安装过程
- 加载boot loader:启动加载程序,初始化硬件设备和内存映射。
- 加载启动安装菜单:显示安装选项菜单。
- 加载内核和initrd系统:引导安装过程所需的内核和初始RAM盘。
- 加载根系统:挂载根文件系统,准备运行安装程序。
- 运行anaconda安装向导:开始操作系统的安装过程。
三、什么是PXE
PXE(Preboot Execution Environment)是Intel提出的一项网络引导技术,允许计算机通过网络从远程服务器下载引导镜像和安装文件,实现操作系统的安装。其主要硬件要求是支持PXE协议的网卡和BIOS设置支持网络引导。
PXE严格来说并不是一种安装方式,而是一种引导方式。进行PXE安装的必要条件是计算机中包含一个PXE支持的网卡(NIC),即网卡中必须有PXE Client。PXE协议使计算机可以通过网络启动。协议分为client和server端,PXE client在网卡的ROM中,当计算机引导时,BIOS将PXE client调入内存执行,由PXE client将放置在远端的文件通过网络下载到本地运行。
运行PXE协议需要设置DHCP服务器和TFTP服务器。DHCP服务器用来给PXE client(将要安装系统的主机)分配一个IP地址。由于是给PXE client分配IP地址,所以在配置DHCP服务器时需要增加相应的PXE设置。此外,在PXE client的ROM中,已经存在了TFTP Client。PXE Client通过TFTP协议从TFTP Server上下载所需的文件。
PXE的优点包括:
- 规模化:可以同时装配多台服务器。
- 自动化:实现系统安装和配置的自动化。
- 远程实现:无需光盘、U盘等安装介质,通过网络即可完成操作系统安装。
前提条件:
- 客户机的网卡支持PXE协议(集成BOOTROM芯片),且主板支持网络引导。
- 网络中有一台DHCP服务器以便为客户机自动分配地址、指定引导文件位置。
- 服务器通过TFTP(Trivial File Transfer Protocol,简单文件传输协议)提供引导镜像文件的下载。
四、KickStart 概述
KickStart是一种无人值守安装方式。KickStart的工作原理是通过记录典型安装过程中所需人工干预填写的各种参数,并生成一个名为ks.cfg的文件;在其后的安装过程中,当出现要求填写参数的情况时,安装程序会首先查找KickStart生成的文件。当找到合适的参数时,就采用找到的参数;当没有找到合适的参数时,才需要安装者手工干预。
这样,如果KickStart文件涵盖了安装过程中出现的所有需要填写的参数,安装者完全可以只告诉安装程序从何处取ks.cfg文件,然后去忙其他事情。安装程序会根据ks.cfg中设置的重启选项来重启系统,并结束安装。
五、搭建PXE服务的构建过程
环境准备
- 一台作为PXE服务器,一台作为裸金属客户机,绑定同一块网卡,裸金属客户机vmnet1网卡取消勾选DHCP配置。
- 关闭SELinux和防火墙。
主机服务器地址:192.168.10.17 主机名:KY17
配置要求:
- 配置双网卡,一个作用是DHCP,一个是使用网络源安装环境包。
- DHCP部署。
- TFTP服务器通过TFTP(Trivial File Transfer Protocol,简单文件传输协议)提供引导镜像文件的下载。
- Syslinux用于提供PXE的引导程序。
- Xinetd用于托管TFTP。
- VSFTPD用于放置安装镜像,通过FTP访问镜像安装。
- Kickstart用于无人值守安装。
5.1 安装所需软件包
所需安装包:
vsftpd
:用于放置安装镜像,通过FTP访问镜像安装。dhcp
:用于给客户机分配IP。syslinux
:用于提供PXE的引导程序。tftp-server
:用于提供引导镜像文件的下载。xinetd
:用于托管TFTP。system-config-kickstart
:用于无人值守安装。
5.2 配置DHCP服务
安装DHCP服务:
yum -y install dhcp cp -rfp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
配置DHCP服务:
编辑配置文件/etc/dhcp/dhcpd.conf
:
ddns-update-style none;
subnet 192.168.100.0 netmask 255.255.255.0 {
range 192.168.100.40 192.168.100.50;
option routers 192.168.100.100;
option domain-name-servers 114.114.114.114;
next-server 192.168.100.100;
filename “pxelinux.0”;
}
启动并启用DHCP服务:
systemctl start dhcpd systemctl enable dhcpd
![image-20240715042227331](https://img-blog.csdnimg.cn/img_convert/a48cb08642aee6b1a635f056181491ae.png) ## 5.3 安装并配置TFTP服务 1. **安装TFTP服务**: ```bash yum -y install tftp-server
配置TFTP服务:
编辑配置文件/etc/xinetd.d/tftp
:service tftp { socket_type = dgram protocol = udp wait = no user = root server = /usr/sbin/in.tftpd server_args = -s /var/lib/tftpboot disable = no per_source = 11 cps = 100 2 flags = IPv4 }
3. **启动并启用TFTP服务**: ```bash systemctl start xinetd systemctl enable xinetd systemctl start tftp systemctl enable tftp
5.4 准备引导文件
安装syslinux以获取pxelinux.0文件:
yum -y install syslinux cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
准备内核和初始RAM盘文件:
挂载CentOS安装镜像并复制必要文件:mount /dev/cdrom /mnt cp /mnt/images/pxeboot/vmlinuz /var/lib/tftpboot/ cp /mnt/images/pxeboot/initrd.img /var/lib/tftpboot/
5.5 配置启动菜单
创建目录并配置默认启动菜单:
mkdir /var/lib/tftpboot/pxelinux.cfg vim /var/lib/tftpboot/pxelinux.cfg/default
添加启动菜单配置:
default auto
prompt 1
label auto
kernel vmlinuz
append initrd=initrd.img method=ftp://192.168.100.100/centos7
label linux text
kernel vmlinuz
append text initrd=initrd.img method=ftp://192.168.100.100/centos7
label linux rescue
kernel vmlinuz
append rescue initrd=initrd.img method=ftp://192.168.100.100/centos7
![image-20240715042630640](https://img-blog.csdnimg.cn/img_convert/3ebc77a1facc025fe0cc957013784a69.png) ## 5.6 启动各项服务并关闭防火墙和SELinux 1. **启动服务**: ```bash systemctl start vsftpd systemctl enable vsftpd
- 关闭防火墙和SELinux:
systemctl stop firewalld
systemctl disable firewalld setenforce 0
六、Kickstart无人值守安装
6.1 准备安装应答文件
安装Kickstart配置工具:
yum install -y system-config-kickstart
打开Kickstart配置程序:
通过桌面菜单"应用程序" --> “系统工具” --> "Kickstart"打开,或执行system-config-kickstart
命令打开。配置Kickstart选项:
- 基本配置:
- 默认语言设为"中文(简体)“,时区设为"Asia/Shanghai”。
- 设置root密码。
- 高级配置中勾选"安装后重启"。
- 安装方法:
- 选择FTP。
- FTP服务器:
ftp://192.168.100.100
。 - FTP目录:
centos7
。
- 基本配置:
6.2 生成ks.cfg文件
通过图形化界面配置或直接编辑ks.cfg文件,以下为基本配置示例:
install keyboard 'us' rootpw --iscrypted $1$9Rn8W7vF$npbKh8CeIbTxjwHUlcW4n0 url --url="ftp://192.168.100.100/centos7" lang en_US auth --useshadow --passalgo=sha512 text firstboot --disable selinux --disabled firewall --disabled network --bootproto=dhcp --device=ens33 reboot timezone Asia/Shanghai bootloader --location=mbr zerombr clearpart --all --initlabel part / --fstype="xfs" --grow --size=1 part swap --fstype="swap" --size=2048 part /boot --fstype="xfs" --size=300 %packages @base @^gnome-desktop-environment %end
将生成的ks.cfg文件放置于FTP服务器的根目录:
cp ks.cfg /var/ftp/
6.3 配置PXE引导菜单使用Kickstart文件
编辑PXE引导菜单文件,添加Kickstart引导参数:
default auto prompt 1 label auto kernel vmlinuz append initrd=initrd.img method=ftp://192.168.100.100/centos7 ks=ftp://192.168.100.100/ks.cfg label linux text kernel vmlinuz append text initrd=initrd.img method=ftp://192.168.100.100/centos7 ks=ftp://192.168.100.100/ks.cfg label linux rescue kernel vmlinuz append rescue initrd=initrd.img method=ftp://192.168.100.100/centos7 ks=ftp://192.168.100.100/ks.cfg
6.4 客户端验证无人值守安装
将客户端调整为网络启动模式,开机后将自动通过PXE引导并使用Kickstart文件完成无人值守安装。
6.5 优化ks文件
可以对ks文件进行优化,以下为示例:
default auto prompt 1 label auto kernel vmlinuz append initrd=initrd.img method=ftp://192.168.100.100/centos7 ks=ftp://192.168.100.100/ks.cfg label linux text kernel vmlinuz append text initrd=initrd.img method=ftp://192.168.100.100/centos7 ks=ftp://192.168.100.100/ks.cfg label linux rescue kernel vmlinuz append rescue initrd=initrd.img method=ftp://192.168.100.100/centos7 ks=ftp://192.168.100.100/ks.cfg
如果无人值守安装想要字符界面,需要修改ks文件中的配置。
至此,基于PXE和Kickstart的无人值守自动安装配置完成。
七、安装后脚本的运行
创建本地YUM源,以便在安装后使用:
mkdir /etc/yum.repos.d/bak mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak echo "[local] name=local baseurl=ftp://192.168.100.100/centos7 enabled=1 gpgcheck=0" > /etc/yum.repos.d/local.repo
配置好以后保存为ks.cfg文件,保存路径为/var/ftp
。
ks.cfg应答文件解读
# Install OS instead of upgrade install //全新安装 # Keyboard layouts keyboard 'us' //英文键盘 # Root password rootpw --iscrypted $1$9Rn8W7vF$npbKh8CeIbTxjwHUlcW4n0 //root密码 # Use network installation url --url="ftp://192.168.100.100/centos7" //网络安装路径 # System language lang en_US //系统语言,zh_CN表示中文 # System authorization information auth --useshadow --passalgo=sha512 # Use text mode install text //字符模式安装,graphical表示图形化安装 firstboot --disable # SELinux configuration selinux --disabled //禁用SELinux # Firewall configuration firewall --disabled //禁用防火墙 # Network information network --bootproto=dhcp --device=ens33 //网卡配置 # Reboot after installation reboot //安装完重启 # System timezone timezone Asia/Shanghai // 时区:上海 # System bootloader configuration bootloader --location=mbr //MBR引导 # Clear the Master Boot Record zerombr # Partition clearing information clearpart --all --initlabel //清除所有分区信息和初始化分区标签 # Disk partitioning information part / --fstype="xfs" --grow --size=1 //分区配置 part swap --fstype="swap" --size=2048 part /boot --fstype="xfs" --size=300
最小安装
%packages @base //安装基础软件包 @^gnome-desktop-environment //安装桌面环境 %end
自定义软件包安装
如果需要自己配置软件包,需要编辑ks.cfg文件,添加至最后:
%packages @^graphical-server-environment @base @core @desktop-debugging @development @dial-up @fonts @gnome-desktop @guest-agents @guest-desktop-agents @hardware-monitoring @input-methods @internet-browser @multimedia @print-client @x11 chrony %end
最小化安装
如要求最小化安装,可复制下面内容添加到最后:
vim ks.cfg %packages @^minimal %end
好的,以下是修改后的NTP配置内容,将所有的192.178.10网段更改为192.178.78网段:
八、NTP(网络时间协议)配置
NTP(Network Time Protocol)是用于在计算机网络中同步时间的协议。NTP使用UDP端口123进行通信。
8.1 安装NTP
检查NTP是否已安装:
rpm -qa | grep ntp
安装NTP:
yum install -y ntp ntpdate
8.2 配置NTP
编辑NTP配置文件:
vim /etc/ntp.conf
配置文件示例:
restrict 192.178.78.0 mask 255.255.255.0 nomodify notrap server ntp1.aliyun.com server ntp2.aliyun.com prefer
参数说明:
restrict
:用于权限管理。常用选项有:ignore
:拒绝所有类型的NTP连接。nomodify
:客户端不能使用ntpc和ntpq程序来修改服务器的时间参数,但仍可以通过该服务器进行网络校时。noquery
:客户端不能使用ntpq、ntpc等命令查询时间服务器,即不提供NTP的网络校时。notrap
:不提供trap远程事件登录功能。notrust
:拒绝未认证的客户端。nopeer
:阻止主机尝试与服务器对等,并允许欺诈性服务器控制时钟。kod
:访问违规时发送KoD包。restrict -6
:表示IPv6地址的权限设置。
示例配置:
restrict 192.178.78.0 mask 255.255.255.0 nomodify notrap server ntp1.aliyun.com server ntp2.aliyun.com prefer
8.3 启动并启用NTP服务
启动NTP服务:
systemctl start ntpd systemctl enable ntpd
手动同步时间:
ntpdate ntp1.aliyun.com
8.4 检查NTP状态
查看NTP端口:
netstat -anptu | grep 123
检查NTP同步状态:
ntpq -p
输出示例:
remote refid st t when poll reach delay offset jitter ============================================================================== 120.25.115.20 10.137.53.7 2 u 31 64 7 41.492 14.853 1.629 203.107.6.88 100.107.25.114 2 u 30 64 7 36.183 13.013 44.214
参数解读:
remote
:远程连接的NTP主机名或IP,“*”代表正在作用的上层NTP,“+”代表次级候选NTP服务器。refid
:参考的上一层NTP主机的地址。st
:stratum阶层,当前NTP主机的层级信息。when
:几分钟前层走过同步化更新。poll
:下次更新在几秒钟后。reach
:已经向上层NTP服务器要求更新的次数。delay
:网络传输过程中延迟的时间,单位为10^-6秒。offset
:时间补偿的结果,单位为10^-3秒。jitter
:Linux系统时间与BIOS硬件时间的差异时间,单位为10^-6秒。
查看连接状态:
ntpstat
输出示例:
synchronised to NTP server (192.178.78.20) at stratum 4 time correct to within 1420 ms polling server every 64 s
参数解读:
remote
:远程连接的NTP主机名或IP,“*”代表正在作用的上层NTP,“+”代表次级候选NTP服务器。refid
:参考的上一层NTP主机的地址。st
:stratum阶层,当前NTP主机的层级信息。when
:几分钟前层走过同步化更新。poll
:下次更新在几秒钟后。reach
:已经向上层NTP服务器要求更新的次数。delay
:网络传输过程中延迟的时间,单位为10^-6秒。offset
:时间补偿的结果,单位为10^-3秒。jitter
:Linux系统时间与BIOS硬件时间的差异时间,单位为10^-6秒。
查看连接状态:
ntpstat
输出示例:
synchronised to NTP server (192.178.78.20) at stratum 4 time correct to within 1420 ms polling server every 64 s