PXE局域网内批量安装liunx

发布于 2024-08-22  96 次阅读


使用 PXE (Preboot Execution Environment) 在局域网内批量安装 Linux 是一种常见的网络安装方法。这种方法允许你从网络服务器启动计算机并自动安装操作系统。

一、安装PXE服务端环境


安装 DHCP 服务器(在 Ubuntu 上使用 isc-dhcp-server
sudo apt-get update
sudo apt-get install isc-dhcp-server

二、配置DHCP服务器

编辑 /etc/dhcp/dhcpd.conf 文件,添加 PXE 服务器的配置:

subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.100 192.168.1.200;
    option domain-name-servers 8.8.8.8;
    option routers 192.168.1.1;
    next-server 192.168.1.10; # PXE 服务器的 IP 地址
    filename "pxelinux.0";
}

next-server 是 PXE 服务器的 IP 地址。filename 是 PXE 启动文件的名称。

三、重启DHCP服务:

sudo systemctl restart isc-dhcp-server

安装和配置 TFTP 服务器

1.1安装 TFTP 服务器(在 Ubuntu 上使用 tftpd-hpa):

sudo apt-get install tftpd-hpa

1.2配置 TFTP 服务器: 编辑 /etc/default/tftpd-hpa 文件:

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"

1.3创建 TFTP 根目录并设置权限

sudo mkdir -p /var/lib/tftpboot
sudo chmod -R 777 /var/lib/tftpboot

1.4创建 TFTP 根目录并设置权限

sudo systemctl restart tftpd-hpa

四、配置 PXE 引导文件

1.1安装 syslinux(包含 PXE 启动文件):

sudo apt-get install syslinux

1.2复制 PXE 启动文件到 TFTP 目录:

sudo cp /usr/lib/syslinux/modules/bios/pxelinux.0 /var/lib/tftpboot/
sudo cp /usr/lib/syslinux/modules/bios/menu.c32 /var/lib/tftpboot/
sudo cp /usr/lib/syslinux/modules/bios/memdisk /var/lib/tftpboot/

如果出现以下提示

请检查 syslinux 已正确安装,或者找到pxelinux.0 文件通常位于 syslinux 的安装目录中。首先确认它是否存在于其他可能的路径中。

查找:
sudo find / -name pxelinux.0

如果在标准路径中找不到 pxelinux.0 文件,可以尝试安装 syslinux-common,它可能会提供必要的文件:

sudo apt-get install syslinux-common

如果上述步骤都无法找到 pxelinux.0,你可以从 syslinux 的源代码获取这些文件。以下是从源代码编译和获取 pxelinux.0 的简要步骤:

下载 syslinux 源代码

wget https://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.tar.gz

解压源代码并编译

tar -xzvf syslinux-6.03.tar.gz
cd syslinux-6.03
sudo make install

编译后,你应该能在 /usr/lib/syslinux/modules/bios/ 或其他相关目录中找到 pxelinux.0 文件。

1.3创建 PXE 配置文件

创建 /var/lib/tftpboot/pxelinux.cfg 目录(如果尚不存在),然后在该目录下创建 default 文件:

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

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

DEFAULT menu.c32
PROMPT 0
TIMEOUT 100
MENU TITLE PXE Boot Menu

LABEL Install Linux
    MENU LABEL ^Install Linux
    KERNEL linux
    APPEND initrd=initrd.img

下载 Linux 内核和初始 RAM 磁盘linuxinitrd.img),并将它们放到 TFTP 目录中

sudo cp /path/to/linux /var/lib/tftpboot/
sudo cp /path/to/initrd.img /var/lib/tftpboot/

五、测试安装

在使用vmware虚拟机进行测试时,内存不得小于2G否则会报错。

新建一个虚拟机,并选择稍后安装操作系统然后下一步下一步

启动客户端

  • 当计算机从网络启动时,它会通过 PXE 服务器下载引导文件。
  • PXE 服务器会提供启动文件,启动安装程序,自动开始 Linux 的安装过程。

如出现以下状态请把网络连接改为桥接!

六、自动化安装(可选)

如果你希望在安装过程中自动化操作,可以创建一个预配置的 Kickstart 文件(用于 Red Hat 系列)或 Preseed 文件(用于 Debian 系列)来自动化安装过程。然后在 PXE 配置文件中指定这个自动化文件。

Kickstart 文件(Red Hat 系列):

LABEL linux
    MENU LABEL ^Install Linux
    KERNEL linux
    APPEND initrd=initrd.img ks=http://192.168.1.12/kickstart.cfg

Preseed 文件(Debian 系列):

LABEL install
    MENU LABEL ^Install Ubuntu
    KERNEL ubuntu-installer/amd64/linux
    APPEND vga=788 initrd=ubuntu-installer/amd64/initrd.gz auto=true priority=critical preseed/url=http://192.168.1.12/preseed.cfg

注意:上面的 IP 地址、文件路径和配置内容应根据你的实际环境进行调整。

通过这些步骤,你可以设置一个 PXE 服务器,在局域网内批量安装 Linux 系统。

再废话一句

如果出现编辑文件的时候权限不够请在前面加上

sudo nano