基于ubuntu 24.04实现PXE无人值守装机
·
1、更新apt国内源
deb https://mirrors.aliyun.com/ubuntu/ noble main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ noble main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ noble-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ noble-security main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ noble-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ noble-updates main restricted universe multiverse
# deb https://mirrors.aliyun.com/ubuntu/ noble-proposed main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ noble-proposed main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ noble-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ noble-backports main restricted universe multiverse
root@ubuntu:~# vim /etc/apt/sources.list
root@ubuntu:~# apt update
2、安装必要软件
sudo apt install -y dnsmasq apache2 pxelinux syslinux-common
dnsmasq:一个轻量级的神器,集成了DHCP、TFTP、DNS服务,能极大简化我们的配置工作 。
apache2:作为HTTP服务器,提供ISO镜像和配置文件的下载 。
syslinux-common:提供PXE启动所需的引导文件(如 pxelinux.0)
pxelinux: PXE是网络引导加载程序

3、配置组合服务 (dnsmasq)
sudo vim /etc/dnsmasq.d/pxe.conf
# 监听提供服务的网卡,替换 ens32 为你的实际网卡名
interface=ens32
# 绑定接口,只服务该网卡
bind-interfaces
# 关闭dnsmasq自带的DNS功能,避免和系统DNS冲突
port=0
# --- DHCP 服务配置 ---
# 定义DHCP分配的IP地址范围、子网掩码和租期
dhcp-range=192.168.80.101,192.168.80.201,12h
# 指定PXE启动时要下载的引导文件(Legacy BIOS模式)
dhcp-boot=pxelinux.0
# --- UEFI 支持 (可选,但强烈建议添加) ---
# 匹配UEFI架构的客户端 (client-arch 7 代表 x64 UEFI)
dhcp-match=set:efi-x86_64,option:client-arch,7
# 为UEFI客户端指定不同的引导文件
dhcp-boot=tag:efi-x86_64,bootx64.efi
# --- TFTP 服务配置 ---
# 启用内建的TFTP服务
enable-tftp
# 设置TFTP的根目录,所有启动文件都放在这里
tftp-root=/srv/tftp
# 日志记录,方便排错
log-facility=/var/log/dnsmasq.log
配置解析 :
dhcp-range: 定义了DHCP地址池。
dhcp-boot: 告诉客户端下载哪个启动文件。我们为传统的Legacy BIOS和现代的UEFI分别做了配置 。
enable-tftp & tftp-root: 开启TFTP并指定文件存放路径。
4、创建TFTP根目录,并重启 dnsmasq 服务
sudo mkdir -p /srv/tftp
sudo systemctl restart dnsmasq
5、准备TFTP启动文件
5.1 准备Legacy BIOS启动文件
# 复制pxelinux.0引导文件
sudo cp /usr/lib/PXELINUX/pxelinux.0 /srv/tftp/
# 复制需要的模块文件
sudo cp /usr/lib/syslinux/modules/bios/{ldlinux.c32,libutil.c32,menu.c32} /srv/tftp/

5.2 准备UEFI启动文件
# 安装用于生成UEFI启动文件的包
sudo apt install -y shim-signed grub-efi-amd64-signed
6、准备HTTP服务内容
6.1 创建目录结构
sudo mkdir -p /var/www/html/{iso,autoinstall}
6.2 放置ISO镜像
将你下载好的Ubuntu ISO镜像上传或移动到 /var/www/html/iso/ 目录下。

6.3 挂载ISO并提取内核/initrd
# 挂载ISO文件
sudo mount -o loop /var/www/html/iso/ubuntu-24.04.1-live-server-amd64.iso /mnt
# 将内核和初始化内存盘复制到TFTP目录
sudo cp /mnt/casper/{vmlinuz,initrd} /srv/tftp/
# 卸载ISO
sudo umount /mnt
7、配置自动安装文件 (Autoinstall)
7.1 创建空的 meta-data 文件 (可以留空,但必须存在)
sudo touch /var/www/html/autoinstall/meta-data
7.1 创建核心的 user-data 文件
sudo vim /var/www/html/autoinstall/user-data
#cloud-config
autoinstall:
version: 1
# 语言和时区
locale: en_US.UTF-8
timezone: Asia/Shanghai
keyboard:
layout: us
# 安装源 (使用Ubuntu镜像)
source:
id: ubuntu-server
# 网络配置 (这里以DHCP为例)
network:
network:
version: 2
ethernets:
ens32: # 请替换为客户端实际的网卡名,或留空让系统自动识别
dhcp4: true
# 存储配置 (示例:使用整个磁盘,LVM分区)
storage:
layout:
name: lvm
# 用户和密码配置
identity:
hostname: ubuntu-client
username: studylinux # 替换为你想要的用户名
# 密码是 "yourpassword" 的加密哈希值,用 mkpasswd -m sha-512 生成
password: $6$uO.biuowbqc.t.r0$wrTIaoro0/1yY2GjT/3VBpgtDpGVNuxeAuoB5eUyl4.YfBXUpdpvQQFvoXEPGmERKF0jV2uZDfy5HovCQq0Z51 #密码是123456
# SSH服务配置
ssh:
install-server: true
allow-pw: true # 允许密码登录
# 安装额外软件包
packages:
- vim
- git
- curl
# 安装完成后执行的命令
late-commands:
- curtin in-target -- apt-get update
8、配置PXE启动菜单
8.1 为Legacy BIOS创建菜单
sudo mkdir /srv/tftp/pxelinux.cfg
sudo vim /srv/tftp/pxelinux.cfg/default
DEFAULT menu.c32
PROMPT 0
TIMEOUT 50
MENU TITLE PXE Boot Server
LABEL Ubuntu 24.04 Auto Install
MENU LABEL ^Install Ubuntu 24.04 LTS (Autoinstall)
KERNEL vmlinuz
INITRD initrd
APPEND ip=dhcp url=http://192.168.80.100/iso/ubuntu-24.04.1-live-server-amd64.iso autoinstall ds=nocloud-net;s=http://192.168.80.100/autoinstall/ cloud-config-url=/dev/null
APPEND 这行是关键,它告诉内核:
ip=dhcp: 客户端使用DHCP获取IP。
url=…: 从哪里下载完整的ISO镜像进行安装 。
ds=nocloud-net;s=…: 指定自动安装配置文件(user-data 和 meta-data)的下载地址 。
autoinstall: 触发自动安装模式。
8.2 为UEFI创建菜单
sudo mkdir -p /srv/tftp/grub
sudo vim /srv/tftp/grub/grub.cfg
set default="0"
set timeout=5
menuentry "Install Ubuntu 24.04 LTS (Autoinstall)" {
linux /vmlinuz ip=dhcp url=http://192.168.80.100/iso/ubuntu-24.04.1-live-server-amd64.iso autoinstall ds=nocloud-net;s=http://192.168.80.100/autoinstall/ cloud-config-url=/dev/null ---
initrd /initrd
}
9、启动服务并测试
9.1 启动所有服务,并设置开机自启
sudo systemctl restart dnsmasq apache2
sudo systemctl enable dnsmasq apache2
9.2 检查服务状态,确保没有报错
systemctl status dnsmasq apache2

9.3 将待安装的客户端机器设置为网络启动(PXE Boot),然后开机。如果一切顺利,你将看到PXE启动菜单,并自动开始无人值守安装过程。



更多推荐
所有评论(0)