PXE结合dhcp批量安装OS

PXE技术 - 网络引导

PXE(Preboot eXecution Environment)是一种通过网络引导操作系统的技术,允许计算机通过网络启动操作系统,而不需要本地硬盘驱动器。

一、硬件要求

  1. 网卡需要有启动芯片
    PXE功能需要网卡支持启动功能,通常现代网卡都支持此功能。

  2. BIOS中开启网络引导功能PXE
    在BIOS设置中,开启网络引导(PXE boot)功能,允许计算机从网络中启动。

二、软件要求

  1. DHCP服务器
    用于为客户端分配IP地址以及其他网络配置。

  2. TFTP服务器
    用于提供网络引导程序(如pxelinux.0)和其他所需的启动文件。


DHCP概述

DHCP服务器工作原理

  1. DHCPDISCOVER 发现(广播)
    客户端通过广播发送 DHCPDISCOVER 报文,询问网络上是否有 DHCP 服务器提供服务。
    目标地址255.255.255.255

  2. DHCPOFFER 回应客户端
    DHCP 服务器收到 DHCPDISCOVER 请求后,向客户端发送 DHCPOFFER 报文,提供一个可用的 IP 地址以及其他网络配置信息。

  3. DHCPREQUEST 请求DHCP服务器分配IP地址
    客户端从收到的多个 DHCPOFFER 中选择一个并发送 DHCPREQUEST 报文,表示接受某个服务器的 IP 地址。

  4. DHCPACK 确认 分配IP地址
    DHCP 服务器收到 DHCPREQUEST 后,发送 DHCPACK 报文确认客户端分配的 IP 地址,并提供其他配置信息(如 DNS、网关等)。

DHCP Server监听

  • DHCP服务器监听
    • UDP端口 67(服务器端)
    • UDP端口 68(客户端端)

DHCPRELAY DHCP中继

  • DHCP中继允许客户端通过网络中继与DHCP服务器进行通信,适用于多子网环境。

DHCP配置

客户端可以通过DHCP服务器获取到以下信息:

  • IP 地址
  • 子网掩码
  • 默认网关
  • DNS服务器
  • DNS搜索域名

PXE安装OS步骤

1. 搭建DHCP服务器

# 安装DHCP服务端
yum install -y dhcp-server.x86_64

配置DHCP服务

  1. 编辑DHCP配置文件 /etc/dhcp/dhcpd.conf
 全局配置
option domain-name "example.org";      # 设置 DHCP 客户端接收到的域名
option domain-name-servers 192.168.91.128;  # 设置 DNS 服务器的 IP 地址
default-lease-time 600;                # 设置 DHCP 客户端租用 IP 地址的默认时间(秒)
max-lease-time 7200;                   # 设置 DHCP 客户端 IP 地址租用的最大时间

# 子网配置
subnet 192.168.91.0 netmask 255.255.255.0 {
  range 192.168.91.200 192.168.91.230;    # 设置动态分配的IP地址范围
  option domain-name-servers 192.168.91.128;  # 子网中的DNS服务器
  option domain-name "internal.example.org";
  option routers 192.168.91.254;          # 默认网关 IP 地址
  option broadcast-address 192.168.91.255;  # 广播地址
  default-lease-time 600;
  max-lease-time 7200;
}
  1. 启动DHCP服务并检查是否监听:
systemctl start dhcpd.service
netstat -upln | grep dhcp
  1. 查看日志,确认分配成功:
tail -f /var/log/messages

日志示例:

Nov 13 21:17:11 localhost dhcpd[34437]: DHCPDISCOVER from 00:0c:29:b6:48:77 via ens160
Nov 13 21:17:12 localhost dhcpd[34437]: DHCPOFFER on 192.168.91.200 to 00:0c:29:b6:48:77 via ens160
Nov 13 21:17:12 localhost dhcpd[34437]: DHCPREQUEST for 192.168.91.200 (192.168.91.128) from 00:0c:29:b6:48:77 via ens160
Nov 13 21:17:12 localhost dhcpd[34437]: DHCPACK on 192.168.91.200 to 00:0c:29:b6:48:77 via ens160

2. 安装TFTP服务器

# 安装TFTP服务端
yum install -y tftp-server.x86_64
  1. 启动TFTP服务并检查:
systemctl enable tftp.service --now
netstat -tulnp | grep :69
  1. 配置TFTP根目录存放引导文件:

cd /var/lib/tftpboot/
  1. 在DHCP配置中添加以下内容:
next-server 192.168.91.128  # 设置TFTP服务器地址
filename "pxelinux.0";      # 设置网络启动文件名
  1. 安装syslinux并将PXE启动文件复制到TFTP根目录:
