PXE
PXE(Preboot Execution Environment):
DHCP提供IP地址并指定引导文件`pxelinux.0`位置——》TFTP提供引导文件,引导文件指定菜单文件`pxelinux.cfg/default`,菜单文件提供选项,每个选项指定了应答文件的位置(应答文件的配置指定系统安装的步骤)——》FTP或HTTP提供镜像文件和应答文件
服务器默认开机引导顺序(查找系统):硬盘——》光驱——》u盘——》网卡(PXE),匹配即停止
PXE服务端:
禁用selinux和防火墙
启动dhcpd.service:提供dhcp
启动tftp.service:提供引导文件、菜单文件、内核文件、驱动程序
启动httpd.service或vsftpd.service:提供应答文件、镜像文件
注意:引导文件、内核文件、驱动程序要和镜像文件匹配
客户端(选择使用PXE启动)的PXE安装系统过程:
1. DHCP分配IP,通过dhcpd.conf配置文件,指定到next-server读取filename`引导文件pxelinux.0`
2. TFTP提供二进制的引导文件pxelinux.0,引导文件中指定了菜单文件`pxelinux.cfg/default`,菜单文件提供选择,每个选择指定了内核文件、镜像文件、应答文件ks.cfg等
3. FTP或HTTP提供应答文件ks.cfg,根据该应答文件的配置安装系统
虚拟机使用pxe安装系统:
1. 创建虚拟机,centos使用pxe安装需要内存2G以上(否则报错"/dev/root dose not exist")
2. 网卡选择dhcp的网段,开机
禁用防火墙
PXE服务端(192.168.88.240):
[root@pxe ~]
[root@pxe ~]
[root@pxe ~]
vsftpd.service 21 挂载镜像
应答文件和YUM仓库均可以使用httpd或vsftpd提供,下面示例,httpd提供应答文件,vsftpd提供YUM仓库
PXE服务端(192.168.88.240):
[root@pxe ~]
[root@pxe ~]
[root@pxe ~]
[root@pxe ~]
tcp LISTEN 0 32 *:21 *:* users:(("vsftpd",pid=4341,fd=3))
[root@pxe ~]
[root@pxe centos]
CentOS-7.9-2009.iso
Rocky-8.6-x86_64-dvd.iso
[root@pxe ~]
[root@pxe ~]
[root@pxe ~]
/mnt/hgfs/image/CentOS-7.9-2009.iso: BLOCK_SIZE="2048" UUID="2020-11-02-15-15-23-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTUUID="6b8b4567" PTTYPE="dos"
[root@pxe ~]
[root@pxe ~]
[root@pxe ~]
[root@pxe ~]
total 1668
-rw-r--r-- 1 root root 14 10月 30 2020 CentOS_BuildTag
drwxr-xr-x 3 root root 2048 10月 27 2020 EFI
-rw-rw-r-- 17 root root 227 8月 30 2017 EULA
-rw-rw-r-- 17 root root 18009 12月 10 2015 GPL
drwxr-xr-x 3 root root 2048 10月 27 2020 images
drwxr-xr-x 2 root root 2048 10月 27 2020 isolinux
drwxr-xr-x 2 root root 2048 10月 27 2020 LiveOS
drwxr-xr-x 2 root root 1669120 10月 29 2020 Packages
drwxr-xr-x 2 root root 4096 10月 30 2020 repodata
-rw-rw-r-- 17 root root 1690 12月 10 2015 RPM-GPG-KEY-CentOS-7
-rw-rw-r-- 15 root root 1690 12月 10 2015 RPM-GPG-KEY-CentOS-Testing-7
-r--r--r-- 1 root root 2883 11月 2 2020 TRANS.TBL
[root@pxe ~]
[centos]
name=centos
baseurl=file:///var/ftp/centos
enabled=1
gpgcheck=0
EOF
[root@pxe ~]
[root@pxe ~]
/mnt/hgfs/image/Rocky-8.6-x86_64-dvd.iso: BLOCK_SIZE="2048" UUID="2022-05-15-21-06-44-00" LABEL="Rocky-8-6-x86_64-dvd" TYPE="iso9660" PTUUID="6b8b4567" PTTYPE="dos"
[root@pxe ~]
[root@pxe ~]
[root@pxe ~]
[root@pxe ~]
total 14
dr-xr-xr-x 4 root root 2048 May 16 2022 AppStream
dr-xr-xr-x 4 root root 2048 May 16 2022 BaseOS
dr-xr-xr-x 3 root root 2048 May 16 2022 EFI
-r--r--r-- 1 root root 2204 Mar 30 2022 LICENSE
-r--r--r-- 1 root root 883 May 16 2022 TRANS.TBL
dr-xr-xr-x 3 root root 2048 May 16 2022 images
dr-xr-xr-x 2 root root 2048 May 16 2022 isolinux
-r--r--r-- 1 root root 86 May 16 2022 media.repo
[root@pxe ~]
[appstream]
name=appsteram
baseurl=file:///var/ftp/rocky/AppStream
enabled=1
gpgcheck=0
[baseos]
name=baseos
baseurl=file:///var/ftp/rocky/BaseOS
enabled=1
gpgcheck=0
EOF
[root@pxe ~]
dhcpd.service 67
PXE服务端(192.168.88.240):
[root@pxe ~]
[root@pxe ~]
default-lease-time 600;
max-lease-time 7200;
subnet 192.168.88.0 netmask 255.255.255.0 {
range 192.168.88.231 192.168.88.235;
option routers 192.168.88.254;
option domain-name-servers 192.168.88.1;
next-server 192.168.88.240;
filename "centos/pxelinux.0";
}
subnet 192.168.99.0 netmask 255.255.255.0 {
range 192.168.99.231 192.168.99.235;
option routers 192.168.99.254;
option domain-name-servers 192.168.99.1;
next-server 192.168.99.240;
filename "rocky/pxelinux.0";
}
EOF
[root@pxe ~]
[root@pxe ~]
[root@pxe ~]
udp UNCONN 0 0 0.0.0.0:67 0.0.0.0:* users:(("dhcpd",pid=1217,fd=7)
tftp.service 69
PXE服务端(192.168.88.240):
[root@pxe ~]
[root@pxe ~]
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
}
EOF
[root@pxe ~]
[root@pxe ~]
[root@pxe ~]
udp UNCONN 0 0 *:69 *:* users:(("in.tftpd",pid=1351,fd=0),("systemd",pid=1,fd=32))
[root@pxe ~]
[root@pxe ~]
[root@pxe ~]
引导文件 pxelinux.0
PXE服务端(192.168.88.240):
[root@pxe ~]
[root@pxe ~]
[root@pxe ~]
[root@pxe ~]
[root@pxe ~]
[root@pxe ~]
[root@pxe ~]
菜单文件 pxelinux.cfg/default
PXE服务端(192.168.88.240):
[root@pxe ~]
[root@pxe ~]
default centos
prompt 0
LABEL centos
MENU LABEL ^Install CentOS 7.9
KERNEL vmlinuz
APPEND initrd=initrd.img ks=http://192.168.88.240/centos/ks.cfg
EOF
[root@pxe ~]
[root@pxe ~]
default rocky
prompt 0
LABEL rocky
MENU LABEL ^Install Rocky 8.6
KERNEL vmlinuz
APPEND initrd=initrd.img inst.repo=ftp://192.168.88.240/rocky ks=http://192.168.99.240/rocky/ks.cfg
EOF
内核文件 vmlinuz
和驱动程序 initrd.img
cp 光盘镜像文件挂载点/isolinux/vmlinuz /var/lib/tftpboot/centos
cp 光盘镜像文件挂载点/isolinux/initrd.img /var/lib/tftpboot/centos
PXE服务端(192.168.88.240):
[root@pxe ~]
[root@pxe ~]
[root@pxe ~]
[root@pxe ~]
[root@pxe ~]
[root@pxe ~]
[root@pxe ~]
[root@pxe ~]
/var/lib/tftpboot/
|-- centos
| |-- initrd.img
| |-- pxelinux.0
| |-- pxelinux.cfg
| | `-- default
| `-- vmlinuz
`-- rocky
|-- initrd.img
|-- pxelinux.0
|-- pxelinux.cfg
| `-- default
`-- vmlinuz
4 directories, 8 files
httpd.service 80
PXE服务端(192.168.88.240):
[root@pxe ~]
[root@pxe ~]
[root@pxe ~]
[root@pxe ~]
tcp LISTEN 0 128 *:80 *:* users:(("httpd",pid=14171,fd=4),("httpd",pid=14170,fd=4),("httpd",pid=14169,fd=4),("httpd",pid=14167,fd=4))
[root@pxe ~]
[root@pxe ~]
注意:system-config-kickstart只识别仓库ID为`[development]`的YUM仓库,否则"软件包选择"加载识别失败
+ 基本配置:选择时区,设置root密码,勾选"安装后重启",勾选"在文本模式中执行安装"
+ 安装方法:"执行全新安装","FTP"方式,"FTP服务器"`192.168.88.240`,"FTP目录"`centos`
+ 引导装载程序选项:"安装新引导装载程序"
+ 分区信息:"清除主引导记录","删除所有现存分区","初始化磁盘标签",分区选项"挂载点"`/`,"使用磁盘上全部未用空间","格式化分区"
+ 网络配置:添加"eth0","DHCP"。实际上,该网卡最终不会叫eth0
+ 防火墙:禁用SELinux,禁用防火墙
+ 软件包选择:"系统"的"基本"(最小化安装)
保存文件为/root/ks.cfg
[root@pxe ~]
[root@pxe ~]
[root@pxe ~]
[root@pxe ~]
[root@pxe ~]
[root@pxe ~]
应答文件 ks.cfg
参考文档:
https://blog.csdn.net/yanghua1012/article/details/80426659
https://docs.redhat.com/zh_hans/documentation/red_hat_enterprise_linux/9/html/boot_options_for_rhel_installer/index
https://fedoraproject.org/wiki/Anaconda/Kickstart/zh-cn
cat > /var/www/html/centos/ks.cfg << EOF
install # install表示全新安装系统
url --url=ftp://192.168.88.240/centos/ # 镜像文件位置,如果是光驱则cdrom
lang en_US.UTF-8
keyboard us
timezone --isUtc --nontp Asia/Shanghai
firewall --disabled
selinux --disabled
auth --enableshadow -enablemd5
rootpw a
user --name=test --password=a --plaintext
network --hostname vm_centos
network --device=eth0 --netmask=255.255.255.0 --gateway=192.168.88.254 --onboot=yes
bootloader --location=mbr --append="rhgb quiet net.ifnames=0 biosdevname=0 ipv6.disable=1" --driveorder=sda
#graphical # graphical图形化模式下安装(缺省),text文本模式下安装
reboot # 安装后重启
#halt # 安装后关机
clearpart --drives=sda --all --initlabel
part /boot --fstype="xfs" --size=1024 --ondisk=sda
part pv.01 --size=1024 --grow --ondisk=sda
volgroup sysvg pv.01
logvol swap --fstype="swap" --size=2048 --vgname=sysvg --name=swap
logvol / --fstype="xfs" --size=1024 --grow --vgname=sysvg --name=root
%packages
@^minimal
rsync
lrzsz
tree
vim
tar
bash-completion
%end
%post
rm -rf /etc/yum.repos.d/
mkdir /etc/yum.repos.d/
echo '[centos]
name=centos
baseurl=ftp://192.168.88.240/centos
enabled=1
gpgcheck=0' > /etc/yum.repos.d/centos.repo
%end
EOF
cat > /var/www/html/rocky/ks.cfg << EOF
install # install表示全新安装系统
url --url=ftp://192.168.99.240/rocky/ # 镜像文件位置,如果是光驱则cdrom
lang en_US.UTF-8
keyboard us
timezone --isUtc --nontp Asia/Shanghai
firewall --disabled
selinux --disabled
auth --enableshadow -enablemd5
rootpw a
user --name=test --password=a --plaintext
network --hostname vm_rocky
network --device=eth0 --netmask=255.255.255.0 --gateway=192.168.99.254 --onboot=yes
bootloader --location=mbr --append="rhgb quiet net.ifnames=0 biosdevname=0 ipv6.disable=1" --driveorder=sda
clearpart --drives=sda --all --initlabel
part /boot --fstype="xfs" --size=1024 --ondisk=sda
part pv.01 --size=1024 --grow --ondisk=sda
volgroup sysvg pv.01
logvol swap --fstype="swap" --size=2048 --vgname=sysvg --name=swap
logvol / --fstype="xfs" --size=1024 --grow --vgname=sysvg --name=root
%packages
@^minimal
rsync
lrzsz
tree
vim
tar
bash-completion
%end
%post
rm -rf /etc/yum.repos.d/
mkdir /etc/yum.repos.d/
echo '[appstream]
name=appstream
baseurl=ftp://192.168.99.240/rocky/AppStream
enabled=1
gpgcheck=0
[baseos]
name=baseos
baseurl=ftp://192.168.99.240/rocky/BaseOS
enabled=1
gpgcheck=0' > /etc/yum.repos.d/rocky.repo
%end
reboot
EOF