PXE 批量部署linux操作系统

Linux PXE 批量部署

通过 PXE(Preboot Execution Environment,预启动执行环境)批量部署 Linux 操作系统,需要搭建一套包含 DHCP、TFTP、HTTP/NFS 等服务的网络环境,实现客户端从网络启动并自动安装系统。

一、PXE 部署原理

PXE 部署依赖网络启动流程:

  1. 客户端开机后从网卡启动,通过 DHCP 获取 IP 地址,并获取 TFTP 服务器地址和启动文件名称。
  2. 客户端从 TFTP 服务器下载启动镜像(vmlinuz、initrd.img)和 PXE 配置文件。
  3. 启动 Linux 安装程序,通过 HTTP/NFS 服务器获取系统安装镜像。
  4. 读取 Kickstart 自动应答文件,实现无人值守安装。

二、环境准备

  1. 服务器:1 台 Linux 服务器(推荐 CentOS 7/Ubuntu 20.04),作为 PXE 服务器,需静态 IP(如192.168.100)。
  2. 客户端:多台支持网络启动的计算机(需在 BIOS 中开启 PXE 启动)。
  3. 网络:服务器与客户端在同一局域网,无其他 DHCP 服务器冲突。
  4. 安装源:Linux 发行版 ISO 镜像(如 CentOS-7-x86_64-DVD.iso)。

三、部署步骤

1. 安装必要服务

需要安装的服务:

  1. dhcpd:分配 IP 并告知 TFTP 服务器信息。
  2. tftp-server:提供启动文件(内核、初始化镜像、PXE 配置)。
  3. httpd(或nfs-utils):提供系统安装镜像(HTTP 更简单)。
  4. syslinux:提供 PXE 启动所需的引导程序。

CentOS 7为例:

# 安装服务

yum install -y dhcp tftp-server httpd syslinux

# 启动服务并设置开机自启

systemctl start dhcpd tftp httpd

systemctl enable dhcpd tftp httpd

2. 配置 DHCP 服务

DHCP 需指定客户端的 IP 范围、网关、DNS,关键是通过next-server指定 TFTP 服务器 IP,filename指定启动文件(pxelinux.0)。

编辑/etc/dhcp/dhcpd.conf:

subnet 192.168.1.0 netmask 255.255.255.0 {

  range 192.168.1.101 192.168.1.200;  # 客户端IP范围

  option routers 192.168.1.1;         # 网关

  option domain-name-servers 8.8.8.8; # DNS

  next-server 192.168.1.100;          # TFTP服务器IP(PXE服务器IP)

  filename "pxelinux.0";              # 启动文件名称

}

重启 DHCP 服务:

systemctl restart dhcpd

3. 配置 TFTP 服务

TFTP 用于传输启动相关文件,默认根目录为/var/lib/tftpboot。

     1.复制 PXE 引导程序

syslinux提供的pxelinux.0是核心引导文件,需复制到 TFTP 根目录:

cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

cp /usr/share/syslinux/vesamenu.c32 /var/lib/tftpboot/

#cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot/

    2.准备 Linux 启动镜像

挂载 Linux ISO 镜像,提取内核(vmlinuz)和初始化镜像(initrd.img):

mount /dev/cdrom /mnt  # 挂载ISO(或手动指定ISO路径:mount -o loop CentOS-7.iso /mnt)

cp /mnt/images/pxeboot/vmlinuz /var/lib/tftpboot/

cp /mnt/images/pxeboot/initrd.img /var/lib/tftpboot/

    3.创建 PXE 配置目录

PXE 客户端启动时会读取/var/lib/tftpboot/pxelinux.cfg/default配置文件:

mkdir -p /var/lib/tftpboot/pxelinux.cfg

   4.编写 PXE 启动菜单(default

编辑/var/lib/tftpboot/pxelinux.cfg/default:

#default menu.c32  # 使用syslinux的菜单文本模块

default vesamenu.c32  # 使用syslinux的菜单图形模块

prompt 0          # 不等待用户输入(0秒超时)

timeout 30        # 超时时间(30*0.1秒=3秒)

menu title PXE Deploy Linux

label linux

  menu label ^Install CentOS 7 Auto

  kernel vmlinuz

  append initrd=initrd.img inst.repo=http://192.168.1.100/centos7 inst.ks=http://192.168.1.100/centos7/ks.cfg

  1. inst.repo:指定 HTTP 服务器上的安装源路径。
  2. inst.ks:指定 Kickstart 自动应答文件路径(后续步骤创建)。
4. 配置 HTTP 服务(提供安装源)

HTTP 服务器用于存放 Linux 安装镜像,供客户端下载系统文件。

  1. 复制安装源到 HTTP 根目录

mkdir /var/www/html/centos7

cp -r /mnt/* /var/www/html/centos7/  # 复制ISO内所有文件到HTTP目录

     2.验证 HTTP 服务:

浏览器访问http://192.168.1.100/centos7,应能看到 ISO 内的文件(如Packages、isolinux)。

5. 创建 Kickstart 自动应答文件(ks.cfg)

Kickstart 文件(ks.cfg)定义安装选项(分区、用户、软件包等),实现无人值守安装。

     1.生成 ks.cfg

可通过图形工具system-config-kickstart生成,或手动编写。示例(/var/www/html/centos7/ks.cfg):

#platform=x86, AMD64, 或 Intel EM64T

#version=DEVEL

install

url --url=http://192.168.1.100/centos7  # 安装源URL

keyboard us

lang zh_CN

text

network --onboot yes --device eth0 --bootproto dhcp --noipv6

rootpw --plaintext 1234

skipx

firewall --disabled

selinux --disabled

timezone Asia/Shanghai

bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"

zerombr

clearpart --all --initlabel  # 清除所有分区并初始化标签

part /boot --fstype=xfs --size=500 --asprimary  # 必须为标准分区(UEFI引导要求)

part pv.01 --size=1 --grow  # 剩余空间创建物理卷

volgroup vg0 pv.01  # 创建卷组

logvol / --fstype=xfs --vgname=vg0 --name=lv_root --grow --size=1  # 根逻辑卷(占满剩余空间)

logvol swap --vgname=vg0 --name=lv_swap --recommended  # 交换分区(推荐大小)

%packages

vim-enhanced

nmap-ncat

sysstat

lvm2

@base

@core

%end

reboot  # 安装完成后重启

      2.权限设置:

chmod 644 /var/www/html/centos7/ks.cfg

6. 客户端 PXE 启动安装
  1. 客户端开机,进入 BIOS 设置,将 “网络启动(PXE)” 设为第一启动项。
  2. 客户端自动从网络启动,获取 IP 后加载 PXE 菜单。
  3. 选择 “Install CentOS 7”,系统会自动通过 HTTP 下载安装源,并按ks.cfg配置完成安装。

四、注意事项

  1. 防火墙与 SELinux

临时关闭防火墙和 SELinux(或配置规则允许 DHCP/TFTP/HTTP 端口):

systemctl stop firewalld

setenforce 0

    2.TFTP 服务配置

若 TFTP 服务启动失败,检查/etc/xinetd.d/tftp配置(确保disable = no)。

     3.Kickstart 文件验证

使用ksvalidator工具检查语法错误:

yum install -y pykickstart

ksvalidator /var/www/html/centos7/ks.cfg

    4.多版本支持

   如需部署多个 Linux 版本,可在pxelinux.cfg/default中添加多个启动项,指向不同的安装源和 ks 文件。

通过以上步骤,即可实现 Linux 系统的批量 PXE 部署,适用于服务器机房、实验室等场景的大规模装机需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值