17 準備網路開機環境 #
本章介紹如何設定 DHCP 和 TFTP 伺服器,以提供所需的基礎架構來透過 PXE 開機。
可以透過開機前執行環境 (PXE) 安裝 SUSE® Linux Enterprise Server。用戶端硬體需支援透過 PXE 開機。網路需要提供 DHCP 伺服器和 TFTP 伺服器,以向用戶端提供所需的資料。本章將會引導您設定所需的伺服器。
PXE 只會將核心和 initrd 開機。可以使用此方法開機至安裝環境或線上系統。若要設定安裝來源,請參閱第 16 章 「設定網路安裝來源」。
本節內容會介紹各種複雜開機方式的組態任務。其中包含 DHCP、PXE 啟動、TFTP 和網路喚醒等現成的組態。
這些範例假設 DHCP、TFTP 和 NFS 伺服器都位於 IP 為 192.168.1.1
的同一部機器上。所有服務都可以位於不同的機器上,不會出現任何問題。請務必視需要變更 IP 位址。
17.1 設定 DHCP 伺服器 #
DHCP 伺服器為網路用戶端提供動態 (第 17.1.1 節 「動態位址指定」) 和靜態 IP 位址指定 (第 17.1.2 節 「指定靜態 IP 位址」)。它會通告伺服器、路由和網域。對於 TFTP 伺服器,DHCP 還提供核心和 initrd 檔案。需要載入哪些檔案取決於目標機器的架構,以及使用的是傳統 BIOS 還是 UEFI 開機方式。用戶端會在其 DHCP 要求中傳輸其架構類型。DHCP 伺服器根據此資訊確定必須下載哪些檔案用於開機。
從 SUSE Linux Enterprise 15.0 開始,某些特殊情況會導致 PXE 開機失敗以及 AutoYaST 安裝失敗。如需詳細資訊和解決方法,請參閱第 17.1.3 節 「PXE 和 AutoYaST 安裝失敗」。
17.1.1 動態位址指定 #
以下範例顯示如何設定一個向用戶端動態指定 IP 位址,以及通告伺服器、路由器、網域和開機檔案的 DHCP 伺服器。
以
root
身分登入代管 DHCP 伺服器的機器。執行
systemctl enable dhcpd
啟用 DHCP 伺服器。將以下幾行附加到
/etc/dhcpd.conf
下之 DHCP 伺服器組態檔案的子網路組態:# The following lines are optional option domain-name "my.lab"; option domain-name-servers 192.168.1.1; option routers 192.168.1.1; option ntp-servers 192.168.1.1; ddns-update-style none; default-lease-time 3600; # The following lines are required option arch code 93 = unsigned integer 16; # RFC4578 subnet 192.168.1.0 netmask 255.255.255.0 { next-server 192.168.1.1; range 192.168.1.100 192.168.1.199; default-lease-time 3600; max-lease-time 3600; if option arch = 00:07 or option arch = 00:09 { filename "/EFI/x86/grub.efi"; } else if option arch = 00:0b { filename "/EFI/aarch64/bootaa64.efi"; } else { filename "/BIOS/x86/pxelinux.0"; } }
此組態範例在 IP 為
192.168.1.0/24
的伺服器上,使用包含 DHCP、DNS 和閘道的子網路192.168.1.1
。確定根據網路配置變更所有 IP 位址。如需更多dhcpd.conf
中可用選項的詳細資訊,請參閱dhcpd.conf
man 頁面。執行
systemctl restart dhcpd
重新啟動 DHCP 伺服器。
17.1.2 指定靜態 IP 位址 #
DHCP 伺服器還可以向網路用戶端指定靜態 IP 位址和主機名稱。一個使用案例是向伺服器指定靜態位址。另一個使用案例是僅限指定有靜態 IP 位址且不提供動態位址池的用戶端加入網路。
根據以下範例修改上述 DHCP 組態:
group { host test { hardware ethernet MAC_ADDRESS; fixed-address IP_ADDRESS; } }
host 陳述式指定安裝目標的主機名稱。若要結合特定主機的主機名稱和 IP 位址,必須指定用戶端的硬體 (MAC) 位址。請以符合您環境的實際值取代此範例中使用的所有變數,然後儲存變更並重新啟動 DHCP 伺服器。
17.1.3 PXE 和 AutoYaST 安裝失敗 #
從 SUSE Linux Enterprise 15.0 和 ISC DHCP 4.3.x 開始,某些特殊情況會導致 PXE 開機失敗以及 AutoYaST 安裝失敗。如果您的 DHCP 伺服器沒有可用的動態 IP 位址池,只允許在每個用戶端上使用預先定義的靜態位址,並且用戶端傳送 RFC 4361 用戶端識別碼,那麼,PXE/AutoYaST 安裝將無法正常進行。(僅允許指定給特定網路用戶端的位址且不提供動態位址池,會防止隨機機器加入網路。)
當某個新系統在 PXE 中啟動時,它會使用依據硬體類型以及網路介面 MAC 位址建構的用戶端識別碼,將一個要求傳送至 DHCP 伺服器和識別碼本身。這是一個 RFC 2132 client-id
。然後,DHCP 伺服器提供指定的 IP 位址。接下來載入安裝核心,並傳送另一個 DHCP 要求,但此 client-id
不同,它是以 RFC 4361 格式傳送。DHCP 伺服器不會將此 ID 識別為相同用戶端,而是尋找一個可用的動態 IP 位址,但此位址不可用,因此安裝停止。
解決方法是將用戶端設定為傳送 RFC 2132 用戶端 ID。若要在安裝期間傳送 RFC 2132 client-id
,請使用 linuxrc
傳遞以下 ifcfg
指令:
ifcfg=eth0=dhcp,DHCLIENT_CLIENT_ID=01:03:52:54:00:02:c2:67, DHCLIENT6_CLIENT_ID=00:03:52:54:00:02:c2:67
傳統上在乙太網路中使用的 RFC 2132 DHCPv4 client-id
是依據硬體類型 (01
表示乙太網路) 後接硬體位址 (MAC 位址) 建構的,例如:
01:52:54:00:02:c2:67
在識別到某部機器包含多個網路介面時,RFC 4361 DHCPv4 client-id
會嘗試糾正問題。新 DHCPv4 client-id
的格式與 DHCPv6 client-id
相同。此 ID 以 0xff
字首 (而不是硬體類型) 開頭,後接 DHCPv6 IAID (描述機器上介面的介面位址關聯 ID),再後接用於唯一識別該機器的 DHCPv6 唯一識別碼 (DUID)。
如果使用上述以硬體類型和硬體位址為基礎的 DUID,新的 RFC 4361 DHCPv4 client-id
將是:
將 MAC 位址的最後幾個位元組用做 IAID:
ff:00:02:c2:67:00:01:xx:xx:xx:xx:52:54:00:02:c2:67
當 IAID 是簡單的遞增編號時:
ff:00:00:00:01:00:01:xx:xx:xx:xx:52:54:00:02:c2:67
DUID 鏈結層時間戳記 (DUID-LLT) 中的 xx:xx:xx:xx 欄位是建立時間戳記。DUID 鏈結層 (DUID-LL) (00:03:00:01:$MAC
) 沒有時間戳記。
如需使用 linuxrc
的詳細資訊,請參閱 AutoYaST Guide。另請參閱 man 4 initrd
,以及 man 5 wicked-config
、wicked duid
--help
和 wicked iaid --help
中選項 dhcp4
"create-cid"
和 dhcp6 "default-duid"
的文件。
17.2 設定 TFTP 伺服器 #
以下程序描述如何準備伺服器,以便能夠使用透過 TFTP 輸出的檔案,將採用 UEFI 和 BIOS 的用戶端機器遠端開機。
17.2.1 安裝 TFTP 伺服器 #
若要安裝 TFTP 伺服器,請執行以下程序:
安裝
tftp
套件。>
sudo
zypper in tftp
檢查
/etc/sysconfig/tftp
中的tftpd
組態,並視需要新增或變更選項。如需更多詳細資料,請參閱man 8 tftpd
。不需要變更組態,TFTP 精靈也可正常運作。檔案的預設根目錄為/srv/tftpboot
。確定
tftpd
在開機時已啟動,並重新啟動它以讀取新組態。>
sudo
systemctl enable tftp.socket
>
sudo
systemctl restart tftp.socket
17.2.2 安裝開機所需的檔案 #
SUSE Linux Enterprise Server 提供在 BIOS 或 UEFI 機器上透過 PXE 開機所需的檔案。支援以下硬體架構:
AMD64/Intel 64
AArch64
POWER
IBM Z
從特定硬體架構開機所需的檔案已包含在某個 RPM 套件中。請在執行 TFTP 伺服器的機器上安裝此套件:
>
sudo
zypper in tftpboot-installation-SLE-OS_VERSION-ARCHITECTURE
請以 SUSE Linux Enterprise Server 安裝版本號碼 (例如 SLE-15-SP3-x86_64) 取代 OS_VERSION,並以系統架構 (例如 x86_64
) 取代 ARCHITECTURE。因此,產生的文字如下所示:tftpboot-installation-SLE-15-SP3-x86_64。執行 zypper se tftpboot
來搜尋所有可用版本和架構。
這些檔案將安裝在 /srv/tftpboot/SLE-OS_VERSION-ARCHITECTURE
中。您也可以將 SUSE Linux Enterprise Server 的其他版本和架構的檔案複製到 /srv/tftpboot
目錄。
用戶端和伺服器硬體架構可能不同。例如,您可以透過安裝 tftpboot-installation-SLE-15-SP3-aarch64 套件執行 AMD64/Intel 64 TFTP 伺服器,並為 AArch64 用戶端機器提供可開機環境。
/srv/tftpboot/
目錄
如果您的機器上已存在目錄 /srv/tftpboot/
,則所有檔案將會安裝到 /usr/share/tftpboot-installation/
。如果您正在從舊版 SLES 升級 PXE 伺服器,則會採用這種安裝方式。
若要修復此問題,請將 /usr/share/tftpboot-installation/
中的檔案手動複製到 /srv/tftpboot/
。或者,移除 /srv/tftpboot/
並重新安裝 tftpboot-installation-SLE-OS_VERSION-ARCHITECTURE 套件。
17.2.3 設定 PXELINUX #
在編輯器中開啟檔案 /srv/tftpboot/SLE-OS_VERSION-ARCHITECTURE/net/pxelinux.cfg/default
。依據install
中所述的設定取代 第 16 章 「設定網路安裝來源」 參數的路徑。另外,請以 TFTP 伺服器的 IP 位址取代 TFTP_SERVER。如需 PXELINUX 組態選項的綜覽,請參閱第 17.3 節 「PXELINUX 組態選項」。
default linux # install label linux ipappend 2 kernel boot/ARCHITECTURE/loader/linux append initrd=boot/ARCHITECTURE/loader/initrd instsys=tftp://TFTP_SERVER/SLE-OS_VERSION-ARCHITECTURE/boot/ARCHITECTURE/root install=PROTOCOL://SERVER_IP:/PATH display message implicit 1 prompt 1 timeout 50
如需 append
行中所用開機參數的詳細資料,請參閱第 7.3 節 「重要開機參數清單」。
如果需要,請編輯 /srv/tftpboot/SLE-OS_VERSION-ARCHITECTURE/net/pxelinux.cfg/message
,以在開機功能表中顯示訊息。
17.2.4 使用 GRUB2 為 EFI 準備 PXE 開機 #
通常不需要修改 GRUB2 組態檔案,但預設設定不包含安裝系統的網路資源。若要透過網路執行完整的 SUSE Linux Enterprise Server 安裝,需要在 /srv/tftpboot/SLE-OS_VERSION-ARCHITECTURE/EFI/BOOT/grub.cfg
檔案的 linuxefi
指令中指定 install
參數。如需 第 7.3.3 節 「指定安裝來源」 參數的更多資訊,請參閱install
。
17.3 PXELINUX 組態選項 #
此處列出的選項為 PXELINUX 組態檔案中所有可用選項的子集合。
APPEND OPTIONS
將一或多個選項新增至核心指令行。這些新增選項是用於自動和手動開機。新增選項會加在每個核心指令行的開頭位置,通常您只要明確輸入核心選項,便可覆寫這些選項。
APPEND -
不附加任何選項。在
APPEND
區段中做為引數且包含單一連字號的LABEL
,可以用來覆寫全域的APPEND
。DEFAULT KERNEL_OPTIONS...
設定預設的核心指令行。當 PXELINUX 自動開機時,它會執行指定的項目,並附加
auto
選項。如果組態檔案不存在或其中未定義 DEFAULT 項目,則預設使用不帶任何選項的核心名稱「linux」。
IFAPPEND FLAG
根據 FLAG 值將特定選項新增至核心指令行。
IFAPPEND
選項僅適用於 PXELINUX。需要依照表格 17.1 「透過IFAPPEND
產生和新增的核心指令行選項」中所述為 FLAG 指定一個值:表 17.1︰ 透過IFAPPEND
產生和新增的核心指令行選項 #引數
產生的核心指令行/描述
1
ip=CLIENT_IP:BOOT_SERVER_IP:GW_IP:NETMASK
預留位置根據 DHCP/BOOTP 或 PXE 開機伺服器中的輸入加以取代。
請注意,此選項並非在已開機系統中執行 DHCP 用戶端的替代項。如果不進行定期更新,PXE BIOS 取得的租用將會過期,使得該 IP 位址可供 DHCP 伺服器重複使用。
2
BOOTIF=MAC_ADDRESS_OF_BOOT_INTERFACE
當安裝伺服器在收到 DHCP 伺服器的回覆前逐個查探 LAN 介面時,此選項可用於避免逾時。使用此選項可讓 initrd 程式決定系統是從哪個介面開機的。linuxrc 會讀取此選項並使用此網路介面。
4
SYSUUID=SYSTEM_UUID
新增採用小寫十六進位格式的 UUID,具體請參閱
/usr/share/doc/packages/syslinux/pxelinux.txt
LABEL LABEL KERNEL IMAGE APPEND OPTIONS...
指示如果輸入了 LABEL 做為要開機的核心,則 PXELINUX 應改為將 IMAGE 開機,並且應使用指定的
APPEND
選項。這些值會取代檔案的 global 區段中第一條LABEL
指令前面指定的值。IMAGE 的預設值與 LABEL 的相同,如果未指定APPEND
,則預設會使用 global 項目 (如果有)。您最多可輸入 128 個LABEL
項目。PXELINUX 使用以下語法:
label MYLABEL kernel MYKERNEL append MYOPTIONS
系統會將標籤當成檔案名稱一樣截斷,截斷後,它們必須是唯一的。舉例來說,「v2.6.30」 和 「v2.6.31」 這兩個標籤在 PXELINUX 中將無法區分,因為它們都會截斷成相同的 DOS 檔案名稱。
該核心不必是 Linux 核心。它也可以是開機磁區或 COMBOOT 檔案。
LOCALBOOT TYPE
在 PXELINUX 上,指定
LOCALBOOT 0
而不指定KERNEL
選項,表示要呼叫此特定標籤;而且最後要使用本地磁碟開機,而不使用核心開機。引數
描述
0
執行正常開機
4
使用仍常駐在記憶體中的「通用網路驅動程式介面」(Universal Network Driver Interface, UNDI) 執行本地開機。
5
使用仍常駐在記憶體中完整的 PXE 堆疊 (包括 UNDI 驅動程式) 執行本地開機。
其他所有值都未定義。如果您對 UNDI 或 PXE 堆疊不甚瞭解,請指定
0
。TIMEOUT TIME-OUT
指示在開機提示等待自動開機的時間長度,單位為 1/10 秒。若使用者在鍵盤上按下任何一個鍵,就會取消逾時,前提是假設使用者會完成已開始的指令。如果逾時時間設為 0,則會完全停用逾時功能 (此設定值亦為預設值)。可能的最大逾時值為 35996 (小於一小時)。
PROMPT flag_val
如果
flag_val
為 0,只有在按下 Shift 或 Alt,或者已設定 Caps Lock 或 Scroll Lock 時才會顯示開機提示 (此設定值為預設值)。如果flag_val
為 1,則永遠會顯示開機提示。F2 FILENAME F1 FILENAME ..etc.. F9 FILENAME F10 FILENAME
可在開機提示下按下功能鍵時,於螢幕畫面上顯示指定的檔案。這可用來執行開機前線上說明 (可能是針對核心指令行選項)。如果是使用較早版本的反向相容,10 也可以當作
F0
F 輸入。請注意,目前還無法將檔案名稱繫結至 F11 和 F12。
17.4 為 PXE 開機準備目標系統 #
請在 BIOS 開機順序中包含 PXE 選項,以便準備 PXE 開機的系統 BIOS。
在 BIOS 中,請勿將 PXE 選項置於硬碟開機參數之前。否則,此系統會在您每次開機時嘗試重新安裝系統。
17.5 使用網路喚醒進行遠端喚醒 #
網路喚醒 (WOL) 是一種乙太網路標準,可透過網路向某部電腦傳送喚醒訊號,以從遠端將其喚醒。此訊號稱為「魔術封包」。請在要啟用遠端喚醒的用戶端機器上,以及要用於傳送喚醒訊號的每部機器上安裝 WOL。透過 UDP 連接埠 9 將魔術封包廣播到用戶端機器上網路介面的 MAC 位址。
當電腦關機時,它們通常不會徹底關閉,而是保持在低電量模式。如果網路介面支援 WOL,則會在機器處於關閉狀態時監聽魔術封包喚醒訊號。您可以手動方式傳送魔術封包,或者在傳送方機器上的 cron 工作中排程喚醒。
17.5.1 先決條件 #
WOL 與支援 WOL 的有線和無線乙太網路卡均可配合使用。
您可能需要在系統 BIOS/UEFI 中啟用 WOL。
檢查用於 PXE 開機的 BIOS/UEFI 設定,並確定已停用該設定,以防止意外重新安裝。
調整防火牆,以允許在 UDP 連接埠 9 上傳輸流量。
17.5.2 驗證有線乙太網路支援 #
執行以下指令,以確定有線乙太網路介面是否支援 WOL:
>
sudo
ethtool eth0 | grep -i wake-on Supports Wake-on: pumbg Wake-on: g
範例輸出顯示 eth0 支援 WOL,這可依據 g
行中的 Supports Wake-on
旗標確定。Wake-on: g
表示 WOL 已啟用,因此此介面已準備好接收喚醒訊號。如果 WOL 未啟用,請使用以下指令將其啟用:
>
sudo
ethtool -s eth0 wol g
17.5.3 驗證無線介面支援 #
透過 WiFi 網路喚醒 (或 WoWLAN) 需要使用支援 WoWLAN 的無線網路介面。使用 iw
指令可測試該功能,該指令由 iw 套件提供:
>
sudo
zypper in iw
確定您的裝置名稱:
>
sudo
iw dev phy#0 Interface wlan2 ifindex 3 wdev 0x1 addr 9c:ef:d5:fe:01:7c ssid accesspoint type managed channel 11 (2462 MHz), width: 20 MHz, center1: 2462 MHz txpower 20.00 dBm
在此範例中,用於查詢 WoWLAN 支援的裝置名稱是 phy#0
。此範例顯示此裝置不支援該功能:
>
sudo
iw phy#0 wowlan show command failed: Operation not supported (-95)
此範例顯示一個介面支援 WoWLAN,但未處於啟用狀態:
>
sudo
iw phy#0 wowlan show WoWLAN is disabled
將其啟用:
>
sudo
iw phy#0 wowlan enable magic-packet WoWLAN is enabled: * wake up on magic packet
17.5.4 安裝和測試 WOL #
若要使用 WOL,請在用戶端和傳送方機器上安裝 wol 套件:
>
sudo
zypper in wol
在用戶端機器上安裝 wol-udev-rules。此套件會安裝一條 udev 規則,該規則會在系統啟動時自動啟用 WOL。
獲取用戶端機器上網路介面的 MAC 位址:
>
sudo
ip addr show eth0|grep ether link/ether 7c:ef:a5:fe:06:7c brd ff:ff:ff:ff:ff:ff
在範例輸出中,7c:ef:a5:fe:06:7c
是 MAC 位址。
將用戶端機器關機,並從同一子網路中的另一部電腦向其傳送喚醒訊號:
>
wol 7c:ef:a5:fe:06:7c
如果您的目標機器與第二部裝置位於同一網路中,但在不同的子網路中,請指定目標機器的廣播位址:
>
wol -i 192.168.0.63 7c:ef:a5:fe:06:7c
由於 WOL 相依於廣播網域,因此儘管傳送方機器可以在不同的網路區段中,但兩部機器必須位於同一網路中。
可以從不同的網路傳送魔術封包。一種方法是使用連接埠轉遞 (如果您的路由器支援連接埠轉遞至廣播位址)。更安全的方法是透過 SSH 連接至您網路內的某部主機,然後從該主機傳送魔術封包。