Назад | Перейти на главную страницу

Как настроить каскадный PXE-сервер?

Я пытаюсь настроить PXE-сервер для двух выпусков Debian (stretch и buster), используя их соответствующие сетевые загрузочные образы (netboot.tar.gz), которые я извлек в подкаталоги корневого каталога 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/

Загрузка Debian stretch на клиенте PXE работает нормально. Но попытка загрузить 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 запрашивает ldlinux.c32 перед переключением в рабочий каталог debian / buster, указанный в CONFIG. Поэтому вместо debian / buster / ldlinux.c32 используется syslinux / 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?

С добрым помощь от людей в списке рассылки 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.