PXE 启动 — 在 TFTP 服务器上未找到内核

PXE 启动 — 在 TFTP 服务器上未找到内核

我按照以下链接进行 PXE 启动, http://www.howtoforge.com/setting-up-a-pxe-install-server-on-ubuntu-9.10-p3

并且我能够从服务器 ping 通客户端,并且当我启动客户端时,它会从服务器获取 IP 地址。

但后来我收到了这个错误

PXELinux 3.82 2009-06-09
. . . [other informations]
!PXE Entry point found (we hope) at 9D3B:0109 via plan A
UNDI code segment at 9D3B len 16C2
UNDI data segment at 933B len A000
Getting cached packet 01 02 03
. . . [other informations]
TFTP prefix:
Trying to load: pxelinux.cfg/ec5db4c0-74fe-d511-b9e7-3d9235afe5a1
Trying to load: pxelinux.cfg/01-00-17-31-b6-5e-a8
Trying to load: pxelinux.cfg/0A64491E
Trying to load: pxelinux.cfg/0A64491
Trying to load: pxelinux.cfg/0A6449
Trying to load: pxelinux.cfg/0A644
Trying to load: pxelinux.cfg/0A64
Trying to load: pxelinux.cfg/0A6
Trying to load: pxelinux.cfg/0A
Trying to load: pxelinux.cfg/0
Trying to load: pxelinux.cfg/default
Unable to locate configuration file
Boot failed: press a key to retry or wait for reset

我已将链接中提到的所有文件放入 tftpboot。有人能解释一下问题出在哪里吗?

答案1

您可以尝试在启动服务器上运行 tcpdump(或 wireshark)并查看客户端请求的内容。就我个人而言,我喜欢查看网络上正在运行的内容,因为这是事实,全部事实,而且是唯一的事实 ;) 它可以帮助我确定到底发生了什么。

说到权限——还要记住目录权限。进程必须具有目录的执行 (x) 权限才能进入该目录(例如:cd /path/x)和读取 (r) 权限才能读取其内容(例如:ls /path/x)。执行位是必须具备的,并且 tftpd 守护程序运行的用户的读取权限也不应该受到影响。

接下来,您可以-vvvv向文件内添加选项/etc/default/tftpd-hpa并重新启动服务器。这将提高 tftpd-hpa 守护进程的日志记录级别,并可能为您提供有关问题根源的额外提示(请查看内部内容/var/log/messages)。

另一个想法:尝试通过 tftp 从 tftp 服务器获取客户端想要的文件(通过监听线路上运行的内容,您将获得客户端想要的内容)。如果您可以下载文件,则您可以确定您的 tftp 服务器可以正常工作、文件存在、路径正确且权限适当。如果存在任何其他问题,则它们在客户端(或客户端-服务器协议不匹配)。

最后一件事:我不喜欢 HOWTO 建议将 /tftpboot 目录设为所有人可写。设置完成后,删除目录中的写权限。恶意客户端可以轻松填满 /tftpboot 目录所在的文件系统——协议中没有内置身份验证(因此是“简单”的 ftp)。

希望这段文字能有所帮助 ;)

答案2

文件中可能记录了更多信息/var/log/messages。你看过了吗?这听起来像是权限问题。确保运行 tftpd-hpa 的用户可以读取文件/tftpboot/pxelinux.cfg/default。此外,确保其他用户无法写入该文件。您可以使用 ls 检查权限;输出的开头应类似于

$ ls -l /tftpboot/pxelinux.cfg/default
-rw-rw-r--

答案3

您需要在 /tftpboot/pxelinux.cfg 中创建一个指向 pxeconfig 文件的软链接。软链接应命名为 0A64491E。软链接应指向一个文件,在我们的数据中心,它指向 ../profiles(配置文件在哪里并不重要)

我们的 centos6 pxeconfig 的简单安装文件示例是

DEFAULT INSTALL
LABEL INSTALL
KERNEL centos6/x86_64/vmlinuz
APPEND utf8 load_ramdisk=1 root=/dev/ram nofb ks=http://servername/mrepo/kickstarts/centos6.ks ksdevice=eth0 initrd=centos6
/x86_64/initrd.img console=ttyS1,115200

这里的一些重要信息是确保您随后输出到正确的控制台会话。如果您没有正确完成此操作,您将只会看到闪烁的光标或只是一个 。

此外,如果您使用控制台通过管理网络连接到服务器,设置波特率(在上述情况下为 115200)有助于获得正确信息。

答案4

我遇到了同样的问题,禁用 SELinux 解决了这个问题。我正在运行 CentOS 6.5,并使用 DRBL/Clonezilla。

脚步:

  1. 打开/etc/selinux/config
  2. 改成SELINUX=enforcingSELINUX=disabled
  3. 重启

相关内容