|
Bog BOS: PXE: протокол, настройка ISC DHCP сервера, pxelinux, сервер установки Linux |
|
Последние изменения: |
Последнее изменение файла: 2008.02.20
Скопировано с www.bog.pp.ru: 2012.02.04
PXE (Preboot Execution Environment) - стандарт, предложенный Intel и Systemsoft (версия 2.1 от 20 сентября 1999, описаны только 32-битные системы), для обеспечения возможности сетевой загрузки ОС. Является частью набора спецификаций Wired for Management (WfM 2.0). Используется для установки ОС по сети, восстановительных работ или для работы бездисковых компьютеров. Используются протоколы DHCP (с расширениями) и TFTP. Сетевая карта должна иметь ROM (firmware), с записанным на него PXE-загрузчиком (хотя см. Etherboot), а BIOS должна позволять загружаться по сети.
Стандарт описывает:
Стандарт предусматривает использование MTFTP (multicast TFTP) для загрузки файлов (не описываю, т.к. не использую).
Для проверки правильности NBP PXE загрузчик может запросить дополнительный файл, содержащий цифровую подпись NBP (сертификаты в формате X.509v3), и использовать API работы с цифровой подписью (BIS - Boot Integrity Services API). Адреса подпрограмм данного API должны содержаться в BIOS, их адреса и параметры задаются в SMBIOS (адрес блока описания п/п: dmidecode -t 31 -u; нет этого блока - нет BIS). В частности, имеется п/п, возвращающая список поддерживаемых алгоритмов шифрования и хеширования, а также длин ключей шифрования (обязательны DSA-1024/SHA-1 и RSA-512/MD5). Имеется также п/п, сообщающая о необходимости аутентификации. Подробности не описываю, т.к. не использую.
PXE специфическим образом использует следующие опции DHCP:
Последовательность событий при загрузке PXE IPL, если сервер не знает про PXE:
Последовательность действий при использовании DHCP сервера, понимающего PXE и совмещённого с Proxy DHCP:
Если используется отдельный Proxy DHCP сервер на том же компьютере, то он использует порт 4011/UDP, если на другом, то - порт 67/UDP. Клиент понимает необходимость обращения к отдельному Proxy DHCP серверу по наличию в ответе опции 60 ("PXEClient") и отсутствию опции 43 или имени файла NBP.
Для начала необходимо определить пространство имён PXE:
allow booting;
option space PXE;
option PXE.mtftp-ip code 1 = ip-address;
option PXE.mtftp-cport code 2 = unsigned integer 16;
option PXE.mtftp-sport code 3 = unsigned integer 16;
option PXE.mtftp-tmout code 4 = unsigned integer 8;
option PXE.mtftp-delay code 5 = unsigned integer 8;
option PXE.discovery-control code 6 = unsigned integer 8;
option PXE.discovery-mcast-addr code 7 = ip-address;
# к сожалению, нельзя определить последовательность записей,
# придётся инкапсулировать вручную
#option PXE.boot-server-list code 8 = seq {unsigned integer 16, unsigned integer 8, array of ip-address};
option PXE.boot-server-list code 8 = string;
# к сожалению, нельзя определить последовательность записей,
# придётся инкапсулировать вручную
#option PXE.menu code 9 = seq {unsigned integer 16, unsigned integer 8, text};
option PXE.menu code 9 = string;
option PXE.prompt code 10 = {unsigned integer 8, text};
option PXE.boot-server-type code 71 = {unsigned integer 16, unsigned integer 16};
В начале объявления (сеть, группа и т.д.) сделать условное задание параметров:
shared-network имя {
authoritative;
# MS Windows BINLSVC не умеет возвращать тип сервера загрузки,
# поэтому клиент PXE не воспринимает его как свой
# RIS сервер с включённой защитой не отдаёт TFTP файл, если не отработал BINLSVC
# такие случаи необходимо обслуживать "по-простому"
# if hardware = 01:xx:xx:xx:xx:xx:xx {
# next-server адрес-RIS-сервера;
# filename "RemoteInstall\\OSChooser\\I386\\startrom.com";
# } elsif ...
# делаем из ISC DHCP сервера два разных BOOT сервера
if substring (option vendor-class-identifier, 0, 9) = "PXEClient" {
vendor-option-space PXE;
option vendor-class-identifier "PXEClient:Arch:00000:UNDI:002001";
# предлагаем оператору выбрать BOOT сервер и ждём 10 секунд
option PXE.prompt 10 "Select Boot Server";
# для сервера типа 0000 приглашение "Local"
# для сервера типа 804c (0x8000+'L') приглашение "LIS (Linux Install Server)"
# для сервера типа 8057 (0x8000+'W') приглашение "RIS (MS Windows Install)"
option PXE.menu 00:00:05:4c:6f:63:61:6c:80:4c:1a:4c:49:53:20:28:4c:69:6e:75:78:20:49:6e:73:74:61:6c:6c:20:53:65:72:76:65:72:29:80:57:18:52:49:53:20:28:4d:53:20:57:69:6e:64:6f:77:73:20:49:6e:73:74:61:6c:6c:29;
# запретить multicast
option PXE.discovery-control 2;
# для сервера типа 804c (0x8000+'L') один BOOT сервер x.y.z.v (адрес нашего DHCP сервера)
# для сервера типа 8057 (0x8000+'W') один BOOT сервер x.y.z.v (адрес нашего DHCP сервера)
option PXE.boot-server-list 80:4c:01:xx:yy:zz:vv:80:57:01:xx:yy:zz:vv;
# ветвление в зависимости от выбора типа BOOT сервера, сделанного оператором
if substring (option vendor-encapsulated-options, 3, 1) = "W" {
next-server адрес-RIS-сервера;
filename "RemoteInstall\\OSChooser\\I386\\startrom.com";
option PXE.boot-server-type 32855 0;
} else {
next-server адрес-TFTP-сервера-с-pxelinux;
filename "linux-install/pxelinux.0";
option PXE.boot-server-type 32844 0;
}
}
}
Дешифровка "загадочной" строки из руководства pxelinux:
09: меню 0f: размер меню 80:00: нестандартный сервер загрузки 0c:4e:65:74:77:6f:72:6b:20:62:6f:6f:74:Network boot 0a: текст приглашения оператору 07: размер приглашения 00: секунд ожидания (немедленно выбрать первый пункт) 50:72:6f:6d:70:74: Prompt 06: способ обнаружения загрузочного сервера 01: размер 02: не принимать ответы от серверов не в списке 08: список серверов загрузки 03: размер списка 80:00: нестандартный сервер загрузки 00: число серверов (принимать любой адрес) 47: тип сервера загрузки и уровень 04: размер 80:00: нестандартный сервер загрузки 00:00: уровень 0 ff конец списка
В Linux в качестве NBP обычно используется pxelinux (часть проекта syslinux), который загружает образы ядра и initrd и передаёт управление ядру. Вместо ядра Linux может быть загружена любая совместимая с используемым форматом программа (например, memdisk, которая в свою очередь позволяет загрузить DOS). Имеется вариант pxelinux, умеющий загружать образы в формате NBI (Network Bootable Image) - образы дискеты с DOS или ядро Linux вместе с корневой файловой системой (для изготовления .nbi используется пакет NetBoot).
Сам загрузчик находится в файле /tftpboot/linux-install/pxelinux.0, конфигурационные файлы в каталоге /tftpboot/linux-install/pxelinux.cfg/ (имя файла из каталога выбирается исходя из его IP адреса или берётся файл default), тексты сообщений в каталоге /tftpboot/linux-install/msgs/. Параметры для программы установки anaconda пишутся в строках append в конфигурационном файле.
Сервер TFTP должен поддерживать tsize.
Последовательность подготовки обратна последовательности загрузки:
pxeos -a -i 'install Fedora 8 x86_64' -p HTTP -D 0 -s имя-сервера -L локальный-URL Fedora8-x86_64-install
|
Bog BOS: PXE: протокол, настройка ISC DHCP сервера, pxelinux, сервер установки Linux |
|
Последние изменения: |