Создание сервера на основе Ubuntu, обеспечивающего функции PXE и HTTPBoot

Вопрос или проблема

Я работаю над продолжающимся проектом, который включает в себя сервер, предоставляющий функциональность 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 для установки различных операционных систем, требует тщательного подхода к настройке сетевой среды, а также взаимодействия между сервером и клиентами. В данной статье мы рассмотрим основные шаги, необходимые для успешной настройки такого сервера, учитывая различные аспекты и возможные сложности, с которыми вы столкнулись.

Подготовка сервера

  1. Установка необходимых пакетов:
    Для начала вам потребуется установить несколько пакетов, которые обеспечивают работу PXE и HTTP-сервера. Используйте команды:

    sudo apt update
    sudo apt install isc-dhcp-server tftpd-hpa apache2 syslinux
  2. Настройка 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 вашего сервера
    }
  3. Настройка 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/
  4. Настройка 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

  1. Конфигурация 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-образа.

  2. Использование 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 требует комплексного подхода к настройке. Важно обеспечить правильное взаимодействие между компонентами сети, убедиться в доступности необходимых файлов и корректно настроить конфигурации, способствующие скачиванию и установке операционных систем. Вы можете использовать предоставленные рекомендации, чтобы устранить возникшие неполадки и улучшить функциональность вашего сервера.

Оцените материал
Добавить комментарий

Капча загружается...