Загрузочный сервер PXE
Установка загрузочного сервера PXE.
Содержание
1 Общая настройка
- Установите сервер Linux (см. Rocky Linux. Установка сервера).
2 Сетевые сервисы
2.1 tftp
- Установите сервер tftp:
1dnf -y install tftp-server
- Настройте брандмауэр:
- Активируйте сервис:
1systemctl enable --now tftp.socket
2.2 web-сервер
- Для снижения нагрузки на tftp будем загружать образы по http.
- Установим сервер nginx:
1dnf -y install nginx
- Настройте брандмауэр:
2.2.1 Конфигурация
- Создадим файл конфигурации
/etc/nginx/conf.d/pxe.conf
:
2.2.2 SELinux
- Зададим переключатели SELinux:
- Создадим файл с описанием политики
nginx-tftp.te
:1module nginx-tftp 1.0; 2 3require { 4 type httpd_t; 5 type cobbler_var_lib_t; 6 type tftpdir_rw_t; 7 class dir read; 8 class file { getattr open read }; 9 class lnk_file read; 10} 11 12#============= httpd_t ============== 13 14#!!!! This avc is allowed in the current policy 15allow httpd_t cobbler_var_lib_t:dir read; 16 17#!!!! This avc is allowed in the current policy 18allow httpd_t tftpdir_rw_t:dir read; 19 20#!!!! This avc is allowed in the current policy 21allow httpd_t tftpdir_rw_t:file { getattr open read }; 22allow httpd_t tftpdir_rw_t:lnk_file read;
- Применим его:
1semodule -i nginx-tftp.te
2.2.3 Запуск
- Запустим nginx:
1systemctl enable --now nginx.service
2.3 Настройки DHCP-сервера
2.3.1 Настройки сервера ISC DHCP
- Настройки для сервера ISC DHCP.
- Файл конфигурации
/etc/dhcp/dhcpd.conf
. - Настройка основных опций:
1option pxe-system-type code 93 = unsigned integer 16; 2option rfc3442-classless-static-routes code 121 = array of integer 8; 3option ms-classless-static-routes code 249 = array of integer 8; 4 5option space pxelinux; 6option pxelinux.magic code 208 = string; 7option pxelinux.configfile code 209 = text; 8option pxelinux.pathprefix code 210 = text; 9option pxelinux.reboottime code 211 = unsigned integer 32; 10option architecture-type code 93 = unsigned integer 16; 11option pxelinux.mtftp-ip code 1 = ip-address; 12option pxelinux.mtftp-cport code 2 = unsigned integer 16; 13option pxelinux.mtftp-sport code 3 = unsigned integer 16; 14option pxelinux.mtftp-tmout code 4 = unsigned integer 8; 15option pxelinux.mtftp-delay code 5 = unsigned integer 8;
- Необходимо также настроить
next_server
, который должен указывать на tftp-сервер:1next-server 10.100.0.1;
2.3.2 Настройки сервера ISC Kea DHCP
- Настройки для сервера ISC Kea DHCP.
- Файл конфигурации
/etc/kea/kea-dhcp4.conf
. - Необходимо также настроить
next_server
, который должен указывать на tftp-сервер:
3 Сетевые загрузчики
- Возможно использовать любой сетевой загрузчик:
- pxelinux
- ipxe
- grub2
3.1 pxelinux
3.1.1 Общая информация
- Часть загрузчика syslinux.
- Сайт: https://wiki.syslinux.org/wiki/index.php?title=PXELINUX
- ftp-сайт: https://mirrors.edge.kernel.org/pub/linux/utils/boot/syslinux/
3.1.2 Установка
- Скачаем файлы для pxelinux:
- Скопируем файлы в наш корень tftp:
1mkdir -p /var/lib/tftpboot/boot/pxelinux/{bios,efi64,efi32} 2find /tmp/syslinux-6.04-pre1/bios -regex '.*\(c32\|0\)$' -exec cp '{}' /var/lib/tftpboot/boot/pxelinux/bios/ \; 3find /tmp/syslinux-6.04-pre1/bios -name "memdisk" -type f -exec cp '{}' /var/lib/tftpboot/boot/pxelinux/bios/ \; 4find /tmp/syslinux-6.04-pre1/efi32 -regex '.*\(c32\|efi\)$' -exec cp '{}' /var/lib/tftpboot/boot/pxelinux/efi32 \; 5find /tmp/syslinux-6.04-pre1/efi64 -regex '.*\(c32\|efi\|e64\|elf\|lnx\)$' -exec cp '{}' /var/lib/tftpboot/boot/pxelinux/efi64 \;
3.1.3 Настройки DHCP-сервера
Настройки сервера ISC DHCP
- Настройки для сервера ISC DHCP.
- Файл конфигурации
/etc/dhcp/dhcpd.conf
. - Настройка файлов загрузки:
1option architecture-type code 93 = unsigned integer 16; 2class "pxeclients" { 3 match if substring (option vendor-class-identifier, 0, 9) = "PXEClient"; 4 if option architecture-type = 00:00 { 5 filename "/boot/pxelinux/bios/lpxelinux.0"; 6 } elsif option architecture-type = 00:09 { 7 filename "/boot/pxelinux/efi64/syslinux.efi"; 8 } elsif option architecture-type = 00:07 { 9 filename "/boot/pxelinux/efi64/syslinux.efi"; 10 } elsif option architecture-type = 00:06 { 11 filename "/boot/pxelinux/efi32/syslinux.efi"; 12 } else { 13 filename "/boot/pxelinux/bios/lpxelinux.0"; 14 } 15}
Настройки сервера ISC Kea DHCP
- Настройки для сервера ISC Kea DHCP.
- Файл конфигурации
/etc/kea/kea-dhcp4.conf
. - Настройка файлов загрузки:
1{ 2 "Dhcp4": { 3 "client-classes": [ 4 { 5 "name": "pxe-legacy", 6 "test": "option[93].hex == 0x0000", 7 "boot-file-name": "/boot/pxelinux/bios/lpxelinux.0" 8 }, 9 { 10 "name": "pxe-uefi", 11 "test": "option[93].hex == 0x0009 or option[93].hex == 0x0007", 12 "boot-file-name": "/boot/pxelinux/efi64/syslinux.efi" 13 } 14 ], 15 ... 16 } 17}
3.1.4 Файл конфигурации pxelinux
- Создать каталог
/var/lib/tftpboot/boot/pxelinux/pxelinux.cfg/
:1mkdir -p /var/lib/tftpboot/boot/pxelinux/pxelinux.cfg
- Создадим файл
/var/lib/tftpboot/boot/pxelinux/pxelinux.cfg/default
- Создадим символические ссылки для разного типа загрузки:
1ln -s /var/lib/tftpboot/boot/pxelinux/pxelinux.cfg /var/lib/tftpboot/boot/pxelinux/bios/pxelinux.cfg 2ln -s /var/lib/tftpboot/boot/pxelinux/pxelinux.cfg /var/lib/tftpboot/boot/pxelinux/efi64/pxelinux.cfg 3ln -s /var/lib/tftpboot/boot/pxelinux/pxelinux.cfg /var/lib/tftpboot/boot/pxelinux/efi32/pxelinux.cfg
3.2 ipxe
3.2.1 Настройки DHCP-сервера
- Настройки для сервера ISC DHCP.
- Файл конфигурации
/etc/dhcp/dhcpd.conf
. - Настройка файлов загрузки:
3.3 grub2
3.3.1 Установка
- Установим необходимые пакеты для grub2:
1dnf -y install grub2-efi-x64-modules grub2-tools-extra grub2-pc-modules
- Установим файлы в каталог tftpd:
- Можно также внедрить все модули в загружаемый файл (скорее, для отладки):
1grub2-mkimage -O x86_64-efi -o /var/lib/tftpboot/boot/grub2/x86_64-efi/core.efi --prefix='' /var/lib/tftpboot/boot/grub2/x86_64-efi/*.mod
3.3.2 Настройки DHCP-сервера
- Настройки для сервера ISC DHCP.
- Файл конфигурации
/etc/dhcp/dhcpd.conf
. - Настройка файлов загрузки:
1option architecture-type code 93 = unsigned integer 16; 2class "pxeclients" { 3 match if substring (option vendor-class-identifier, 0, 9) = "PXEClient"; 4 if option architecture-type = 00:07 { 5 filename "boot/grub2/x86_64-efi/core.efi"; 6 } else if option architecture-type = 00:08 { 7 filename "boot/grub2/x86_64-efi/core.efi"; 8 } else if option architecture-type = 00:09 { 9 filename "boot/grub2/x86_64-efi/core.efi"; 10 } else if option architecture-type = 00:0a { 11 # ArmHFP 12 filename "boot/grub2/armv7a-efi/core.efi"; 13 } else if option architecture-type = 00:0b { 14 # aarch64 15 filename "boot/grub2/aarch64-efi/core.efi"; 16 } else { 17 # BIOS boot 18 filename "boot/grub2/i386-pc/core.0"; 19 } 20}
3.3.3 Файл конфигурации grub
- Создадим основной файл конфигурации:
1touch /var/lib/tftpboot/boot/grub2/grub.cfg
- Создадим в нём базовую конфигурацию:
- Создадим символическую ссылку на этот файл в каждом каталоге, содержащим
core.*
: - Можно добавить дополнительные пункты (скорее для забавы):
4 Приложения
4.1 Memtest86+
- Сайт: https://memtest.org/
- Скачайте необходимую версию:
4.1.1 pxelinux
- Конфигурация для загрузки memtest86+ будет следующей:
4.1.2 grub
- Конфигурация для загрузки memtest86+ будет следующей:
5 Дистрибутивы Linux
5.1 Fedora
5.1.1 Grub
- Файл конфигурации будет следующим:
1submenu 'Fedora Linux' --class fedora --class gnu-linux --class gnu --class os { 2 3 menuentry 'Install Fedora Linux (EFI)' --class fedora --class gnu-linux --class gnu --class os { 4 linuxefi fedora-x86_64/vmlinuz inst.repo=http://dl.fedoraproject.org/pub/fedora/linux/releases/39/Everything/x86_64/os inst.stage2=http://dl.fedoraproject.org/pub/fedora/linux/releases/39/Everything/x86_64/os ip=dhcp 5 initrdefi fedora-x86_64/initrd.img 6 } 7 menuentry 'Install Fedora Linux (Classic)' --class fedora --class gnu-linux --class gnu --class os { 8 linux16 fedora-x86_64/vmlinuz inst.repo=http://dl.fedoraproject.org/pub/fedora/linux/releases/39/Everything/x86_64/os/ inst.stage2=http://dl.fedoraproject.org/pub/fedora/linux/releases/39/Everything/x86_64/os/ ip=dhcp 9 initrd16 fedora-x86_64/initrd.img 10 } 11 menuentry 'Install Fedora Linux (ARM)' --class fedora --class gnu-linux --class gnu --class os { 12 linux fedora-aarch64/vmlinuz inst.repo=http://dl.fedoraproject.org/pub/fedora/linux/releases/39/Everything/aarch64/os/ inst.stage2=http://dl.fedoraproject.org/pub/fedora/linux/releases/39/Everything/aarch64/os/ ip=dhcp 13 initrd fedora-aarch64/initrd.img 14 } 15}