1 2 3 4 5 作者:李晓辉 微信联系:lxh_chat 联系邮箱: 939958092@qq.com 
服务端机器名 服务端IP 系统版本 lxh-server 192.168.8.200 RHEL9.3 
这里介绍一下如何通过网络来安装Linux系统,在安装过程中,同时支持BIOS和UEFI,网络安装linux的大概流程如下:
先分析客户端PXE流程
客户端 PXE 流程分析 
    flowchart TD
    A[客户端启动] --> B[发起 DHCP 请求]
    B --> C[获得 IP地址、网关和DNS信息]
    C --> D[获得 PXE 引导文件名]
    D --> E{判断启动方式}
    
    E -- BIOS --> F[使用 TFTP 下载 BIOS 引导文件<br>pxelinux.0]
    E -- UEFI --> G[使用 TFTP 下载 UEFI 引导文件<br>BOOTX64.EFI]
    
    F --> H[引导文件的配置文件指向<br>相应的内核和文件系统]
    G --> H
    
    H --> I[安装 Linux]
    I --> J[内核引导]
    J --> K[挂载文件系统]
    K --> L[从 HTTP 服务器获取镜像]
    L --> M[从 HTTP 服务器获取<br>ks自动应答文件]
    M --> N[执行安装过程]
    N --> O[安装完成]
   下面正式开始部署过程:
