摘要
PXE(Preboot Execution Environment,预启动执行环境)是一种允许计算机通过网络启动操作系统而无需本地存储设备的技术。本文详细介绍了 PXE 的定义、架构、原理、应用场景及常见命令体系。以 RedHat7 为例,展示如何配置和使用 PXE自动安装操作系统。
目录
1.常见的系统安装操作流程
2.PXE概述
2.1定义
2.2应用背景
2.3架构
2.4应用场景
2.5应用优势
2.6基本部署过程
2.7 PXE 启动过程
3.实战操作
3.1环境介绍
3.2服务端配置
3.3客户端测试
1.常见的系统安装操作流程
-
通用流程:(1)bios启动,选择操作系统的启动(安装)模式。此时,内存是空白的。(2)根据相关的安装模式,寻找操作系统的引导程序。不同的模式,对应不同的引导程序当然也对应着不同的引导程序存在的位置。(3)引导程序加载文件系统初始化(initrd)程序和内核初始镜像(vmlinuz),完成操作系统安装前的初始化。(4)操作系统开始安装相关的系统和应用程序。
-
硬盘安装的流程:(1)bios启动。(2)MBR寻找grub。(3)grub程序读取menu.list等配置文件,找到内核启动镜像和相关初始化程序。(4)安装启动。
-
pxe网络安装的流程:(1)bios启动。(2)pxe client中的程序进入内存,显示命令菜单。此程序开始寻找网络引导程序(bootstrap文件,这个文件的名字随着发行版的不同而不同,在centos中,它是pxelinux.0)。(3)引导程序读取配置文件pxelinux.cfg,获得系统初始化的相关文件信息。(4)系统启动,开始进行安装。
2.PXE概述
2.1定义
PXE (Preboot eXecution Environment) 是一种基于网络的启动技术,最初由 Intel 开发,旨在提供一种在没有本地存储设备的情况下通过网络启动操作系统的标准。PXE 集成在计算机的 BIOS 或 UEFI 中,支持客户端通过网络从服务器端下载系统镜像,并进行安装。在安装过程中,可以通过Kickstart 配置文件实现无人值守安装,并定制操作系统。
2.2应用背景
随着计算机网络的发展和虚拟化技术的普及,PXE 成为一种流行的启动方式。它广泛应用于无盘工作站、服务器部署和系统恢复等场景,简化了大规模系统管理和维护的复杂性。
2.3架构
PXE 的架构包括客户端和服务器两部分,依赖于多种网络协议和服务。以下是 PXE 架构的主要组成部分。
客户端
PXE 客户端是启用了 PXE 的计算机,通常集成在 BIOS 或 UEFI 中,要求网卡支持PXE协议,主板支持网络引导。当计算机启动时,如果启用了 PXE,网络接口卡(NIC)会尝试通过网络启动操作系统。
服务端
PXE 服务器提供启动文件和相关服务。运行DHCP服务,用来分配地址、定位引导程序,运行TFTP服务,提供引导程序下载。通常包括以下组件:
-
DHCP 服务器:为 PXE 客户端分配 IP 地址,并提供启动文件的位置信息。
-
TFTP 服务器:用于传输启动文件,如 PXE 引导程序和内核镜像。
-
HTTP/FTP 服务器:在某些情况下,用于传输更大的文件或提供额外服务。PXE 客户端通过 FTP 下载系统镜像内容。
-
NFS/SMB 服务器:用于提供网络文件系统,支持 PXE 客户端访问操作系统文件。
2.4应用场景
- 无盘工作站
在教育和科研机构中,无盘工作站通过 PXE 启动操作系统,从网络服务器获取所有需要的文件和应用程序。这样,系统管理和维护变得更加集中和简便。
- 服务器部署
在数据中心,PXE 被广泛用于自动化服务器部署。管理员可以通过 PXE 大规模部署操作系统和应用程序,显著提高部署效率和一致性。
- 系统恢复
PXE 也被用于系统恢复和应急启动。当计算机的本地存储设备故障时,可以通过 PXE 启动应急操作系统,进行数据恢复和系统修复。
- 虚拟化环境
在虚拟化环境中,PXE 被用于启动虚拟机,使其可以从网络加载操作系统和应用程序,简化虚拟机的管理和配置。
2.5应用优势
- 规模化:同时装配多台服务器。
- 自动化:安装系统、配置各种服务。
- 远程实现:不需要光盘、U盘等安装介质。
2.6基本部署过程
- 准备CentOS 7 安装源(YUM仓库)
- 安装并启用TFTP服务
- 提供Linux内核、PXE引导程序等
- 安装并启用DHCP服务
- 配置启动菜单
2.7 PXE 启动过程
- PXE 客户端启动:
当计算机启动时,PXE 客户端通过 BIOS 或 UEFI 启动,并向网络发送 DHCP 请求,寻找 DHCP 服务器。
- DHCP 服务器响应:
DHCP 服务器响应 DHCP 请求,为客户端分配 IP 地址,并提供 TFTP 服务器的位置和引导文件名。
- 下载引导文件:
PXE 客户端通过 TFTP 下载引导文件,通常是一个小型的 PXE 引导程序(如 pxelinux.0)。
- 执行引导文件:
PXE 客户端执行下载的引导文件,该引导文件进一步下载操作系统内核和初始化文件系统。
- 启动操作系统:
PXE 客户端加载内核和初始化文件系统,最终启动操作系统。
3.实战操作
3.1环境介绍
本次实战用到两台基于 RedHat7 操作系统的虚拟机。一台用于服务端配置,另一台用作客户机来实现自动化布置操作系统。
3.2服务端配置
- 初始化服务器。为服务端配置主机名,静态IP地址。
[root@localhost ~]# hostnamectl set-hostname server
[root@localhost ~]# exit
logout
[redhat@localhost ~]$ su -
Password:
Last login: Mon Aug 5 00:07:11 CST 2024 on pts/0
[root@server ~]# hostnamectl
Static hostname: server
Icon name: computer-vm
Chassis: vm
Machine ID: abf279f0c2454b319872ee364824cfa6
Boot ID: dce5806e6c264d769291ad8fee95d425
Virtualization: vmware
Operating System: Red Hat Enterprise Linux Server 7.9 (Maipo)
CPE OS Name: cpe:/o:redhat:enterprise_linux:7.9:GA:server
Kernel: Linux 3.10.0-1160.el7.x86_64
Architecture: x86-64[root@server ~]# nmcli connection modify ens33 ipv4.addresses 172.25.250.101/24 ipv4.dns 172.25.250.102 ipv4.gateway 172.25.250.2 ipv4.method manual connection.autoconnect yes
[root@server ~]# nmcli connection up ens33
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)[root@server ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.25.254.101 netmask 255.255.255.0 broadcast 172.25.254.255
inet6 fe80::ad89:7e8a:f05f:a1b1 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:a8:b8:e4 txqueuelen 1000 (Ethernet)
RX packets 305002 bytes 21450955 (20.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2892811 bytes 4373559563 (4.0 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 338 bytes 68700 (67.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 338 bytes 68700 (67.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:be:f9:f4 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
配置好静态 IP 后,在虚拟机的虚拟网络编辑器里的 net 模式把 dhcp 自动分配地址的选项取消勾选。
- 安装并打开图形界面
如果安装虚拟机时选择了图形化安装,则安装步骤可以跳过,直接开启即可。
[root@server ~]# yum group install "Sever with GUI" -y
[root@server ~]# init 5
- 查看系统安装过程文件
此文件是在系统安装好后自动生成的,这个文件记录了系统在安装过程中的所有设定。
[root@server ~]# cat /root/anaconda-ks.cfg
- 安装图形化生成 kickstart 自动安装脚本的工具
[root@server ~]# yum install system-config-kickstart
- 启动图形制作工具
[root@server ~]# system-config-kickstart
- 在虚机终端编辑刚刚保存的文件
[root@server ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg ks.cfg
[root@server ~]# vim ks.cfg
退出编辑的时候按强制保存退出。
- 用这个命令判断 ks.cfg 文件有没有出错
[root@server ~]# ksvalidator ks.cfg
[root@server ~]#
- 配置http服务
[root@server ~]# yum install httpd -y
[root@server ~]# systemctl enable --now httpd
[root@server ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 39M 1.9G 3% /dev/shm
tmpfs 1.9G 13M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/rhel-root 35G 4.2G 31G 12% /
/dev/sda1 1014M 183M 832M 19% /boot
tmpfs 378M 24K 378M 1% /run/user/1000
/dev/sr0 4.3G 4.3G 0 100% /rhel7
[root@server ~]# ln -s /rhel7/ /var/www/html/[root@server ~]# cp /root/ks.cfg /var/www/html/
[root@server ~]# cd /var/www/html/
[root@server html]# ls
ks.cfg rhel7
用虚机里的火狐浏览器测试
- 更改本地仓库挂载目录为 /rhel7
[root@server html]# cd
[root@server ~]# cd /etc/yum.repos.d/
[root@server yum.repos.d]# ls
redhat.repo rpm.repo
[root@server yum.repos.d]# vim rpm.repo[repo]
name=repo
baseurl=file:///rhel7
gpgcheck=0
- 配置dhcp服务
检查系统有没有安装过 dhcp。
[root@server ~]# yum search dhcpd
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-
: managerThis system is not registered with an entitlement server. You can use subscription-manager to register.
Warning: No matches found for: dhcpd
No matches found
安装 dhcp。
[root@server ~]# yum install dhcp -y
查看 dhcp 的具体配置文件有哪些。
[root@server ~]# rpm -qc dhcp
/etc/dhcp/dhcpd.conf
/etc/dhcp/dhcpd6.conf
/etc/openldap/schema/dhcp.schema
/etc/sysconfig/dhcpd
/var/lib/dhcpd/dhcpd.leases
/var/lib/dhcpd/dhcpd6.leases
用命令生成 dhcp 配置文件
[root@localhost ~]# cat /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
#
[root@localhost ~]# \cp -f /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
编辑 dhcp 配置文件
[root@server ~]# vim /etc/dhcp/dhcpd.conf
27、28行注释,37行以后都不要。
重启服务并设置 dhcp 开机自启动
[root@server ~]# systemctl restart dhcpd
[root@server ~]# systemctl enable --now dhcpd6.service
Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd6.service to /usr/lib/systemd/system/dhcpd6.service.
Job for dhcpd6.service failed because the control process exited with error code. See "systemctl status dhcpd6.service" and "journalctl -xe" for details.
- 安装系统自引导加载服务
[root@server ~]# yum search pxelinux
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-
: managerThis system is not registered with an entitlement server. You can use subscription-manager to register.
============================== Matched: pxelinux ===============================
syslinux.x86_64 : Simple kernel loader which boots from a FAT filesystem
syslinux-extlinux.x86_64 : The EXTLINUX bootloader, for booting the local
: system.
syslinux-tftpboot.noarch : SYSLINUX modules in /var/lib/tftpboot, available for
: network booting
[root@server ~]# yum install syslinux.x86_64 -y
- 配置快速传输文件 tftp。
用于共享 pxelinux.0 数据文件的网络服务。
[root@server ~]# yum search tftp
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-
: managerThis system is not registered with an entitlement server. You can use subscription-manager to register.
============================== N/S matched: tftp ===============================
syslinux-tftpboot.noarch : SYSLINUX modules in /var/lib/tftpboot, available for
: network booting
tftp.x86_64 : The client for the Trivial File Transfer Protocol (TFTP)
tftp-server.x86_64 : The server for the Trivial File Transfer Protocol (TFTP)Name and summary matches only, use "search all" for everything.
[root@server ~]# yum install tftp-server.x86_64 -y[root@server ~]# systemctl enable --now tftp
[root@server ~]# rpm -ql tftp-server
/etc/xinetd.d/tftp
/usr/lib/systemd/system/tftp.service
/usr/lib/systemd/system/tftp.socket
/usr/sbin/in.tftpd
/usr/share/doc/tftp-server-5.2
/usr/share/doc/tftp-server-5.2/CHANGES
/usr/share/doc/tftp-server-5.2/README
/usr/share/doc/tftp-server-5.2/README.security
/usr/share/man/man8/in.tftpd.8.gz
/usr/share/man/man8/tftpd.8.gz
/var/lib/tftpboot
[root@server ~]# cp /rhel7/isolinux/* /var/lib/tftpboot/
[root@server ~]# cp /usr/share/syslinux/pxe
pxechain.com pxelinux.0
[root@server ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/[root@server ~]# cd /var/lib/tftpboot/
[root@server tftpboot]# ls
boot.cat initrd.img memtest splash.png vesamenu.c32
boot.msg isolinux.bin pxelinux.0 TRANS.TBL vmlinuz
grub.conf isolinux.cfg pxelinux.cfg upgrade.img
[root@server tftpboot]# cp isolinux.cfg pxelinux.cfg/default
[root@server tftpboot]# vim /var/lib/tftpboot/pxelinux.cfg/default
重启 http 服务
[root@server tftpboot]# systemctl restart httpd.service
3.3客户端测试
- 新建一台 RedHat7 虚拟机进行自动安装系统测试。
- 开启虚拟机时用“打开电源时进入固件打开”。
- 运行虚拟机后用方向键进行操作
- 系统运行完一次出现进入界面时快速关闭运行虚拟机,再次“点击打开电源时进入固件打开”运行虚拟机。
- 两次运行完后,虚拟机就完成了系统自动安装。此时可以登入root用户 ,检查客户机的IP地址是否按照服务端要求的地址池来进行分配。