我有一台旧机器,我正在尝试将其设置为运行 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 机器上,并将下一个服务器更改为该机器的 ipaddress,启用它的 tftp 服务器,并且客户端首次启动。
答案1
我发现的第一件事是您在 xinetd.conf 中使用了“-s /tftpboot”,并添加了 dhcpd.conf“root-path”选项。为 tftpd 设置“-s”选项意味着这是 tftp 客户端看到的“/”目录。因此,您的 dhcpd.conf 应该只包含“filname /pxeboot”,而不包含 root-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.
答案2
katriel 已经给出了我应该给出的答案,因此我将提供一些更通用的建议......
注意:这并没有回答您的原始问题(让 pxe 客户端完全启动),它解决了该问题之后该做什么。
我强烈建议使用 gpxelinux.0系统Linux项目而不是您正在使用的 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 作为启动映像,几乎就可以消除我遇到的网络启动问题(除了一些小的配置细节,如路径/文件名)
答案3
我建造Netkit tftp 服务器,并且这第一次使用我的 pxeboot 文件就成功了。
这个 tftp 服务器在 debian/ubuntu 上打包tftpd
,但似乎没有为使用 tftp-hpa 服务器的 fedora 打包。
这是我用来启动系统的工作配置。
#/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)
答案4
看看如何我几年前写过。虽然它没有描述启动 BSD,但它确实相当详细地描述了整个过程。也许这可以帮助您找出问题所在。