Моя существующая сетевая среда обеспечивает следующее:
- DHCP-сервер, который отправляет PXE-клиентов на определенный TFTP-сервер
- TFTP-сервер с файлом SYSLINUX "pxelinux.0" для загрузки
Установка SYSLINUX по умолчанию устанавливает тайм-аут «загрузки с локального диска», что позволяет существующим клиентам корректно перезагружать систему, а также предоставляет возможность загрузки в среду восстановления или подготовки.
Я тестирую новую среду подготовки, которая находится на другом сервере TFTP, нежели тот, на который указывает DHCP-сервер. Существующие клиенты зависят от текущей среды, но я хотел бы направить тестовых клиентов на новый сервер TFTP для подготовки.
В идеале я хотел бы иметь возможность использовать определенную опцию меню из командной строки SYSLINUX, которая заставила бы клиент загружаться с другого (жестко заданного, а не предоставленного DHCP-сервером) TFTP-сервера.
Я попытался установить пользовательский образ gPXE как опцию меню в SYSLINUX. Пользовательский образ (повторно) получил адрес DHCP и перешел на жестко закодированный сервер TFTP, но в нем отсутствует часть, которую, как я думаю, gPXE не способен выполнить.
Новая система подготовки основана на Cobbler и зависит от обычной последовательности PXE, где клиент ищет файл, названный по его MAC-адресу, прежде чем остановиться на менее конкретном и в конечном итоге на общем файле. Насколько я могу судить, похоже, что gPXE не способен выполнить эту последовательность загрузки на основе MAC-адреса.
Может кто-нибудь подскажет другой способ? Я уже несколько дней ломаю голову над этой проблемой. Заранее спасибо!
решение1
Цепочка PXE/TFTP на одном сервере
Установите другой загрузчик PXE в качестве ядра.
Это пример, который я использовал для загрузки загрузчика BSD PXE по цепочке из загрузчика Linux PXE.
LABEL openbsd
MENU LABEL ^OpenBSD 3.9
KERNEL openbsd_3.9/pxeboot.0
Цепочка PXE/TFTP с другим сервером
pxechain.com
используется для последовательной загрузки других PXE-серверов.
pxechain.com
доступен в syslinux-common
пакете в Debian/Ubuntu илиархив проекта syslinuxпод другим именем файла pxechn.c32
.
Пример:
LABEL pxeserver2
menu label Switch to 2nd PXE server...
kernel pxechain.com
append 192.168.10.254::pxelinux.0
Пример2:(БлагодаряАкула) Если имя файла конфигурации pxelinux и/или путь к нему различаются на обоих серверах pxe, вам следует явно определить их с помощью опций -p и -c, в противном случае это не сработает (будет попытка использовать значение, определенное dhcp, которое использовалось для текущей загрузки).
В конфигурации сервера DC-ISO2:
LABEL DC-ISO1
MENU LABEL DC-ISO1 (BIOS mode)
KERNEL pxechn.c32
APPEND 192.168.1.1::pxelinux.0 -c default -p /
TEXT HELP
Boot the legacy dc-iso1 menu in bios mode.
ENDTEXT
На старом сервере DC-ISO1 конфигурация:
LABEL DC-ISO2
MENU LABEL DC-ISO2 (BIOS mode)
KERNEL pxechn.c32
APPEND 192.168.1.2::/configs/pxelinux.0 -p /configs/ -c bios.cfg
TEXT HELP
Boot the new dc-iso2 menu in bios mode.
ENDTEXT
Технически теперь вы можете даже отключить DHCP-сервер DC-ISO1 (но не TFTP), и вы всегда будете сначала загружаться с DC-ISO2, при этом имея возможность переключаться между меню обоих серверов.
решение2
Возьмем pxelinux.0 из Ubuntu 10.4 LTS. Он пройдет "нормальную" итерацию: MAC - IP в HEX - ... по умолчанию.
Было бы проще указать вашему DHCP-серверу НЕ отвечать на определенные запросы и настроить другой DHCP в той же сети (неавторитетный), который будет отвечать на запросы вашего тестового сервера (и не отвечать ни на что другое).