PXE引导 – Linux服务器和OpenBSD客户端

我在这里有一台旧机器,我试图设置成运行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"; } 

我可以从networking上的其他机器连接到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机器上,然后把下一台服务器改成这台机器的IP地址,启用它的tftp服务器,客户机首次启动。

我发现的第一件事是你在xinetd.conf中使用“-s / tftpboot”并添加了dhcpd.conf“root-path”选项。 为tftpd设置“-s”选项意味着是tftp客户端的“/”目录。 所以你的dhcpd.conf应该只有“filname / pxeboot”,没有根path选项。

从“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已经给出了我会给出的答案,所以我会给一些更通用的build议,而不是…

注意:这并不回答你原来的问题(让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几乎消除了我的networking启动问题(除了一些小的configuration细节,如path/文件名)

我会尝试的第一件事是tcpdump tftpstream量,看看转移是否实际上成功完成; 如果是,那么客户端可能不喜欢pxeboot文件 – 无论是损坏的,错误的架构,或其他不适合的。

看看我几年前写的howto 。 虽然没有描述引导BSD,但是它在很多细节上描述了整个过程。 也许这可以帮助你找出哪里出了问题。

我build立了netkit tftp服务器 ,并且第一次使用我的pxeboot文件。

这个tftp服务器在debian / ubuntu上被打包为tftpd ,但似乎没有被打包到使用tftp-hpa服务器的fedora上。


这是我用来启动系统的工作configuration。

 #/etc/xinetd.d/tftp service tftp { disable = no socket_type = dgram protocol = udp wait = yes user = root server = /usr/local/sbin/in.tftpd per_source = 11 cps = 100 2 flags = IPv4 } #/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; filename "pxeboot"; } 

由于这是一个无盘客户机,我需要bootparams和rarpd,所以内核可以通过nfs使用文件系统。 这不需要引导ramdisk内核(bsd.rd)。

 #/etc/bootparams longshot root=10.0.2.5:/export/longshot/root swap=10.0.2.5:/export/longshot/swap 10.0.2.21 root=10.0.2.5:/export/longshot/root swap=10.0.2.5:/export/longshot/swap #/etc/sysconfig/rarpd OPTIONS="-e" INTERFACE="eth0" # /etc/ethers 00:0b:db:07:83:35 10.0.2.21 # /etc/exports /export/longshot 10.0.2.0/255.255.255.0(rw,no_root_squash,sync) 

/tftpboot/pxeboot/pxeboot.cfg/default或同等的内容是什么? 这需要包含有关内核和initrd.img的信息,有时甚至包含您正在使用的网卡