(一)基础介绍与环境配置
PXE(Preboot eXecute Environment,预启动执行环境)是由 Intel 公司开发的技术,可以让计算机通过网络来启动操作系统(前提是计算机上安装的网卡支持 PXE 技术),主要用于在无人机值守安装系统中引导客户端主机安装 Linux 操作系统。Kickstart 是一种无人值守的安装方式,其工作原理是预先把原本需要运维人员手工填写的参数保存成一个ks.cfg 文件,当安装过程中需要填写参数时则自动匹配 Kickstart 生成的文件。所以只要使用 PXE+Kickstart 无人值守安装服务 。Kickstart 文件包含了安装过程中需要人工填写的所有参数,那么从理论上来讲完全不需要运维人员的干预,就可以自动完成安装工作。
- PXE的工作过程
PXE 部署拓扑图:
【本次实验因为资源不足的原因将服务器的功能集成到一台服务器中】
- 实验环境如下
主机名称 | 操作系统 | IP地址 | 备注 |
Server | CentOS 8.3 | IP:172.25.200.100/24 gateway:172.25.100.254 dns:172.25.200.100 | 使用Apache 站点作为系统安装文件获取的方式 |
Client | none |
(二) 实验操作-单系统安装
1.初始化环境
#把光驱连接到虚拟机中,并配置网络信息
[root@localhost ~]# nmcli con mod ens160 ipv4.method manual ipv4.address 172.25.200.100/24 ipv4.gateway 172.25.200.254 ipv4.dns 172.25.200.100 autoconnect yes&&nmcli con up ens160
[root@localhost ~]# hostnamectl set-hostname server
[root@localhost ~]# bash
####关闭防火墙#####
[root@server ~]# systemctl disable --now firewalld
[root@server ~]# iptables -F
[root@server ~]#setenforce 0
[root@server ~]# sed -i 's/=enforcing/=disabled/g' /etc/selinux/config
####### 配置yum源 #######
[root@server ~]#mkdir /root/back
[root@server ~]#mv /etc/yum.repos.d/* /root/back/
[root@server ~]#mkdir -p /mnt/cdrom
[root@server ~]#mount /dev/sr0 /mnt/cdrom
[root@server ~]#cd /etc/yum.repos.d/
[root@server yum.repos.d]#cat >>cdrom.repo<<OK
[AppStream]
name=AppStream
baseurl=file:///mnt/cdrom/AppStream
enabled=1
gpgcheck=0
[BaseOS]
name=BaseOS
baseurl=file:///mnt/cdrom/BaseOS
enabled=1
gpgcheck=0
OK
[root@server yum.repos.d]#yum makecache
[root@server yum.repos.d]#cd ~
2.配置DHCP服务
[root@server ~]#yum -y install dhcp-client dhcp-server
[root@server ~]#cp -a /usr/share/doc/dhcp-server/dhcpd.conf.example /etc/dhcp/dhcpd.conf
[root@server ~]#vim /etc/dhcp/dhcpd.conf
subnet 172.25.200.0 netmask 255.255.255.0 {
range 172.25.200.30 172.25.200.40;
option domain-name-servers 172.25.200.100;
option domain-name "example.com";
option routers 172.25.200.254;
option broadcast-address 172.25.200.255;
default-lease-time 600;
max-lease-time 7200;
next-server 172.25.200.100; #设置客户端从那台服务器中获取引导文件
filename "pxelinux.0"; #开始启动文件的名称.
}
[root@server ~]#systemctl enable dhcpd
[root@server ~]#systemctl restart dhcpd
3.TFTP服务配置
#xinetd属于tftp的主程序
[root@server ~]#yum -y install xinetd tftp tftp-server
[root@server ~]#vim /etc/xinetd.d/tftp #centos8 没有这个文件,需要自己手写
server tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot #设置tftp服务的工作目录
disable = no #设置tftp服务启动选项,no为启动,yes为禁用
per_source = 11
cps = 100 2
flags = IPv4
}
[root@server ~]#systemctl enable xinetd tftp
[root@server ~]#systemctl restart xinetd tftp
4.SYSLinux 配置
#安装syslinux 引导加载程序,并拷贝文件到tftp的工作目录(/var/lib/tftpboot)下
[root@server ~]#yum -y install syslinux
[root@server ~]#cd /var/lib/tftpboot
[root@server tftpboot]#cp /usr/share/syslinux/pxelinux.0 .
[root@server tftpboot]#cp /mnt/cdrom/isolinux/* .
[root@server tftpboot]#mkdir pxelinux.cfg
[root@server tftpboot]#cp isolinux.cfg pxelinux.cfg/default
[root@server tftpboot]#chmod 644 pxelinux.cfg/default
[root@server tftpboot]#vim pxelinux.cfg/default
#default: 默认加载选项
1 default linux
#超时时间 默认为600秒
2 timeout 600
#标题
61 label linux
#菜单
62 menu label ^Install Red Hat Enterprise Linux 8.0
#kernel 参数指定要启动的内核
63 kernel vmlinuz
#append 指定追加给内核的参数,指定系统安装所需文件的获取路径,指定ks文件路径
64 append initrd=initrd.img inst.stage2=http://172.25.200.100/centos8 ks=http://172.25.200.100/ks.cfg quiet
5.Apache 配置
[root@server ~]#yum -y install httpd
[root@server ~]#systemctl enable --now httpd
[root@server ~]#mkdir -p /var/www/html/centos8
[root@server ~]#cp -arf /mnt/cdrom/* /var/www/html/centos8/
[root@server ~]#cp -arf /mnt/cdrom/.discinfo /var/www/html/centos8/
[root@server ~]#cp -arf /mnt/cdrom/.treeinfo /var/www/html/centos8/
[root@server ~]#systemctl restart httpd
6.编辑ks文件
#系统在安装完成时,会在/root目录下生成一个anaconda-ks.cfg文件,使用这个文件充当模板,对其进行修改
[root@server ~]#cp /root/anaconda-ks.cfg /var/www/html/ks.cfg
[root@server ~]#chmod 777 /var/www/html/ks.cfg
[root@server ~]#vim /var/www/html/ks.cfg
5 repo --name="AppStream" --baseurl="http://172.25.200.100/centos8/AppStream"
6 repo --name="BaseOS" --baseurl="http://172.25.200.100/centos8/BaseOS"
23 #cdrom
24 url --url="http://172.25.200.100/centos8" #设置安装方式,系统安装文件从那里获取
31 clearpart --all --initlabel #初始化硬盘
34 timezone Asia/Shanghai --isUtc --nontp #设置时区为亚洲/上海
7.安装测试
- 创建好后进行开机,【注意:网卡模式需与PXE 服务器相同】
(三) 扩展实验—多系统安装
1.添加一个光驱,放入CentOS7的镜像
如图:
2.拷贝镜像文件,修改引导文件
[root@server ~]# mount /dev/sr0 /opt
[root@server ~]# mkdir -p /var/www/html/centos7
[root@server ~]# cp -arf /opt/* /var/www/html/centos7
[root@server ~]#cd /var/lib/tftpboot
[root@server tftpboot]#mkdir centos8
[root@server tftpboot]#cp -arf /var/www/html/centos8/isolinux/* centos8/
[root@server tftpboot]#mkdir centos7
[root@server tftpboot]#cp -arf /opt/isolinux/* /var/lib/tftpboot/centos7
[root@server tftpboot]#vim pxelinux.cfg/default
#加载【菜单】 vesamenu.c32 文件
1 default vesamenu.c32
61 label 1、InstallCentos8
62 menu label ^Install CentOS Linux 8
63 kernel centos8/vmlinuz
64 append initrd=centos8/initrd.img inst.stage2=http://172.25.200.100/centos8 ks=http://172.25.200.100/centos8-ks.cfg quiet
65 label 2、InstallCentos7
66 menu label ^Install CentOS Linux 7
67 kernel centos7/vmlinuz
68 append initrd=centos7/initrd.img inst.stage2=http://172.25.200.100/centos7 ks=http://172.25.200.100/centos7-ks.cfg quiet
[root@server tftpboot]#mv /var/www/html/ks.cfg /var/www/html/centos8-ks.cfg
[root@server tftpboot]#cp -a /root/anaconda-ks.cfg /var/www/html/centos7-ks.cfg
[root@server tftpboot]#vim /var/www/html/centos7-ks.cfg
4 repo --name="cddrom" --baseurl="http://172.25.200.100/centos7/"
6 %packages #%packages 预安装软件,@是软件包组,以%end结尾
7 @^minimal
8 @core
9 chrony
10 kexec-tools
11 %end
22 #cdrom
23 url --url="http://172.25.200.100/centos7"
30 clearpart --all --initlabel
33 timezone Asia/Shanghai --isUtc --nontp
3.安装测试
步骤和刚刚差不多,如下
启动后可以看到,有一个安装菜单,选择第二个选项,进行安装CentOS 7
等待安装完成即可
(四) 踩坑记录
1.无法找到DHCP服务器
如下截图:
解决如下:
[root@server ~]# vim /etc/dhcp/dhcpd.conf
#在地址池 添加
next-server 172.25.200.100;
filename "pxelinux.0";
2.设备空间不足
错误截图:
原因:因设备空间,如内存或者硬盘等空间太小,导致无法分配资源
解决方法:在虚拟机中扩大内存和硬盘容量
3.设置安装源/软件选择出错
报错如下:
原因:
这个是因为我们没有把/mnt/cdrom的隐藏文件拷走,这是8版本以后才有的问题
-r--r--r--. 1 root root 44 11月 18 2020 .discinfo -r--r--r--. 1 root root 1520 11月 18 2020 .treeinfo
解决:
[root@localhost html]# cp -a /mnt/cdrom/.discinfo centos8/
[root@localhost html]# cp -a /mnt/cdrom/.treeinfo centos8/
(五)扩展—引导配置文件解析
1.ks.文件:
ks.cfg文件组成大致分为3段
1.命令段:
键盘类型,语言,安装方式等系统的配置,有必选项和可选项,如果缺少某项必选项,安装时会中断并提示用户选择此项的选项
# Keyboard layouts 设置键盘类型
keyboard --xlayouts='cn'
#镜像源添加
repo --name="cdrom" --baseurl="http://172.25.200.100/centos7/"
# System language 设置语言
lang zh_CN.UTF-8
# Network information
network --hostname=localhost.localdomain #主机名
# 网络配置信息,设置IP获取方式,网关及DNS等信息
network --bootproto=dhcp --device=eno160 --activate
# Use CDROM installation media
#cdrom #通过光驱安装
url --url="http://172.25.200.100/centos7" #通过网络安装
rootpw --iscrypted $6$pycwcbYpXtke.WN7$g0aOZ8e/whCVpHbmqO4KsyH98wnv5Over9ooGjax6iBA.DJeJzt.klj7vVYjCj2XJ9Fx0O46LB3qzkfIpJxOS. #设置root信息和密码,密码被加密过的
# System bootloader configuration
# 引导程序相关参数
bootloader --append="crashkernel=auto" --location=mbr --boot-drive=sda
autopart --type=lvm
# Partition clearing information
# 初始化磁盘设置
clearpart --none --initlabel
# 分区设置
# part / --fstype=ext4 --size=18000 #开始分区
# part swap --grow --size=1024
2.软件包段:
%packages
@groupname:指定安装的包组
package_name:指定安装的包
-package_name:指定不安装的包
在安装过程中默认安装的软件包,安装软件时会自动分析依赖关系。
3.脚本段(可选):
%pre:预安装脚本(由于只依赖于启动镜像,支持的命令很少)
%post:后安装脚本(基本支持所有命令)
注意:软件包段和脚本段必须以%end 结尾
2.default 文件
default linux
# 显示 'boot: ' 提示符。为 '0' 时则不提示,将会直接启动 'default' 参数中指定的内容。
prompt 1
# 在用户输入之前的超时时间,单位为 1/10 秒。
timeout 60
#显示某个文件的内容,注意文件的路径。默认是在 /tftpboot 目录下。也可以指定位类似 'install/rhel4.4-inst/boot.msg' 这样的,路径+文件名。
display boot.msg
F1 boot.msg #按下 'F1' 这样的键后显示的文件。注意路径。默认是 /tftpboot。注:syslinux 官方网站上说目前只能使用 F1-F10。
F2 options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
# 'label' 指定你在 'boot:' 提示符下输入的关键字。
# 比如:
# boot: linux[ENTER]
# 这个会启动 'label linux' 下标记的 kernel 和 initrd.img 文件。
# 这里还定义了其它几个关键字:
# boot: text
# boot: ks
# kernel 参数指定要启动的内核。同样要注意路径,默认是 /tftpboot 目录。
# append 指定追加给内核的参数,能够在 gurb 里使用的追加给内核的参数,在这里也都可以使用。
# 使用 kickstart 安装。
# 可以在 ks 参数后直接指定 kickstart 文件的位置。
label linux
kernel vmlinuz
append ks=nfs:192.168.175.1:/mnt/install/ks.cfg initrd=initrd.img
label text
kernel vmlinuz
append initrd=initrd.img text
label ks
kernel vmlinuz
append ks initrd=initrd.img
参考文献如下:
《Linux就该怎么学》—19章
PXE配置中ks.cfg文件介绍_Filter_CPH的博客-CSDN博客
pxe-多系统选择安装_pxe 多系统_SkywrathKreys的博客-CSDN博客
Pxe无人值守安装linux(对default文件有较详细的解释)_pxe default_Linucle的博客-CSDN博客