yum install -y syslinux
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
  1. 将ISO镜像中的isolinux文件夹内容复制到TFTP目录:

cp /var/www/html/pub/isolinux/*  /var/lib/tftpboot/
  1. 创建pxelinux.cfg目录并配置默认启动文件:
mkdir /var/lib/tftpboot/pxelinux.cfg
cp /var/lib/tftpboot/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
  1. 重启TFTP和DHCP服务:
systemctl restart tftp.service
systemctl restart dhcpd.service
[root@web01 pxelinux.cfg]# vim default #编辑default文件,配置PXE引导的具体内容
label linux #定义菜单项,设置标签为“linux”
 menu label ^AUTO Install CentOS Linux 8 #菜单中显示的文本
 menu default #表示这是默认选中的菜单项(唯一)
 kernel vmlinuz #指定引导时使用的内核文件
 append initrd=initrd.img inst.repo=http://192.168.91.128/pub inst.ks=http://192.168.91.128/ks/ks01.cfg quiet
 #指定内核引导时加载的初始内存盘(initrd)映像;指定安装源的URL;’quiet‘启动时禁用冗长的输出

3.编写kickstart脚本自动化安装

#version=RHEL8
# 使用图形化安装
graphical

# 设置AppStream仓库地址
repo --name="AppStream" --baseurl=http://192.168.91.128/pub/AppStream

%packages
# 安装图形化服务器环境
@^graphical-server-environment
# 安装kexec-tools(一个内核跳跃工具,用于快速重启)
kexec-tools
%end

# 键盘布局设置,使用美国英语布局
keyboard --xlayouts='us'

# 设置系统语言为英语
lang en_US.UTF-8

# 网络配置:使用DHCP获取IP,网络接口为ens160,启用该网络设备
network  --bootproto=dhcp --device=ens160  --activate
# 设置主机名为localhost.localdomain
network  --hostname=localhost.localdomain

# 使用HTTP源安装,指定镜像地址
url --url=http://192.168.91.128/pub

# 启用首次启动配置界面
firstboot --disable
# 忽略不需要的磁盘,仅使用sda磁盘进行安装
ignoredisk --only-use=sda

# 磁盘清理配置,清除磁盘的分区表
clearpart --none --initlabel
# 磁盘分区配置:创建/boot分区,大小476MB,文件系统类型为xfs
part /boot --fstype="xfs" --ondisk=sda --size=476
# 创建物理卷,大小40GB,文件系统类型为LVM物理卷
part pv.01 --fstype="lvmpv" --ondisk=sda --size=40960
# 创建卷组vg0,大小为40GB,物理卷为pv.01
volgroup vg0 --pesize=4096 pv.01
# 创建交换分区swap,大小2GB
logvol swap --fstype="swap" --size=2048 --name=swap --vgname=vg0
# 创建/home分区,大小5GB,文件系统为xfs
logvol /home --fstype="xfs" --size=5120 --name=home --vgname=vg0
# 创建根分区/,大小20GB,文件系统为xfs
logvol / --fstype="xfs"  --size=20480 --name=root --vgname=vg0

# 设置系统时区为上海,并使用UTC时间
timezone Asia/Shanghai --isUtc --nontp

# 设置root用户的密码(加密后的密码)
rootpw --iscrypted $6$.ANlyFMKUG1Nm37E$2Rut/R0y/iT43Dl63ReTUmkiB7BlaQq5bIqSEIPQLddQfAl1V/1qjwQTrnf7Iu0msBuTdfItFICUAD.p.62yQ/

%addon com_redhat_kdump --enable --reserve-mb='auto'
# 启用kdump并自动保留内存

%end

%anaconda
# 密码策略:root用户密码最小长度为6,密码强度要求为1(较弱)
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
# 用户密码策略:最小长度为6,密码强度要求为1
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
# LUKS加密密码策略:最小长度为6,密码强度要求为1
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
#系统安装后配置
%post
cat > /etc/yum.repos.d/dvd.repo  <<END
[BaseOS]
name=CentOS8 BaseOS
baseurl=http://192.168.8.108/pub/BaseOS
gpgcheck=0
[AppStream]
name=CentOS8 AppStream
baseurl=http://192.168.8.108/pub/AppStream
gpgcheck=0
END
%end

bootloader --append="console=ttyS0"

设置密码这里可以这样做
使用 openssl 生成 SHA-512 加密密码:
openssl passwd -6
$ openssl passwd -6
Password:
Verifying - Password:
$6$z5x2/6xN$3XTX56zMwTyv0Nq4AK9O2pF9U0nox0xkK2odC6YhI8Hio5mEKp9xPb1aX5jRHlWqQEOyFUqf/OBUyXwGkBJK0

posted @   pro111  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示