Fedora

通過 PXE 引導進行 Fedora 網路安裝

  • December 23, 2018

如何使用 PXE 引導通過網路安裝 Fedora?

動機:目標系統的 BIOS 根本無法從 USB 大容量儲存設備啟動。另一個動機是通過網路啟動更方便。

挑戰:LAN 已經有一個無法更改的 DHCP 伺服器,即不支持配置 PXE 相關選項的伺服器(它是 Fritz Box 路由器的一部分)。

也可以為PXE設置代理 DHCP服務。因此,無需更改現有的 DHCP 伺服器。然後可以使用普通的 Linux 系統(例如工作站)來託管預引導執行環境 (PXE)。

需要以下步驟來設置 PXE 以對Fedora 網路安裝映像進行網路引導(假設也是 Fedora 主機):

驗證圖像

$ gpg --verify Fedora-Server-21-x86_64-CHECKSUM
$ sha256sum --check Fedora-Server-21-x86_64-CHECKSUM
Fedora-Server-netinst-x86_64-21.iso: OK

掛載鏡像

mkdir /mnt/iso
mount -o loop Fedora-Server-netinst-x86_64-21.iso /mnt/iso

DHCP 設置

yum install dnsmasq tftp-server syslinux-tftpboot

tftp-server軟體包僅用於創建目錄/var/lib/tftpboot,dnsmasq 已經集成了一個 tftp 伺服器。

配置:

cat > /etc/dnsmasq.conf
interface=enp0s25
# and don't bind to 0.0.0.0
bind-interfaces
# extra logging
log-dhcp
dhcp-range=192.168.178.0,proxy
# first IP address is the one of the host
dhcp-boot=pxelinux.0,192.168.178.34,192.168.178.0
pxe-service=x86PC,"Automatic Network Boot",pxelinux
# Specify the IP address of another tftp server
enable-tftp
# default location of tftp-server on Fedora
tftp-root=/var/lib/tftpboot
# disable DNS
port=0

啟動它:

systemctl start dnsmasq.service

設置 TFTP 目錄

複製所有需要的文件:

cp /mnt/iso/images/pxeboot/initrd.img /var/lib/tftpboot
cp /mnt/iso/images/pxeboot/vmlinuz /var/lib/tftpboot
cp /tftpboot/pxelinux.0 /var/lib/tftpboot
cp /tftpboot/vesamenu.c32 /var/lib/tftpboot
cp /tftpboot/ldlinux.c32 /var/lib/tftpboot
cp /tftpboot/libcom32.c32 /var/lib/tftpboot
cp /tftpboot/libutil.c32 /var/lib/tftpboot

添加配置:

mkdir /var/lib/tftpboot/pxelinux.cfg
cat > /var/lib/tftpboot/pxelinux.cfg/default
default vesamenu.c32
prompt 0
# disable timeout
timeout 0
#timeout 600

# if file is missing, this is ignored
display boot.msg

label linux
 menu label Install Fedora 21 Server x86-64
 kernel vmlinuz
 append initrd=initrd.img inst.stage2=http://workstation.example.org/

設置 HTTP 伺服器

yum install nginx

配置實例:

cat > /etc/nginx/conf.d/iso.conf
 server {
     listen       80 default_server;
     server_name  localhost;
     root         /mnt/iso ;
     include /etc/nginx/default.d/*.conf;
 }

禁用預設實例/將其移動到不同的埠:

--- a/nginx/nginx.conf
+++ b/nginx/nginx.conf
@@ -43,7 +43,7 @@ http {
    include /etc/nginx/conf.d/*.conf;

    server {
-        listen       80 default_server;
+        listen       8080 default_server;
        server_name  localhost;
        root         /usr/share/nginx/html;

啟動伺服器:

systemctl start nginx.service

Fedora 安裝程序(dracut)基本上只需要從該 http 伺服器獲取一個文件:

LiveOS/squashfs.img

配置防火牆

firewall-cmd --add-service=http
firewall-cmd --add-service=dhcp
firewall-cmd --add-service=tftp
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=dhcp --permanent
firewall-cmd --add-service=tftp --permanent

引導客戶端

就是這樣。客戶端可以通過 PXE 進行網路引導並獲取 Fedora 網路安裝映像。

變化可能是:為全自動網路安裝添加 kickstart 文件(並設置超時),為不同的客戶端配置不同的 PXE 設置(基於 MAC 地址)等。

清理

可以停止守護程序並解除安裝環回映像:

systemctl stop nginx.service
systemctl stop dnsmasq.service
umount /mnt/iso

安全說明

此方法只應在受信任的 Intranet 中執行,因為 netboot 客戶端通過 TFTP 和 HTTP 獲取其配置和幾個絕對不安全的映像。

引用自:https://unix.stackexchange.com/questions/186302