一、PXE无盘简介
预启动执行环境(Preboot eXecution Environment,PXE)也被称为预执行环境,提供了一种使用网络接口(Network Interface)启动计算机的机制。这种机制让计算机的启动可以不依赖本地数据存储设备(如硬盘)或本地已安装的操作系统。
PXE是由 Intel 公司开发的网络引导技术,工作在 Client/Server 模式,允许客户机通过网络从远程服务器下载引导镜像,并加载安装文件或者整个操作系统。
PXE 严格来说并不是一种安装方式,而是一种引导的方式。
PXE的原理:
1)客户机的网卡支持 PXE 协议(集成 BOOTROM 芯片),且主板支持网络引导。
2)PXE客户机发出DHCP请求,向DHCP服务器申请IP地址。
3)DHCP服务器响应PXE客户机的请求,自动从IP地址池中分配一个IP地址给PXE客户机,并且告知PXE客户机:TFTP服务器的IP地址和PXE引导程序文件pxelinux.0,默认在TFTP共享目录/var/lib/tftpboot/下。
4)PXE客户机向TFTP服务器发起获取pxelinux.0引导程序文件的请求。
5)TFTP服务器响应PXE客户机的请求,将其共享的pxelinux.0文件传输给PXE客户机。
6)PXE客户机向TFTP服务器发起获取pxelinux.cfg/defaulf的pxe引导配置文件的请求。
7)PXE客户端展示pxelinux.cfg/defaulf文件中的引导项,由用户指定选择其中一个引导项,或则等待默认时间后根据配置文件中的默认引导项(本地磁盘引导)自动引导。
8)PXE客户机根据default文件配置向TFTP服务器发起获取对应引导项的vmlinuz压缩的虚拟机linux内核文件的请求。
9)TFTP服务器响应PXE客户机的请求,将其共享的vmlinuz文件传输给PXE客户机。
10)PXE客户机根据default文件配置向TFTP服务器发起获取对应引导项的initrd.img 临时文件系统文件的请求。
11)TFTP服务器响应PXE客户机的请求,将其共享的initrd.img文件传输给PXE客户机。
12)PXE客户机启动内核。
13)PXE客户机根据default文件配置读取ks.cfg,ks.cfg文件记录安装过程中所需人工干预填写的各种参数。包括键盘布局,系统语言,磁盘分区,网络配置,时区,root用户密码,安装的软件包,通过网络安装时,安装文件的位置,安装完成后自动重启等等。
14)通过http,ftp,nfs等网络共享服务器下载指定软件包进行安装。
15)重启服务器,并从默认的本地磁盘引导启动。
二、搭建pxe服务器,自动部署kylinos,almalinux,centos7,centos8系统。
2.1 安装dhcp服务器,pxe服务器地址为172.16.240.3
#yum安装dhcp软件
[root@centos7 ~]#yum install -y dhcpd
#拷贝模板文件
[root@centos7 ~]# cp -rp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
#修改dhcp配置文件
[root@centos7 ~]# vim /etc/dhcp/dhcpd.conf
#定义域名
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;
#定义租约时间和最大租约时间
default-lease-time 600;
max-lease-time 7200;
#定义日志级别
log-facility local7;
#定义地址池的子网,掩码,地址池范围,dns,网关,
subnet 172.16.240.0 netmask 255.255.255.0 {
range 172.16.240.100 172.16.240.200;
option domain-name-servers 172.16.240.3;
option routers 172.16.0.1;
#定义了引导服务器tftp的地址,以及引导程序文件名。这里的pxelinux.0文件必须在tftp根目录上。
next-server 172.16.240.3;
filename "pxelinux.0";
}
#设置开机自启,并立即启动服务
[root@centos7 ~]# systemctl enable --now dhcpd
2.2 安装tftp
#tftp是非独立服务,需要以来xinetd来启动。因此要先启动xinetd再启动tftp
#安装tftp服务器,网络守护进程服务程序xinetd,tftp客户端
[root@centos7 ~]# yum install -y tftp tftp-server xinetd
#编辑tftp配置文件
[root@centos7 ~]# 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 #-s参数指定tftp共享目录
disable = no #修改yes为no,启用tftp
per_source = 11
cps = 100 2
flags = IPv4
}
#启动xinetd,tftp服务。
[root@centos7 ~]# systemctl restart xinetd
[root@centos7 ~]# systemctl enable xinetd
[root@centos7 ~]# systemctl restart tftp
[root@centos7 ~]# systemctl enable tftp
#验证tftp服务(udp69)端口
[root@centos7 ~]# ss -tnlup |grep :69
udp UNCONN 0 0 *:69 *:* users:(("xinetd",pid=2713,fd=5))
udp UNCONN 0 0 :::69 :::* users:(("systemd",pid=1,fd=26))
#防火墙放行tftp
[root@centos7 ~]#firewall-cmd --permanent --add-service=tftp
[root@centos7 ~]#firewall-cmd --reload
2.3准备需要tftp共享的文件
#yum安装syslinux软件包,其中提供了pxelinux.0的pxe引导程序
[root@centos7 ~]# yum install -y syslinux
#拷贝pxeLinux.0文件到tftp共享目录
[root@centos7 ~]# cp -rp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
#挂载linux系统镜像。分为vmwareworkstation操作和服务器操作。
#如果使用vmware workstation,可以在虚拟机右键--设置--添加cd/dvd驱动器,选择对应的linux系统,勾选已连接,启动时连接。添加的CD驱动器默认是scsi模式,热加载scsi盘方法编写脚本如下。
[root@centos7 ~]# mkdir /mnt/{kylinos,almalinux,centos7,centos8}
[root@centos7 ~]# cat scsisum.sh
#!/bin/bash
scsisum=`ls -l /sys/class/scsi_host/host*|wc -l`
for ((i=0;i<${scsisum};i++))
do
echo "- - -" >/sys/class/scsi_host/host$i/scan
done
[root@centos7 ~]#bash scsisum.sh
[root@centos7 ~]# mount /dev/sr0 /mnt/kylinos
[root@centos7 ~]# mount /dev/sr1 /mnt/almalinux
[root@centos7 ~]# mount /dev/sr2 /mnt/centos7
[root@centos7 ~]# mount /dev/sr3 /mnt/centos8
#如果是服务器,可以使用xftp将各系统的iso文件拷贝到linux服务器的/root目录
[root@centos7 ~]#mount -o loop kylinos.iso /mnt/kylinos
[root@centos7 ~]#mount -o loop AlmaLinux.iso /mnt/almalinux
[root@centos7 ~]#mount -o loop centos7.iso /mnt/centos7
[root@centos7 ~]#mount -o loop centos8.iso /mnt/centos8
#创建存放vmlinux及initrd.img文件路径
[root@centos7 ~]# mkdir /var/lib/tftpboot/{Almalinux,centos7.5,centos8.4,kylinos}
#拷贝各系统的vmlinux和initrd.img文件到指定目录
[root@centos7 ~]#cp -rp /mnt/kylinos/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/kylinos
[root@centos7 ~]#cp -rp /mnt/almalinux/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/Almalinux
[root@centos7 ~]#cp -rp /mnt/centos7/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos7.5
[root@centos7 ~]#cp -rp /mnt/centos8/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos8.4
#拷贝通用的.c32文件,一种轻量的引导加载文件。
[root@centos7 ~]#cp -rp /mnt/centos8/isolinux/*.c32 /var/lib/tftpboot/
#创建/var/lib/tftpboot/pxelinux.cfg文件夹
[root@centos7 ~]# mkdir /var/lib/tftpboot/pxelinux.cfg/
#将/mnt/centos8/isolinux/isolinux.cfg引导文件模板拷贝到tftp的pxelinux.cfg目录,并改名为default
[root@centos7 ~]# cp /mnt/centos8/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
#查看tftp目录
[root@centos7 ~]# ll /var/lib/tftpboot/
total 20
drwxrwxrwx. 3 root root 173 Dec 11 09:30 Almalinux
drwxrwxrwx. 3 root root 236 Dec 10 11:08 centos7.5
drwxrwxrwx. 3 root root 4096 Dec 10 13:47 centos8.4
drwxrwxrwx. 3 root root 4096 Dec 9 14:52 kylinos
-r--r--r--. 1 root root 116064 Dec 10 13:47 ldlinux.c32
-r--r--r--. 1 root root 180668 Dec 10 13:47 libcom32.c32
-r--r--r--. 1 root root 22804 Dec 10 13:47 libutil.c32
-rwxrwxrwx. 1 root root 42929 Dec 9 10:25 pxelinux.0
drwxrwxrwx. 2 root root 21 Dec 11 15:22 pxelinux.cfg
-rw-r--r--. 1 root root 32650 Dec 11 13:11 splash.png
-rw-r--r--. 1 root root 26788 Dec 10 13:40 vesamenu.c32
#编辑default文件,配置各引导项对应vmlinuz和initrd.img文件位置。以及ks.cfg文件路径。
[root@centos7 ~]# cat /var/lib/tftpboot/pxelinux.cfg/default |grep -v ^#|grep -v ^$
default vesamenu.c32
#等待12秒自动引导
timeout 120
menu clear
#指定背景图片
menu background splash.png
menu title Install Linux OS
menu vshift 8
menu rows 18
menu margin 8
menu helpmsgrow 15
menu tabmsgrow 13
menu color border * #00000000 #00000000 none
menu color sel 0 #ffffffff #00000000 none
menu color title 0 #ff7ba3d0 #00000000 none
menu color tabmsg 0 #ff3a6496 #00000000 none
menu color unsel 0 #84b8ffff #00000000 none
menu color hotsel 0 #84b8ffff #00000000 none
menu color hotkey 0 #ffffffff #00000000 none
menu color help 0 #ffffffff #00000000 none
menu color scrollbar 0 #ffffffff #ff355594 none
menu color timeout 0 #ffffffff #00000000 none
menu color timeout_msg 0 #ffffffff #00000000 none
menu color cmdmark 0 #84b8ffff #00000000 none
menu color cmdline 0 #ffffffff #00000000 none
#默认本地磁盘引导
label local
menu default
menu label ^Boot from local drive
localboot 0xffff
label kylinos_linux
menu label ^Install Kylin Linux Advanced Server V10 (auto)
kernel kylinos/vmlinuz
append initrd=kylinos/initrd.img ks=ftp://172.16.240.3/kylinos_ks.cfg quiet
label Almalinux_linux
menu label ^Install Almalinux 8.6 (auto)
kernel Almalinux/vmlinuz
append initrd=Almalinux/initrd.img ks=ftp://172.16.240.3/Almalinux_ks.cfg quiet
label centos7linux
menu label ^Install CentOS Linux 7.5 (auto)
kernel centos7.5/vmlinuz
append initrd=centos7.5/initrd.img ks=ftp://172.16.240.3/centos7.ks.cfg quiet
label centos8linux
menu label ^Install CentOS Linux 8.4 (auto)
kernel centos8.4/vmlinuz
append initrd=centos8.4/initrd.img ks=ftp://172.16.240.3/centos8.ks.cfg quiet
2.4安装ftp服务,共享ks应答文件和软件包。
#安装ftp软件包
[root@centos7 ~]# yum install -y vsftpd
#修改配置文件,允许匿名登录ftp
[root@centos7 ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
#防火墙放行tftp
[root@centos7 ~]#firewall-cmd --permanent --add-service=ftp
[root@centos7 ~]#firewall-cmd --reload
#准备这些文件
[root@centos7 ~]# ll /var/ftp
total 24
drwxrwxrwx. 8 root root 129 Dec 11 10:36 almalinux
-rwxrwxrwx. 1 root root 1024 Dec 11 10:59 Almalinux_ks.cfg
drwxrwxrwx. 8 root root 220 Dec 9 14:33 centos7.5
-rwxrwxrwx. 1 root root 1324 Dec 10 16:40 centos7.ks.cfg
drwxrwxrwx. 9 root root 160 Dec 10 16:49 centos8.4
-rwxrwxrwx. 1 root root 1248 Dec 10 16:58 centos8.ks.cfg
drwxrwxrwx. 14 root root 4096 Dec 9 14:56 debian
-rwxrwxrwx. 1 root root 1017 Dec 11 11:00 debian_ks.cfg
drwxrwxrwx. 8 root root 110 Dec 8 10:39 kylinos
-rwxrwxrwx. 1 root root 1414 Dec 9 11:04 kylinos_ks.cfg
drwxrwxrwx. 2 root root 6 Mar 6 2021 pub
#准备ks文件,可以在图形化的centos7系统上安装system-config-kickstart软件,并在图形化桌面打开工具配置ks文件。ks文件配置通用,可以自己编写。
[root@centos7 ~]# cat /var/ftp/kylinos_ks.cfg |grep -v ^# |grep -v ^$
#安装或是更新
install
#键盘布局
keyboard 'us'
#root密码
rootpw --iscrypted $1$gLnMdpYq$NNdcgsT1ixnYiObXYbiH5/
# 通过网络安装时,安装文件的位置。
url --url="ftp://172.16.240.3/kylinos"
#系统语言
lang en_US
#图形界面安装,或者使用text字符界面安装
graphical
#禁用快速引导
firstboot --disable
#启用selinux
selinux --enforcing
#启用防火墙并放行ssh服务
firewall --enabled --ssh
#网络配置
network --bootproto=dhcp --device=eth0
#安装完成后重启系统
reboot
#指定时区
timezone Asia/Shanghai
#添加内核项,使用eth0网卡
bootloader --append="net.ifnames=0 biosdevname=0" --location=mbr
#清除主引导记录
zerombr
#清空所有分区
clearpart --all --initlabel
#配置/boot分区xfs格式,512M大小
part /boot --fstype="xfs" --size=512
#配置/home分区xfs格式,40G大小
part /home --fstype="xfs" --size=40960
#配置根分区为xfs格式,分配所有剩余空间
part / --fstype="xfs" --grow --size=1
#安装的包组%packages开头,%end结尾。通过 @ 指定软件包组,通过 @^ 指定环境组。
%packages
@^kylin-desktop-environment
@development
@man-help
%end
#配置kdump大小
%addon com_redhat_kdump --enable --reserve-mb='1024M'
%end
#%anaconda指定 password 策略,以 %end 结束。
%anaconda
pwpolicy root --minlen=8 --minquality=1 --strict --nochanges --notempty
pwpolicy user --minlen=8 --minquality=1 --strict --nochanges --emptyok
pwpolicy luks --minlen=8 --minquality=1 --strict --nochanges --notempty
%end
#通过 %pre 指定在磁盘分区前要执行的脚本,通过 %post 指定系统安装完成后要执行的脚本。这些模块都需要 %end 结束。一般不配置%pre。%post用的比较多
%post --interpreter=/bin/bash
touch /root/test.tt1
%end
[root@centos7 ~]# cat /var/ftp/Almalinux_ks.cfg | grep -v ^# |grep -v ^$
install
keyboard 'us'
rootpw --iscrypted $1$gLnMdpYq$NNdcgsT1ixnYiObXYbiH5/
url --url="ftp://172.16.240.3/almalinux"
lang en_US
graphical
firstboot --disable
selinux --enforcing
firewall --enabled --ssh
network --bootproto=dhcp --device=ens33
reboot
timezone Asia/Shanghai
bootloader --location=mbr
zerombr
clearpart --all --initlabel
part /home --fstype="xfs" --size=4096
part /boot --fstype="xfs" --size=1024
part / --fstype="xfs" --grow --size=1
%packages
@^minimal-environment
@development
@system-tools
kexec-tools
%end
%post --interpreter=/bin/bash
echo 1 > /root/dd.txt
%end
[root@centos7 ~]# cat /var/ftp/centos7.ks.cfg | grep -v ^# |grep -v ^$
install
keyboard 'us'
rootpw --iscrypted $1$adIkOhlz$K4vGuwucc2ptHpgJyVRai.
url --url="ftp://172.16.240.3/centos7.5"
lang en_US
auth --useshadow --passalgo=sha512
graphical
firstboot --disable
selinux --enforcing
firewall --enabled --ssh
network --bootproto=dhcp --device=ens32
reboot
timezone Asia/Shanghai
bootloader --location=mbr
zerombr
clearpart --all --initlabel
part /home --fstype="xfs" --size=4096
part /boot --fstype="xfs" --size=1024
part / --fstype="xfs" --grow --size=1
%packages
@^gnome-desktop-environment
@base
@core
@desktop-debugging
@dial-up
@directory-client
@fonts
@gnome-desktop
@guest-agents
@guest-desktop-agents
@input-methods
@internet-browser
@java-platform
@multimedia
@network-file-system-client
@networkmanager-submodules
@print-client
@x11
kexec-tools
%end
%post --interpreter=/bin/bash
echo 1 > /root/dd.txt
%end
[root@centos7 ~]# cat /var/ftp/centos8.ks.cfg | grep -v ^# |grep -v ^$
install
reboot
graphical
%packages
@^server-product-environment
@gnome-desktop
kexec-tools
%end
url --url="ftp://172.16.240.3/centos8.4"
keyboard --xlayouts='us'
lang en_US.UTF-8
network --bootproto=dhcp --device=ens33 --ipv6=auto --activate
network --hostname=localhost.localdomain
firstboot --enable
bootloader --location=mbr
zerombr
clearpart --all --initlabel
part /home --fstype="xfs" --size=4096
part /boot --fstype="xfs" --size=1024
part / --fstype="xfs" --grow --size=1
timezone Asia/Shanghai --isUtc
rootpw --iscrypted $6$rJmBvJqGh2Iq4nKK$/0Znefo5lu5JxEX1ZGDcf9zzS3k2b/bQLvZawg6oJtzMrxBZN.9Ybei573QHhILQcWbScP79bQOq4xMrui.VR0
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
#拷贝软件包到ftp共享目录
[root@centos7 ~]#cp -rp /mnt/kylinos/* /var/ftp/kylinos
[root@centos7 ~]#cp -rp /mnt/almalinux/* /var/ftp/almalinux
[root@centos7 ~]#cp -rp /mnt/centos7/* /var/ftp/centos7.5
[root@centos7 ~]#cp -rp /mnt/centos8/* /var/ftp/centos8.4
#并且因为centos8和almalinux的共享目录没有Packages文件夹,安装的时候会找不到软件包,需要拷贝到/var/ftp/操作系统/
[root@centos7 ~]# cp -rp /var/ftp/centos8.4/BaseOS/* /var/ftp/centos8.4/
[root@centos7 ~]# cp -rp /var/ftp/almalinux/Minimal/* /var/ftp/almalinux/
2.5新建虚拟机,或开机服务器,选择从网卡引导
2.6 遇到的问题
问题一:获取tftp失败
解决方法:检查tftp服务启动状态,注意需要先启动xinetd服务,再启动tftp服务。并且可以使用以下命令测试tftp是否正常工作。第二个原因是dhcp中的next-server指定错误导致找不到tftp服务器,需要检查dhcp配置文件中的filename和next-server配置项。
[root@centos7 ~]# tftp 172.16.240.3 -c get pxelinux.0
问题二:获取ks.cfg文件失败
解决方法:检查报错指向的ks.cfg文件,权限400会报错,改为755权限。或者报错文件找不到,也就是写错了文件名。
[root@centos7 ~]# chmod 755 /var/ftp/Almalinux_ks.cfg
问题三:安装过程中,安装源报错
解决方法:检查ftp文件目录及权限是否正确,目录下是否有Packages目录。
问题四:安装过程中软件包错误,检查ks.cfg文件中%packages包名是否正确。
解决方法:手动安装系统选择对一个包,在完成安装的系统中查看/root/anaconda-ks.cfg文件中的包组名称。
问题五:安装centos8或者almalinux,在安装软件包的过程中报错:missing packages:authselect-compat
解决方法:查看ks.cfg文件中是否使用了auth指令。删除auth配置即可。
在Red Hat Enterprise Linux 8 中弃用了auth 或者 authconfig的 Kickstart 命令和选项。使用 authselect instead
标签:kylinos,ftp,almalinux,cfg,centos7,--,tftp,root From: https://www.cnblogs.com/tanll/p/16973869.html