我这里有一台旧机器,我正在尝试设置为运行 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”:
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 启动映像几乎消除了我遇到的网络启动问题(除了一些小的配置细节,如路径/文件名)
我要尝试的第一件事是
tcpdump
tftp 流量,看看传输是否真的成功完成;如果是,那么可能是客户端不喜欢该pxeboot
文件——要么它已损坏,要么架构错误,要么不合适。看看我几年前写的howto 。虽然它没有描述引导 BSD,但它确实非常详细地描述了整个过程。也许这可以帮助您找出问题所在。
我构建了netkit tftp 服务器,这是第一次使用我的 pxeboot 文件。
这个 tftp 服务器
tftpd
在 debian/ubuntu 上打包,但似乎没有为使用 tftp-hpa 服务器的 fedora 打包。这是我用来启动系统的工作配置。
由于这是一个无盘客户端,我需要 bootparams 和 rarpd 以便内核可以通过 nfs 使用文件系统。这不是引导 ramdisk 内核 (bsd.rd) 所必需的。
/tftpboot/pxeboot/pxeboot.cfg/default 或等效的内容是什么?这需要包含有关内核和 initrd.img 的信息,有时甚至是您正在使用的网卡