我正在尝试使用它们各自的网络启动映像 (netboot.tar.gz) 为两个 Debian 版本 (stretch 和 buster) 设置 PXE 服务器,我将其提取到 TFTP 服务器根目录的子目录中:
├── debian
│ ├── buster
│ │ ├── debian-installer
│ │ ├── ldlinux.c32 -> debian-installer/i386/boot-screens/ldlinux.c32
│ │ ├── pxelinux.0 -> debian-installer/i386/pxelinux.0
│ │ ├── pxelinux.cfg -> debian-installer/i386/pxelinux.cfg
│ │ └── version.info
│ └── stretch
│ ├── debian-installer
│ ├── ldlinux.c32 -> debian-installer/i386/boot-screens/ldlinux.c32
│ ├── pxelinux.0 -> debian-installer/i386/pxelinux.0
│ ├── pxelinux.cfg -> debian-installer/i386/pxelinux.cfg
│ └── version.info
├── pxelinux.0
├── pxelinux.cfg
│ └── default
├── syslinux
│ ├── ldlinux.c32
│ ├── libutil.c32
│ └── menu.c32
目录 syslinux 包含从主机的 syslinux-common 包复制的文件。主机操作系统是 Raspbian stretch。
pxelinux.cfg/default 看起来像:
MENU TITLE PXE Remote Boot
DEFAULT syslinux/menu.c32
PROMPT 0
LABEL Debian_9_i386
MENU LABEL Debian 9 Stretch Network Installer (i386)
CONFIG debian/stretch/debian-installer/i386/pxelinux.cfg/default debian/stretch/
LABEL Debian_10_i386
MENU LABEL Debian 10 Buster Network Installer (i386)
CONFIG debian/buster/debian-installer/i386/pxelinux.cfg/default debian/buster/
在 PXE 客户端上启动 Debian stretch 一切正常。但尝试启动 Debian buster 时出现错误:
Undef symbol FAIL: init_fpu
Failed to load libcom32.c32
Failed to load COM32 file debian-installer/i386/boot-screens/vesamenu.c32
Stretch 和 buster 使用不兼容的 syslinux 版本。而且 PXE 在切换到 CONFIG 指定的工作目录 debian/buster 之前请求 ldlinux.c32。因此,使用的是 syslinux/ldlinux.c32,而不是 debian/buster/ldlinux.c32。以下是 TFTP 服务器日志的摘录:
in.tftpd[12160]: RRQ from 10.0.1.106 filename /ldlinux.c32
in.tftpd[12161]: RRQ from 10.0.1.106 filename //syslinux/ldlinux.c32
in.tftpd[12162]: RRQ from 10.0.1.106 filename /debian/buster/debian-installer/i386/pxelinux.cfg/default
in.tftpd[12163]: RRQ from 10.0.1.106 filename /debian/buster/debian-installer/i386/boot-screens/menu.cfg
...
in.tftpd[12184]: RRQ from 10.0.1.106 filename /debian/buster/debian-installer/i386/boot-screens/vesamenu.c32
in.tftpd[12185]: RRQ from 10.0.1.106 filename /debian/buster/libcom32.c32
in.tftpd[12186]: RRQ from 10.0.1.106 filename /debian/buster/debian-installer/i386/boot-screens/libcom32.c32
我该如何配置 PXE 才能使其使用“正确”版本的 ldlinux.c32?
答案1
随着来自 Syslinux 邮件列表的帮助,我找到了一个解决方案。我的示例配置现在使用 pxechn.c32,如下所示:
LABEL Debian_9_i386
MENU LABEL Debian 9 Stretch Network Installer (i386)
KERNEL pxechn.c32 debian/stretch/pxelinux.0
LABEL Debian_10_i386
MENU LABEL Debian 10 Buster Network Installer (i386)
KERNEL pxechn.c32 debian/buster/pxelinux.0
这需要 pxechn.c32 和 libcom32.c32。