PXE (Preboot Execution Environment) 讓機器透過網路啟動安裝程式,配合 Kickstart (RHEL/CentOS) 或 Preseed (Debian/Ubuntu) 實現零人工干預的全自動部署。本文記錄基於 dnsmasq (DHCP+TFTP+DNS 一體) 的 PXE 伺服器建置流程,適用於 KVM 虛擬機批量佈署與實體機裸金屬安裝。

apt-get install dnsmasq # Debian/Ubuntu
# yum install dnsmasq # CentOS/RHEL
vim /etc/dnsmasq.conf
# 關鍵配置:
bogus-priv
filterwin2k
interface=eth0
dhcp-range=192.168.100.172,192.168.100.180,12h
dhcp-host=52:54:00:ed:00:f7,192.168.100.178 # 固定 IP 給特定 MAC (避免 IP 衝突)
dhcp-boot=pxelinux.0
enable-tftp
tftp-root=/var/ftpd
dhcp-authoritative
systemctl restart dnsmasq
mkdir -p /var/www/ubuntu
mount -o loop /bak/kvmimages/ubuntu-11.10-server-amd64.iso /mnt
cp /mnt/preseed/ubuntu-server.seed /var/www/ubuntu/
cp -a /mnt/* /var/www/ubuntu/
cp -r /mnt/install/netboot/* /var/ftpd/
# 編輯 PXE 預設選單
vim /var/ftpd/pxelinux.cfg/default
default linux
label linux
kernel ubuntu-installer/amd64/linux
append ks=https://192.168.100.171/ubuntu/ks.cfg \
preseed/url=https://192.168.100.171/ubuntu/ubuntu-server.seed \
vga=normal initrd=ubuntu-installer/amd64/initrd.gz --
ks.cfg (Kickstart) 與 ubuntu-server.seed (Preseed) 需由 Web 服務 (Nginx/Apache) 提供,指向 /var/www/ubuntu。dhcp-host 綁定 MAC 固定 IP,避免測試時干擾現網 DHCP。| 功能 | Kickstart (ks.cfg) | Preseed (ubuntu-server.seed) |
|---|---|---|
| 語言/鍵盤/時區 | lang en_USkeyboard ustimezone Asia/Taipei | d-i debian-installer/language string end-i keymap/select usd-i time/zone string Asia/Taipei |
| 分區 | clearpart --all --initlabelautopart | d-i partman-auto/method string lvmd-i partman-lvm/confirm boolean true |
| 網路 | network --bootproto=dhcp | d-i netcfg/get_hostname string auto |
| Root 密碼 | rootpw --plaintext password | d-i passwd/root-password password password |
| 套件選擇 | %packages@coreopenssh-server | tasksel tasksel/first multiselect standard, openssh-server |
| 安裝後腳本 | %postsystemctl enable sshd | d-i preseed/late_command string ... |
# Nginx 範例
server {
listen 80;
server_name 192.168.100.171;
location /ubuntu/ {
alias /var/www/ubuntu/;
autoindex on;
}
}
systemctl reload nginx
Bridge 或 Host-Only (與 PXE 伺服器同網段)。pxelinux.0 → 顯示選單 → 自動載入核心/initrd → 讀取 ks/preseed → 全自動安裝 → 重開機完成。/var/ftpd/
├── pxelinux.0
├── pxelinux.cfg/
│ └── default (menu 選單)
├── centos7/
│ ├── vmlinuz
│ └── initrd.img
└── ubuntu20/
├── vmlinuz
└── initrd.img
pxelinux.cfg/default 使用 MENU 指令建立多發行版選單,滿足異構環境批量佈署需求。
PXE + 自動應答 = 基礎設施即代碼 的雛形,掌握此技能即可實現百台機器單日交付。
Linux 用戶態進程死循環排查實戰:從 R 狀態 100% CPU 到 GDB 定位業務邏輯缺陷
Ubuntu 隨身碟變唯讀無法刪除?用 dosfsck 修復 FAT32 檔案系統錯誤
Linux 編譯連結報「undefined reference to `dlclose'」解決方案
Linux 大檔案高效分發實戰:tee + FIFO 串聯傳輸鏈,突破帶寬瓶頸
Linux history 命令完全指南:歷史記錄管理、高效調用技巧與安全強化
Linux OpenSSL 指令列實戰:Base64 編解碼、檔案校驗、加密解密完整教學