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