Linux

PXE Boot - Linux 伺服器和 OpenBSD 客戶端

  • July 26, 2009

我這裡有一台舊機器,我正在嘗試設置為執行 OpenBSD 的無盤客戶端,從我的 fedora 10 機器啟動。

我已經設置了 tftp 和 dhcp 並且兩者似乎都是正確的,但是客戶端只是超時嘗試載入 pxeboot。

# /etc/xinetd.d/tftp 
service tftp
{
   disable = no
   socket_type     = dgram
   protocol        = udp
   wait            = yes
   user            = root
   server          = /usr/sbin/in.tftpd
   server_args     = -s /tftpboot -vv
   per_source      = 11
   cps         = 100 2
   flags           = IPv4
}

[root@blueblock ~]# ls -la /tftpboot/
total 12100
drwxrwxrwx  2 root root    4096 2009-07-25 03:12 .
drwxr-xr-x 26 root root    4096 2009-07-25 02:41 ..
-rwxrwxrwx  1 root root 6696212 2009-02-28 22:41 bsd
-rw-r--r--  1 root root 5592688 2009-02-28 22:41 bsd.rd
-rwxrwxrwx  1 root root   53276 2009-02-28 22:41 pxeboot

# /etc/dhcpd.conf
host longshot {
 hardware ethernet 00:0b:db:07:83:35;
 fixed-address 10.0.2.21;
 next-server 10.0.2.5;
 option root-path "/tftpboot/";
 filename "pxeboot";
}

我可以從網路上的其他機器連接到 tftp 伺服器並成功獲取 pxeboot 文件。

客戶端正在獲取正確的 IP 地址設置,我可以看到它連接到 tftp 伺服器。

Jul 25 04:11:51 localhost dhcpd: DHCPDISCOVER from 00:0b:db:07:83:35 via eth0
Jul 25 04:11:51 localhost dhcpd: DHCPOFFER on 10.0.2.21 to 00:0b:db:07:83:35 via eth0
Jul 25 04:11:53 localhost dhcpd: DHCPREQUEST for 10.0.2.21 (10.0.2.5) from 00:0b:db:07:83:35 via eth0
Jul 25 04:11:53 localhost dhcpd: DHCPACK on 10.0.2.21 to 00:0b:db:07:83:35 via eth0
Jul 25 04:11:53 localhost in.tftpd[1457]: RRQ from 10.0.2.21 filename pxeboot
Jul 25 04:11:53 localhost in.tftpd[1457]: tftp: client does not accept options
Jul 25 04:11:53 localhost in.tftpd[1458]: RRQ from 10.0.2.21 filename pxeboot

我在這裡錯過了什麼簡單的東西嗎?或者我還能做些什麼來嘗試診斷問題。


**編輯:**我將 pxeboot 和 bsd 文件放在我擁有的 openbsd 機器上,並將 next-server 更改為這台機器的 ipaddress,啟用它的 tftp 伺服器,並且客戶端第一次啟動。

我發現的第一件事是您在 xinetd.conf 中使用“-s /tftpboot”並添加了 dhcpd.conf“root-path”選項。為 tftpd 設置“-s”選項意味著這是 tftp 客戶端所見的“/”目錄。所以你的 dhcpd.conf 應該只有“filname /pxeboot”,沒有根路徑選項。

來自“man tftpd”:

-s

Change root directory on startup. This means the remote host does not need 
to pass along the directory as part of the transfer, and may add security.
When -s is specified, exactly one directory should be specified on the command
line. The use of this option is recommended for security as well as compatibility
with some boot ROMs which cannot be easily made to include a directory name 
in its request.

katriel 已經給出了我會給出的答案,所以我會給出一些更通用的建議……

注意:這並不能回答您最初的問題(讓 pxe 客戶端完全啟動),它解決了問題解決後要做什麼。

我強烈建議使用syslinux項目中的 gpxelinux.0,而不是您正在使用的 pxeboot 程序(無論如何,這可能是 syslinux 的 pxelinux 程序的舊版本)。

不要被名字所迷惑,gpxelinux.0 是一個通用的 PXE 引導程序,可用於引導任何作業系統。我用它來啟動 linux、windows、clonezilla 和各種磁片和 CD 映像(主要是 MS-DOS/Freedos 映像,磁片上帶有一些韌體更新——這比將更新刻錄到 CD 或磁片並隨身攜帶要好得多到每台機器)。

gpxelinux.0 與其他 pxe 引導程序相比的主要優勢之一是它不僅僅理解 tftp 協議,因此您可以讓它通過 http 或 ftp 而不是 tftp 獲取核心、initramfs 和其他壓縮文件系統以及其他任何東西。這速度快了很多,而且根據我的經驗,更可靠。你仍然需要一個 tftp 伺服器,因為實際的 gpxelinux.0 文件和它的預設 cfg 文件仍然必須由 tftp 提供服務。

它還包括一個方便的命令行選項,允許您手動覆蓋引導選項(類似於您可以使用 grub 執行的操作)。

只是切換到 http 啟動映像幾乎消除了我遇到的網路啟動問題(除了一些小的配置細節,如路徑/文件名)

引用自:https://serverfault.com/questions/45463