系统注册 这一步是为了向系统添加软件仓库,因为在此过程中,会涉及到多次软件安装
1 2 3 4 [root@lxh-server ~]# subscription-manager register --username xxxxxxxx --auto-attach --force Registering to: subscription.rhsm.redhat.com:443/subscription ... Status:       Subscribed 
部署DHCP 服务器 DHCP 软件安装 DHCP 给所有的客户机提供:
IP地址 TFTP服务器指引,用于下载引导文件 1 [root@lxh-server ~]# dnf install dhcp-server -y 
创建DHCP 配置文件 默认情况下,/etc/dhcp/dhcpd.conf是空的,里面会有一个样例文件位置,可以用样例文件对真实的配置文件做一个覆盖,来给我们提供帮助
1 2 3 [root@lxh-server ~]# cp  /usr/share/doc/dhcp-server/dhcpd.conf.example /etc/dhcp/dhcpd.conf cp : overwrite '/etc/dhcp/dhcpd.conf' ? y[root@lxh-server ~]# vim /etc/dhcp/dhcpd.conf 
完整的配置文件如下:
关于if的语句,下方有启动不同类型电脑的说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 option domain-name "xiaohui.cn"; option domain-name-servers 192.168.8.200; option architecture-type code 93 = unsigned integer 16; default-lease-time 600; max-lease-time 7200; log-facility local7; subnet 192.168.8.0 netmask 255.255.255.0 {   range 192.168.8.100 192.168.8.200;   option routers 192.168.8.2; } class "pxeclients" {   match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";   next-server 192.168.8.200;   if option architecture-type = 00:00 {     filename "pxelinux.0";   }   else {     filename "BOOTX64.EFI";   } } 
启动DHCP服务 
1 [root@lxh-server ~]# systemctl enable  dhcpd --now 
检查DHCP OPTION 启动基于BIOS的电脑 
从网卡启动后,电脑会自动发起DHCP广播,我们的DHCP服务器会给客户端回应一个地址,DHCP分发的历史都保存在/var/lib/dhcpd/dhcpd.leases
我们需要注意vendor-class-identifier这一行,这个 vendor-class-identifier 中的 00000 表示的是未指定的体系结构,而不是具体的体系结构类型。通常情况下,00000 用于表示 BIOS 引导的客户端。
1 2 3 4 5 6 7 8 9 10 11 12 [root@lxh-server ~]# cat /var/lib/dhcpd/dhcpd.leases lease 192.168.8.100 {   starts 1 2024/03/11 05:44:20;   ends 1 2024/03/11 05:54:20;   cltt 1 2024/03/11 05:44:20;   binding state active;   next binding state free;   rewind binding state free;   hardware ethernet 00:50:56:2c:dc:a0;   uid "\000VM\370\353c\276\220\326:\264$\215\362\033M\346";   set vendor-class-identifier = "PXEClient:Arch:00000:UNDI:002001"; } 
启动基于UEFI的电脑 
先删除服务器上的租约文件,防止信息干扰
1 2 3 [root@lxh-server ~]# rm  -rf /var/lib/dhcpd/dhcpd.leases [root@lxh-server ~]# touch  /var/lib/dhcpd/dhcpd.leases [root@lxh-server ~]# systemctl restart dhcpd 
我们需要注意vendor-class-identifier这一行,这个 vendor-class-identifier 中的 00007 代表的是UEFI x86-64架构
1 2 3 4 5 6 7 8 9 10 11 12 [root@lxh-server ~]# cat /var/lib/dhcpd/dhcpd.leases lease 192.168.8.100 {   starts 1 2024/03/11 05:49:43;   ends 1 2024/03/11 05:59:43;   cltt 1 2024/03/11 05:49:43;   binding state active;   next binding state free;   rewind binding state free;   hardware ethernet 00:50:56:2c:dc:a0;   uid "\000VM\370\353c\276\220\326:\264$\215\362\033M\346";   set vendor-class-identifier = "PXEClient:Arch:00007:UNDI:003000"; } 
启动DHCP服务 1 [root@lxh-server ~]# systemctl restart dhcpd 
为DHCP开通防火墙 1 2 3 4 [root@servera ~]# firewall-cmd --add-service=dhcp --permanent success [root@servera ~]# firewall-cmd --reload success 
部署HTTP服务器 HTTPD软件安装 HTTP服务器用于在网络安装期间的光盘资料托管,其中ks.cfg是kickstart自动应答文件
1 [root@lxh-server ~]# dnf install httpd -y 
准备安装资料 将ISO或光盘挂载到/mnt,给网站提供素材
1 2 3 4 5 [root@lxh-server ~]# mount /dev/cdrom /mnt [root@lxh-server ~]# cp  -a /mnt/* /var/www/html/ [root@lxh-server ~]# cp  /mnt/.discinfo /mnt/.treeinfo /var/www/html/ [root@lxh-server ~]# cp  -a ks.cfg /var/www/html/ [root@lxh-server ~]# restorecon -RvF /var/www/ 
启动HTTPD服务 1 [root@lxh-server ~]# systemctl enable  httpd --now 
为HTTP开通防火墙 1 2 3 4 [root@servera ~]# firewall-cmd --add-service=http --permanent success [root@servera ~]# firewall-cmd --reload success 
部署TFTP服务器 TFTP服务器用于在DHCP获得IP地址后,在硬件环境下获取基础文件,通过 TFTP 从服务器上下载引导程序,而无需本地存储介质
安装TFTP-SERVER 1 [root@lxh-server ~]# dnf install tftp-server -y 
拷贝ISOLINUX启动资料 将启动过程中会用到的资料从光盘拷贝到TFTP服务器
1 2 [root@lxh-server ~]# mount /dev/cdrom /mnt [root@lxh-server ~]# cp  /mnt/isolinux/* /var/lib/tftpboot/ 
准备BIOS引导文件 安装后会生成pxelinux.0文件,用于BIOS引导
1 2 3 4 [root@lxh-server ~]# dnf install syslinux -y [root@lxh-server ~]# find / -name pxelinux.0 /usr/share/syslinux/pxelinux.0 [root@lxh-server ~]# cp  /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ 
准备BIOS引导配置文件 1 2 3 4 5 6 7 8 9 [root@lxh-server tftpboot]# mkdir  /var/lib/tftpboot/pxelinux.cfg [root@lxh-server tftpboot]# cp  /var/lib/tftpboot/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default [root@lxh-server tftpboot]# vim /var/lib/tftpboot/pxelinux.cfg/default ... label linux   menu label ^Install Red Hat Enterprise Linux 9.3   menu default   kernel vmlinuz   append initrd=initrd.img inst.stage2=http://192.168.8.200 inst.ks=http://192.168.8.200/ks.cfg quiet 
1 [root@lxh-server tftpboot]# chmod  755 /var/lib/tftpboot -R 
准备UEFI引导文件 1 2 [root@lxh-server ~]# cp  -r /mnt/EFI/BOOT/* /var/lib/tftpboot/ [root@lxh-server ~]# chmod  755 /var/lib/tftpboot -R 
准备UEFI引导配置文件 1 [root@lxh-server ~]# vim /var/lib/tftpboot/grub.cfg 
1 2 3 4 5 6 set default="0" ... menuentry 'Install Red Hat Enterprise Linux 9.3' --class fedora --class gnu-linux --class gnu --class os {         linuxefi vmlinuz inst.stage2=http://192.168.8.200 inst.ks=http://192.168.8.200/ks.cfg quiet         initrdefi initrd.img } 
1 [root@lxh-server tftpboot]# chmod  755 /var/lib/tftpboot -R 
启动TFTP服务 1 [root@lxh-server ~]# systemctl enable  tftp --now 
为TFTP开通防火墙 1 2 [root@lxh-server ~]# firewall-cmd --add-service=tftp --permanent [root@lxh-server ~]# firewall-cmd --reload 
测试PXE部署效果 将客户端置于相同的网络中,并从网卡启动客户端,客户端会从我们的DHCP获得IP,从TFTP下载kernel等信息,从http下载安装过程中的软件
本博客中的内容未经允许不得转载和引用,转载和引用需获得作者同意, 作者微信: Lxh_Chat