|
Bog BOS: PXE: протокол, настройка ISC DHCP сервера, pxelinux, сервер установки Linux |
Последние изменения: |
Последнее изменение файла: 2024.04.02
Скопировано с www.bog.pp.ru: 2024.11.23
PXE (Preboot Execution Environment) - стандарт, предложенный Intel и Systemsoft (последняя версия 2.1 от 20 сентября 1999), для обеспечения возможности сетевой загрузки ОС. Является частью набора спецификаций Wired for Management (WfM 2.0). Используется для установки ОС по сети, восстановительных работ или для работы бездисковых компьютеров. Используются протоколы DHCP (с расширениями) и TFTP (с широковещательным расширением MTFTP). Сетевая карта должна иметь активированный PCI Option ROM (OpROM, firmware, прошивка, BootROM), содержащий начальный (first stage) загрузчик, а BIOS должна позволять загружаться по сети. Физически может находиться в составе BIOS на системной плате или выполнена программно (Etherboot (ныне gPXE), iPXE - записываются в OpROM сетевой карты или грузятся с флешки). Задача клиента PXE - загрузить NBP - Network Bootstrap Program (secondary stage), NBP загружает ОС. Примеры NBP - pxelinux, shimx64.efi (grub2), RIS (MS Remote Installation Services), wdsmgfw.efi. Задача сервера - обеспечить клиента данными об NBP. В стандарте PXE 2.1 ничего не говорится про UEFI (в RFC-4578 уже есть), IPv6, архитектуры отличные от IA-32. В стандарте UEFI описывается PXE 3, PXE для IPv6, загрузку по HTTP.
Используется для удалённой начальной установки ОС по сети (например, anaconda и kickstart) или починки сломавшейся (rescue). Раньше использовалась также для работы бездисковых рабочих станций.Стандарт описывает:
Стандарт предусматривает использование 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). Имеется также подпрограмма, сообщающая о необходимости аутентификации. Подробности не описываю, т.к. не использую и аппаратных возможностей не имею.
В тексте стандарта используется выражение "Proxy DHCP" - это не посредник DHCP (DHCP Relay), это дополнительный к незнающему о PXE серверу DHCP сервер, снабжающий PXE клиента информацией об опциях PXE в дополнение к обычному DHCP обмену. В моём случае не используется.
В тексте стандарта используется выражение "Boot Server" - это DHCP дополнительный сервер, снабжающий клиента PXE информацией о TFTP сервере и имени файла. В моём случае используетсяединый DHCP сервер, т.е. никаких отдельных Proxy и Boot.
PXE (BIOS и UEFI) специфическим образом использует следующие опции DHCP (RFC-4578):
Клиент должен запрашивать опции 128-135 (данные для NBP, не для PXE boot ROM). Формат определяется используемым NBP. Ожидает ли shim.efi (grub) увидеть здесь что-то? (pxelinux точно не ожидает),
NBP pxelinux специфическим образом использует следующие опции DHCP (RFC-5071):
PXE клиент не запрашивает эти параметры у сервера во время запроса параметров аренды (только 128-135), но сервер можно сконфигурировать для передачи незатребованных параметров (можно даже сконфигурировать имя на лету средствами ISC DHCP)
site-option-space "pxelinux"; option pxelinux.magic f1:00:74:7e; if exists dhcp-parameter-request-list { option dhcp-parameter-request-list = concat(option dhcp-parameter-request-list,d0,d1,d2,d3); } option pxelinux.configfile concat("http://путь/pxelinux.cfg/", binary-to-ascii(16, 8, ":", hardware)); ...PXE клиент передаёт их NBP (в кеше опций DHCP, незапрошенные?)
Разработчики pxelinux обещали заменить этот механизм. Но это вряд ли...
Последовательность действий PXE IPL (BIOS) если DHCP сервер не знает про PXE |
Последовательность событий при загрузке PXE IPL (BIOS), если DHCP сервер не знает про PXE:
Не использую и другим не советую.
Последовательность действий PXE IPL (BIOS) если DHCP сервер настроен для PXE |
Последовательность событий при загрузке PXE IPL (BIOS) при использовании DHCP сервера, понимающего PXE и совмещённого с PXE (?) Proxy DHCP (у меня клиент находится в другом VLAN, используется DHCP посредник, который перехватывает широковещательные запросы и передаёт их сконфигурированному серверу направленно):
Если используется отдельный Proxy DHCP сервер на том же компьютере, то он использует порт 4011/UDP, если на другом, то - порт 67/UDP. Клиент понимает необходимость обращения к отдельному Proxy DHCP серверу по наличию в ответе опции 60 ("PXEClient") и отсутствию опции 43 или имени файла NBP.
Последовательность действий PXE EFI_LOAD_FILE_PROTOCOL (UEFI) если DHCP сервер настроен для PXE |
Последовательность событий при загрузке PXE EFI_LOAD_FILE_PROTOCOL (UEFI) при использовании DHCP сервера, понимающего PXE и совмещённого с PXE (?) Proxy DHCP (клиент находится в том же VLAN, обходимся без посредника, широковещательно):
Если используется отдельный Proxy DHCP сервер на том же компьютере, то он использует порт 4011/UDP, если на другом, то - порт 67/UDP. Клиент понимает необходимость обращения к отдельному Proxy DHCP серверу по наличию в ответе опции 60 ("PXEClient") и отсутствию опции 43 или имени файла NBP.
Клиент UEFI PXE от Intel при DHCP запросе взводит бит требования широковещательного ответа и этот широковещательный ответ не всегда доходит до него (VLAN со внутренней маршрутизацией, при этом DHCP клиент CentOS 7.4 работает без проблем). Пришлось на время установки отключать DHCP Relay и ставить локальный DHCP сервер. Исправили?
Настройка ISC DHCP сервера для загрузки PXE клиентов (BIOS и UEFI) |
Для начала необходимо определить пространство имён 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}; # не используются #option space pxelinux; #option pxelinux.magic code 208 = string; #option pxelinux.configfile code 209 = text; #option pxelinux.pathprefix code 210 = text; #option pxelinux.reboottime code 211 = unsigned integer 32; # в DHCP 4.3 определено в option pxe-system-type option pxe-system-type code 93 = unsigned integer 16; #option architecture-type code 93 = unsigned integer 16;
В начале объявления (сеть, группа и т.д.) сделать условное задание параметров:
shared-network имя { # 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 6; # для сервера типа 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-shim; if option architecture-type = 00:07 { # в rfc4578#section-2.1 перепутаны 7 и 9: 0 - Intel x86PC, 7 - UEFI ByteCode, 9 - UEFI x86-64 # /boot/efi/EFI/centos/shim.efi (он же shimx64.efi, он же /boot/efi/EFI/BOOT/BOOTX64.EFI, настройки в /boot/efi/EFI/centos/BOOT.CSV (BOOTX64.CSV)) из пакета shim-x64 в CentOS 7 # /boot/efi/EFI/centos/grubx64.efi из пакета grub2-efi в CentOS 7 filename = "uefi/shimx64.15.8.efi"; } else { # из system-config-netboot-cmd в CentOS 5 или syslinux-tftpboot в CentOS 6/7 # filename "linux-install/pxelinux.0"; filename "linux-install/lpxelinux.604.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 конец списка
При использовании системных плат с BIOS (не UEFI) под Linux в качестве NBP обычно используется pxelinux (часть проекта syslinux), который загружает образы ядра и initrd и передаёт управление ядру. Вместо ядра Linux может быть загружена любая совместимая с используемым форматом программа (например, memdisk, которая в свою очередь позволяет загрузить DOS).
Развитие sylinux останвилось в 2014 году (2014-10-06 : Syslinux 6.03), версия 6.04 не завершена.
Описываю только необходимый минимум возможностей ОС syslinux для выбора из нескольких вариантов ядра с параметрами и initrd.
Сервер TFTP должен поддерживать tsize. MTFTP не поддерживается. Рекомендуется отключить blksize (-r blksize), т.к. многие клиенты PXE неправильно его используют.
Имя файла (включая относительную часть) не может иметь длину более 127 символов.
При неудаче загрузки компьютер сбрасывается через 5 минут.
Начиная с версии 5.10 pxelinux.0 (lpxelinux.0?) поддерживает HTTP и FTP (опциями DHCP задаётся URL конфигурационного файла). Утилита pxelinux-option позволяет встроить URL прямо в код pxelinux.0 (нет в rpm).
Структура каталога linux-install (как настроено в предыдущей главе) в корне TFTP сервера (можно изменить опцией DHCP pxelinux.pathprefix - 210), является начальным рабочим каталогом относительно которого рассматриваются относительные имена:
Конфигурационный файл является текстовым (UNIX или DOS), пустые строки и строки, начинающиеся с "#" игнорируются, первое слово строки - имя команды (регистронезависим), длина строки не более 512 байт, делится на разделы командами label:
label reboot com32 reboot.c32 append --warm
Управляющие клавиши:
Отличия версий syslinux в части работы pxelinux:
Развёртывание инфраструктуры для загрузки установщика Linux с помощью pxelinux (RHEL/CentOS) |
Последовательность подготовки обратна последовательности загрузки:
... url --url=ftp://имя-сервера/pub/CentOS7.9/base/x86_64 ... # общие настройки для группы серверов с одинаковым назначением %include ftp://имя-сервера/pub/kickstarts/версия-ОС.назначение-сервера.systemd.include %include ... ...
файл default (на незнакомый сервер ничего не устанавливаем): default local timeout 100 totaltimeout 1000 prompt 1 display msgs/nodefault.msg label local localboot -1 label memtest kernel memtest/memtest label reboot com32 reboot.c32 файл с именем в формате IP-адреса (например, "C0A8025B") для установки конкретного сервера (длина строки не более 512 байт!): default local timeout 100 totaltimeout 1000 prompt 1 display msgs/CentOS79.msg label local localboot -1 label memtest kernel memtest/memtest label reboot com32 reboot.c32 label rescue kernel ftp://имя-сервера/pub/CentOS7.9/base/x86_64/images/pxeboot/vmlinuz append initrd=ftp://имя-сервера/pub/CentOS7.9/base/x86_64/images/pxeboot/initrd.img ramdisk_size=16000 bond=bond0:enp131s0f0,enp131s0f1:mode=balance-rr ip=:::::bond0:dhcp:9000 rd.ipv6.disable lang=en_US.UTF-8 rd.vconsole.unicode linux inst.rescue inst.repo=ftp://имя-сервера/pub/CentOS7.9/base/x86_64 ks=ftp://имя-сервера/pub/kickstarts/rescue79.cfg inst.nokill inst.sshd inst.syslog=адрес:514 label install kernel ftp://имя-сервера/pub/CentOS7.9/base/x86_64/images/pxeboot/vmlinuz append initrd=ftp://имя-сервера/pub/CentOS7.9/base/x86_64/images/pxeboot/initrd.img ramdisk_size=16000 bond=bond0:enp131s0f0,enp131s0f1:mode=balance-rr ip=:::::bond0:dhcp:9000 rd.ipv6.disable lang=en_US.UTF-8 rd.vconsole.unicode inst.repo=ftp://имя-сервера/pub/CentOS7.9/base/x86_64 inst.geoloc=0 selinux=0 inst.sshd inst.syslog=адрес:514 inst.loglevel=info inst.kdump_addon=off inst.selinux=0 inst.ks=ftp://имя-сервера/pub/kickstarts/полное-имя.версия-ОС.cfg nodmraid
При описанных выше настройках PXE загрузчик 10 секунд ждёт нажатия клавиши F8, затем ждёт 10 секунд выбора сервера загрузки (Linux), затем lpxelinux.0 ищет файл с настройками по IP адресу клиента:
Последовательность подготовки инфраструктуры для загрузки установщика Linux с помощью UEFI и GRUB 2 на x86_64 обратна последовательности загрузки:
... url --url=ftp://имя-сервера/pub/CentOS7.9/base/x86_64 # ftp://имя-сервера/pub/RockyLinux8.9/BaseOS/x86_64/os ... # общие настройки для группы серверов с одинаковым назначением %include ftp://имя-сервера/pub/kickstarts/версия-ОС.назначение-сервера.systemd.include %include ... ...
# простой сервер с eno1 и eno2 (возможно bond0 из них) # в UEFI из сетей оставлен только eno1 в виде efinet1 set timeout=60 net_get_dhcp_option host ${net_default_interface} 12 string set card="eno1" set card2="eno2" menuentry "rescue CentOS 7.9 ${net_default_interface} bond ${card} ${card2} ${host}" { linuxefi uefi/CentOS79.vmlinuz ramdisk_size=16000 bond=bond0:${card},${card2}:mode=balance-rr ip=:::::bond0:dhcp:9000 rd.ipv6.disable inst.syslog=адрес:514 inst.loglevel=info lang=en_US.UTF-8 rd.locale.LANG=en_US.UTF-8 rd.vconsole.keymap=us rd.vconsole.font=latarcyrheb-sun16 rd.vconsole.unicode inst.rescue selinux=0 inst.repo=ftp://ftp/pub/CentOS7.9/base/x86_64 ks=ftp://ftp/pub/kickstarts/rescue79.cfg inst.sshd kernel.ixgbe.allow_unsupported_sfp=1 mitigations=off rd.plymouth=0 plymouth.enable=0 initrdefi uefi/CentOS79.initrd } menuentry "rescue CentOS 7.9 ${net_default_interface} ${card} ${host}" { linuxefi uefi/CentOS79.vmlinuz ramdisk_size=16000 inst.repo=ftp://ftp/pub/CentOS7.9/base/x86_64 ip=:::::${card}:dhcp:9000 rd.ipv6.disable inst.syslog=адрес:514 inst.loglevel=info lang=en_US.UTF-8 rd.locale.LANG=en_US.UTF-8 rd.vconsole.keymap=us rd.vconsole.font=latarcyrheb-sun16 rd.vconsole.unicode inst.rescue selinux=0 inst.repo=ftp://ftp/pub/CentOS7.9/base/x86_64 ks=ftp://ftp/pub/kickstarts/rescue79.cfg inst.sshd kernel.ixgbe.allow_unsupported_sfp=1 mitigations=off rd.plymouth=0 plymouth.enable=0 initrdefi uefi/CentOS79.initrd } menuentry reboot { reboot } menuentry "BIOS/UEFI setup" { fwsetup } menuentry memtest { chainloader uefi/memtest/BOOTX64.MEMTEST86-74.EFI }
set card="ens118f0" set card2="ens106f0" source uefi/grub.cfg-CentOS79bondили
set card="ens118f0" set card2="ens106f0" source uefi/grub.cfg-RockyLinux89bond
set timeout=60 net_get_dhcp_option host ${net_default_interface} 12 string menuentry "rescue CentOS 7.9 ${net_default_interface} bond ${card} ${card2} ${host}" { linuxefi uefi/CentOS79.vmlinuz ramdisk_size=16000 bond=bond0:${card},${card2}:mode=balance-rr ip=:::::bond0:dhcp:9000 rd.ipv6.disable inst.syslog=адрес:514 inst.loglevel=info lang=en_US.UTF-8 rd.locale.LANG=en_US.UTF-8 rd.vconsole.keymap=us rd.vconsole.font=latarcyrheb-sun16 rd.vconsole.unicode inst.rescue selinux=0 inst.repo=ftp://ftp/pub/CentOS7.9/base/x86_64 ks=ftp://ftp/pub/kickstarts/rescue79.cfg inst.sshd kernel.ixgbe.allow_unsupported_sfp=1 mitigations=off rd.plymouth=0 plymouth.enable=0 initrdefi uefi/CentOS79.initrd } menuentry "rescue CentOS 7.9 ${net_default_interface} ${card} ${host}" { linuxefi uefi/CentOS79.vmlinuz ramdisk_size=16000 inst.repo=ftp://ftp/pub/CentOS7.9/base/x86_64 ip=:::::${card}:dhcp:9000 rd.ipv6.disable inst.syslog=адрес:514 inst.loglevel=info lang=en_US.UTF-8 rd.locale.LANG=en_US.UTF-8 rd.vconsole.keymap=us rd.vconsole.font=latarcyrheb-sun16 rd.vconsole.unicode inst.rescue selinux=0 inst.repo=ftp://ftp/pub/CentOS7.9/base/x86_64 ks=ftp://ftp/pub/kickstarts/rescue79.cfg inst.sshd kernel.ixgbe.allow_unsupported_sfp=1 mitigations=off rd.plymouth=0 plymouth.enable=0 initrdefi uefi/CentOS79.initrd } menuentry "install CentOS 7.9 ${net_default_interface} bond0 ${card} ${card2} ${host}" { linuxefi uefi/CentOS79.vmlinuz ramdisk_size=16000 selinux=0 bond=bond0:${card},${card2}:mode=balance-rr ip=:::::bond0:dhcp:9000 rd.ipv6.disable inst.syslog=адрес:514 inst.loglevel=info lang=en_US.UTF-8 rd.locale.LANG=en_US.UTF-8 rd.vconsole.keymap=us rd.vconsole.font=latarcyrheb-sun16 rd.vconsole.unicode inst.geoloc=0 inst.lang=en_US.UTF-8 inst.keymap=us inst.sshd ks=ftp://ftp/pub/kickstarts/${host}.CentOS79.cfg kernel.ixgbe.allow_unsupported_sfp=1 inst.kdump_addon=off inst.selinux=0 inst.gpt mitigations=off rd.plymouth=0 plymouth.enable=0 initrdefi uefi/CentOS79.initrd } menuentry "install CentOS 7.9 ${net_default_interface} ${card} ${host}" { linuxefi uefi/CentOS79.vmlinuz ramdisk_size=16000 selinux=0 ip=:::::${card}:dhcp:9000 rd.ipv6.disable inst.syslog=адрес:514 inst.loglevel=info lang=en_US.UTF-8 rd.locale.LANG=en_US.UTF-8 rd.vconsole.keymap=us rd.vconsole.font=latarcyrheb-sun16 rd.vconsole.unicode inst.geoloc=0 inst.lang=en_US.UTF-8 inst.keymap=us inst.sshd ks=ftp://ftp/pub/kickstarts/${host}.CentOS79.cfg kernel.ixgbe.allow_unsupported_sfp=1 inst.kdump_addon=off inst.selinux=0 inst.gpt mitigations=off rd.plymouth=0 plymouth.enable=0 initrdefi uefi/CentOS79.initrd # inst.xdriver=vesa inst.resolution=1280x800 rd.driver.blacklist=nouveau rdblacklist=nouveau nouveau.modeset=0 menuentry "memtest ${host}" { chainloader uefi/memtest/BOOTX64.MEMTEST86-74.EFI } menuentry reboot { reboot } menuentry "BIOS/UEFI setup" { fwsetup} }или для RockyLinux 8
set timeout=60 net_get_dhcp_option host ${net_default_interface} 12 string menuentry "rescue RockyLinux 8.9 ${net_default_interface} bond ${card} ${card2} ${host}" { linuxefi uefi/RockyLinux89.vmlinuz ramdisk_size=16000 bond=bond0:${card},${card2}:mode=balance-rr ip=:::::bond0:dhcp:9000 rd.ipv6.disable inst.syslog=192.168.152.24:514 inst.loglevel=info inst.lang=en_US.UTF-8 rd.locale.LANG=en_US.UTF-8 rd.vconsole.keymap=us rd.vconsole.font=latarcyrheb-sun16 rd.vconsole.unicode inst.rescue inst.selinux=0 inst.repo=ftp://ftp/pub/RockyLinux8.9/BaseOS/x86_64/kickstart inst.ks=ftp://ftp/pub/kickstarts/rescue89.cfg inst.sshd kernel.ixgbe.allow_unsupported_sfp=1 mitigations=off rd.plymouth=0 plymouth.enable=0 initrdefi uefi/RockyLinux89.initrd } menuentry "rescue RockyLinux 8.9 ${net_default_interface} ${card} ${host}" { linuxefi uefi/RockyLinux89.vmlinuz ramdisk_size=16000 ip=:::::${card}:dhcp:9000 rd.ipv6.disable inst.syslog=192.168.152.24:514 inst.loglevel=info inst.lang=en_US.UTF-8 rd.locale.LANG=en_US.UTF-8 rd.vconsole.keymap=us rd.vconsole.font=latarcyrheb-sun16 rd.vconsole.unicode inst.rescue inst.selinux=0 inst.repo=ftp://ftp/pub/RockyLinux8.9/BaseOS/x86_64/kickstart inst.ks=ftp://ftp/pub/kickstarts/rescue89.cfg inst.sshd kernel.ixgbe.allow_unsupported_sfp=1 mitigations=off rd.plymouth=0 plymouth.enable=0 initrdefi uefi/RockyLinux89.initrd } menuentry "install RockyLinux 8.9 ${net_default_interface} bond0 ${card} ${card2} ${host}" { linuxefi uefi/RockyLinux89.vmlinuz ramdisk_size=16000 selinux=0 bond=bond0:${card},${card2}:mode=balance-rr ip=:::::bond0:dhcp:9000 ipv6.disable rd.ipv6.disable inst.syslog=192.168.152.24:514 inst.loglevel=info lang=en_US.UTF-8 rd.locale.LANG=en_US.UTF-8 rd.vconsole.keymap=us rd.vconsole.font=latarcyrheb-sun16 rd.vconsole.unicode inst.geoloc=0 inst.lang=en_US.UTF-8 inst.keymap=us inst.sshd inst.ks=ftp://ftp/pub/kickstarts/${host}.RockyLinux89.cfg kernel.ixgbe.allow_unsupported_sfp=1 inst.kdump_addon=off inst.selinux=0 inst.gpt mitigations=off rd.plymouth=0 plymouth.enable=0 [inst.nokill inst.debug] initrdefi uefi/RockyLinux89.initrd } menuentry "install RockyLinux 8.9 ${net_default_interface} ${card} ${host}" { linuxefi uefi/RockyLinux89.vmlinuz ramdisk_size=16000 selinux=0 ip=:::::${card}:dhcp:9000 ipv6.disable rd.ipv6.disable inst.syslog=192.168.152.24:514 inst.loglevel=info lang=en_US.UTF-8 rd.locale.LANG=en_US.UTF-8 rd.vconsole.keymap=us rd.vconsole.font=latarcyrheb-sun16 rd.vconsole.unicode inst.geoloc=0 inst.lang=en_US.UTF-8 inst.keymap=us inst.sshd inst.ks=ftp://ftp/pub/kickstarts/${host}.RockyLinux89.cfg kernel.ixgbe.allow_unsupported_sfp=1 inst.kdump_addon=off inst.selinux=0 inst.gpt mitigations=off rd.plymouth=0 plymouth.enable=0 [inst.nokill inst.debug] initrdefi uefi/RockyLinux89.initrd # inst.xdriver=vesa inst.resolution=1280x800 rd.driver.blacklist=nouveau rdblacklist=nouveau nouveau.modeset=0 } menuentry "memtest ${host}" { chainloader uefi/memtest/BOOTX64.MEMTEST86-74.EFI } menuentry reboot { reboot } menuentry "BIOS/UEFI setup" { fwsetup}
При описанных выше настройках PXE загрузчик 10 секунд ждёт нажатия клавиши F8, затем ждёт 10 секунд выбора сервера загрузки (Linux), затем PXE клиент загружает shim, shim загружает GRUB, GRUB ищет уникальный файл с настройками по IP адресу клиента или общий grub.cfg:
|
Bog BOS: PXE: протокол, настройка ISC DHCP сервера, pxelinux, сервер установки Linux |
Последние изменения: |