Вопрос или проблема
Я работаю над продолжающимся проектом, который включает в себя сервер, предоставляющий функциональность PXE и HTTP для установки различных операционных систем.
К сожалению, я не могу углубляться в детали, но базовая настройка будет включать в себя несколько клиентских компьютеров в одной сети, где работает DHCP-сервер на базе Windows, а сервер Netboot прослушивает пакеты PXE/HTTP загрузки в указанной сети, когда он включен.
Желаемый результат заключается в том, что сервер может быть сценарием, так что веб GUI может позволить динамически монтировать и распределять ISO-образа ОС, т.е. администратор загружает Ubuntu-24.04-Desktop.iso в веб GUI, и когда монтирование инициируется, ISO монтируется на сервере и становится загрузочным через меню загрузки, предоставляемое PXE/HTTP, после чего можно установить операционную систему.
Из-за природы проекта предоставленный ISO-файл необходимо загружать, так как клиенты не будут иметь WAN-доступ в сети PXE, поэтому сетевые установочные ISO не применимы в этом сценарии.
На данный момент мне удалось создать сервер PXE и HTTP, который может обслуживать меню загрузки syslinux, GRUB или iPXE с разной степенью успеха, а также isc-dhcp-server, выполняющий прослушивание PXE. HTTP-прослушивание не работало в моих испытаниях, поэтому любая загрузка по HTTP вручную указывала клиенту на загрузочный файл на HTTP-сервере.
GRUB не имел большого успеха, так как я не мог заставить работать загрузку по HTTP. Syslinux имел больше успеха, но все еще не идеально. iPXE, вероятно, будет моим выбором, но с вашей поддержкой я смогу переключаться между ними.
На этом этапе я мог дойти, когда, например, загружался с содержимого Ubuntu-24.04, используя vmlinuz и initrd, я сталкивался с различными проблемами, в основном сводящимися к невозможности найти живую файловую систему с ошибкой Casper-Premount, невозможностью смонтировать живую файловую систему в такую-то папку, как /dev/ram0, или невозможностью завершить загрузку, что приводит меня в оболочку busybox.
Загрузка Windows – это то, с чем мне не удалось добиться успеха, я пробовал оба метода memdisk и wimboot, в основном не мог найти ошибки файла.
Не знаю, где я ошибаюсь, похоже, я в основном создал начальную часть серверов, но что-то не настроил правильно, так как клиентский ПК может найти сервер PXE/HTTP, загрузить указанный файл (iPXE.efi/syslinux.efi/grubx64.efi) и позволить клиентскому ПК выбрать ОС, но затем, когда опция загружается, файлы загружаются с сервера, но затем не могут быть загружены с клиента.
Любая помощь будет оценена, и я попробую любые предложения, которые я не пробовал.
Ответ или решение
Создание сервера на базе Ubuntu с функциями PXE и HTTPBoot
Ваша задача по созданию сервера, обеспечивающего функциональность PXE и HTTPBoot для установки различных операционных систем, требует тщательного подхода к настройке сетевой среды, а также взаимодействия между сервером и клиентами. В данной статье мы рассмотрим основные шаги, необходимые для успешной настройки такого сервера, учитывая различные аспекты и возможные сложности, с которыми вы столкнулись.
Подготовка сервера
-
Установка необходимых пакетов:
Для начала вам потребуется установить несколько пакетов, которые обеспечивают работу PXE и HTTP-сервера. Используйте команды:sudo apt update sudo apt install isc-dhcp-server tftpd-hpa apache2 syslinux
-
Настройка DHCP-сервера:
Пакетisc-dhcp-server
будет необходим для предоставления клиентам IP-адресов и указания на PXE-образы. В/etc/dhcp/dhcpd.conf
добавьте следующее:subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.50 192.168.1.100; option routers 192.168.1.1; option domain-name-servers 8.8.8.8; option broadcast-address 192.168.1.255; option pxe-service-code 0x0; option pxe-service-selector 1; option pxe-bootfile-name "pxelinux.0"; next-server 192.168.1.10; # Укажите IP вашего сервера }
-
Настройка TFTP-сервера:
Убедитесь, что TFTP-сервер настроен. В файле/etc/default/tftpd-hpa
убедитесь, что у вас установлены следующие параметры:TFTP_DIRECTORY="/var/lib/tftpboot" TFTP_OPTIONS="--secure"
Затем создайте директорию для TFTP и скопируйте туда необходимые файлы:
sudo mkdir /var/lib/tftpboot sudo cp /usr/lib/syslinux/modules/bios/pxelinux.0 /var/lib/tftpboot/
-
Настройка HTTP-сервера:
Apache будет вашим HTTP-сервером для распространения ISO-образов. Переместите ваши ISO-файлы в директорию, доступную через Apache, например,/var/www/html/iso
, и настройте права доступа:sudo mkdir /var/www/html/iso sudo cp /path/to/Ubuntu-24.04-Desktop.iso /var/www/html/iso/
Настройка загрузки через PXE и HTTP
-
Конфигурация pxelinux.cfg:
Создайте каталог для конфигурации PXE:sudo mkdir /var/lib/tftpboot/pxelinux.cfg
Далее создайте файл
/var/lib/tftpboot/pxelinux.cfg/default
с содержимым:DEFAULT menu.c32 PROMPT 0 TIMEOUT 300 LABEL Ubuntu MENU LABEL Ubuntu 24.04 KERNEL http://192.168.1.10/iso/Ubuntu-24.04-Desktop/kernel APPEND initrd=http://192.168.1.10/iso/Ubuntu-24.04-Desktop/initrd.img boot=casper netboot=nfs nfsroot=http://192.168.1.10/iso/Ubuntu-24.04-Desktop/ quiet splash
Обратите внимание на корректность указания путей к файлам
kernel
иinitrd.img
, так как они могут различаться в зависимости от структуры вашего ISO-образа. -
Использование iPXE:
iPXE может предоставить более гибкие функции загрузки. Вы можете создать iPXE-скрипт и загружать его через TFTP:#!ipxe dhcp chain http://192.168.1.10/iso/Ubuntu-24.04-Desktop/efi/boot/grubx64.efi
Этот скрипт будет загружать GRUB через HTTP, что может помочь вам избежать проблем с TFTP.
Решение проблем с загрузкой
Если вы столкнулись с ошибками, связанными с Casper, убедитесь в следующем:
- Ваш ISO-образ корректен и содержит необходимые файлы для работы системы live.
- Проверьте доступность файлов
vmlinuz
иinitrd.img
по заданным адресам – они должны быть доступны через HTTP. - Убедитесь, что опции
boot=casper
правильно указаны в вашей конфигурации.
Веб-интерфейс для загрузки ISO
Вы можете создать простой веб-интерфейс с использованием PHP, который позволит администраторам загружать ISO-образы и автоматически их монтировать. Используйте shell_exec
для выполнения команд для монтирования и создания необходимых файлов конфигураций.
Заключение
Создание сервера на базе Ubuntu для PXE и HTTPBoot требует комплексного подхода к настройке. Важно обеспечить правильное взаимодействие между компонентами сети, убедиться в доступности необходимых файлов и корректно настроить конфигурации, способствующие скачиванию и установке операционных систем. Вы можете использовать предоставленные рекомендации, чтобы устранить возникшие неполадки и улучшить функциональность вашего сервера.