![與 grub2 的符號連結(如 pxelinux)](https://rvso.com/image/154446/%E8%88%87%20grub2%20%E7%9A%84%E7%AC%A6%E8%99%9F%E9%80%A3%E7%B5%90%EF%BC%88%E5%A6%82%20pxelinux%EF%BC%89.png)
我確實想像 pxelinux 那樣做符號鏈接,只需使用 grub2。但我不知道該怎麼辦。目標是擁有可以動態傳遞給 IP 的不同設定檔。
到目前為止,Grub2 確實可以工作,但我無法為 IP 提供另一個配置文件,它總是需要 grub.cfg。我還嘗試了 grub.cfg-IP -> 另一個設定檔 -> 是我實際想要使用的設定檔的符號連結。
也許有人已經弄清楚了這一點。 Grub2 手冊沒有太大幫助。
答案1
PXELINUX 並不是「執行符號連結」:它只是下載一個設定文件,該檔案的名稱包括客戶端的 IP 或 MAC 位址或其一部分。事實上,匹配文件恰好是符號鏈接,這完全是您和向 PXELINUX 提供文件的 TFTP 伺服器之間的事。
請注意,與 PXELINUX 不同,GRUB 預設僅查找單一設定檔grub.cfg
。這就是您需要提供的內容。如果您希望 GRUB 使用名稱在某種程度上取決於客戶端 IP 位址的設定文件,您需要將其告知 GRUB。
然後,該設定檔可以告訴 GRUB 載入另一個設定檔...並且您可以在指定其名稱時使用 GRUB 環境變數。
因此,如果您希望 GRUB 使用名為 的配置文件grub.cfg-<IP address>
,那麼您應該首先grub.cfg
在 GRUB 期望的位置創建一個非常小的文件,並讓它顯示如下內容(僅):
configfile grub.cfg-${net_default_ip}
這應該告訴 GRUB 下載一個新的設定文件,檔案名稱後綴為客戶端 IP 位址。
您甚至可以使用絕對路徑指定新的配置文件,例如
configfile (tftp,${net_default_server})/some/path/grub.cfg-${net_default_ip}
如果您不喜歡使用grub.cfg
僅一行定義新設定檔的單獨文件,則可以透過使用grub-mkimage -c <grub.cfg containing the configfile command> -O i386-pc-pxe <other parameters...>
(或您正在使用的任何體系結構)將此一行設定嵌入到 GRUB PXE 啟動映像中。
您可能已經發現,當 PXE 啟動工作遇到問題時,使用類似tcpdump
或之類的方法轉儲 PXE 用戶端和 DHCP/TFTP 伺服器之間的網路流量非常有用,wireshark
以驗證客戶端是否獲得正確的資訊資訊並依序請求正確的文件......對嗎?