Полагаю буду следующим в серии статей-альтернатив: Раз! Два! Раньше у нас использовалась заливка ОС по PXE с использованием syslinux, но как бывает с самодостаточными системами и без достаточного контроля и внимания - быстро превратилась в кашу из конфигураций, библиотек, загрузчиков. Так же была необходимость в поддержке заливки разных ОС в режиме EFI - на тот момент заливка была только в Legacy. В желании разобраться в этом наследстве, упростить и облегчить добавление новых образов в список, я познакомился с iPXE. Подготовка стендового сервера Сборка загрузчиков Написание меню загрузки Добавление образов debian, windows, утилит Итог Раздел частично отсылает к Загрузочный сервер — как загрузочная флешка..., первичная подготовка схожа - для базы используется чистый Debian Bullseye, но думаю, использование другого дистрибутива не будет сильно отличаться. VM VirtualBox Ram: 1 Гб VDI: 8Gb CPU: 1 Core Network: - NAT, подсеть 10.0.2.0, без DHCP, шлюз 10.0.2.1 Debian 11.4 Необходимо установить: TFTP Samba Apache2 DHCP Используется для загрузчиков и ipxe скриптов: Вношу изменения в /etc/default/tftpd-hpa: Замена слешей Windows на Linux /etc/tftpd.remap: Оглавление Начало раздела Используется для установки Windows-образов, в процессе монтируя папку образа, как диск: В конце /etc/samba/smb.conf добавил: Создал папку, выдал права, перезапустил samba: Оглавление Начало раздела Используется для загрузки образа WinPE, Linux и прочих данных по протоколу HTTP (быстрее TFTP): Настройки на стенде по умолчанию, в папке /var/www/html/ создаю директории: /images/ - для папок ОС /photo/ - для фонов меню, но не обязательно Оглавление Начало раздела Выдает IP адреса в сети. Для настройки iPXE на Windows Server лучше обратиться к документации. Задаю статический IP адрес для стенда. /etc/network/interfaces: Назначаю интерфейс для прослушивания запросов. /etc/default/isc-dhcp-server: Формирую DHCP подсеть и добавляю ключи для загрузки с iPXE.  На всякий случай проверяю синтаксис конфигурации на ошибки: Если всё хорошо, указания ошибок в выводе не будет: Документация: Настройка DHCP для PXE Отдача нужного загрузчика, в зависимости от режима загрузки - Legacy/UEFI Список кодов DHCP сервера Оглавление Начало раздела В данном разделе будет: Загрузка пакетов Скрипт стартовой настройки Сборка загрузчиков Оглавление После настройки и проверки стенда, необходимо собрать из исходного кода загрузчики iPXE для режимов Legacy и UEFI. Обязательно потребуется установить зависимости: gcc binutils make perl liblzma или xz header files mtools Скачиваю архив кода iPXE, либо клонирую репозиторий. Захожу во внутрь: Большинство возможностей iPXE по умолчанию закомментировано и при сборке бинарников, будет недоступно. Полный перечень функций указан тут, перебирая разделы можно выбрать, что нужно и где включить. В текущем случае нужно: в файле config/gereral.h раскомментировать строки с CONSOLE_CMD, IMAGE_PNG для команд консоли и png картинок. в файле config/console.h раскомментировать строку с CONSOLE_FRAMEBUFFER, тоже для картинок. Оглавление Начало раздела После загрузки iPXE от DHCP появится приглашение командной строки iPXE. Дальше нужно будет получить ip и начать загрузку скрипта меню. Чтобы этого не делать вручную, можно встроить базовый скрипт в сам бинарник. Создаю скрипт start.ipxe (имя значения не имеет). Перечень, возможных команд. Оглавление Начало раздела Внимание! Строка имени файла является и его целевой конфигурацией, т.е. какое имя будет выбрано, для той платформы и будет сборка. В ключе EMBED= указывается имя ранее созданного скрипта. Так же в случае ошибок при сборке, необходимо добавить ключ -fno-pie в Makefile.housekeeping на 451 строке. Предполагается, что это из-за ошибок в gcc. Копирую полученные загрузчики в папку tftp PXE сервера Оглавление Начало раздела Оглавление Ранее, в загрузчики был встроен скрипт, который в случае успешного получения ip, загружал и запускал скрипт boot.ipxe.  По пути /var/www/html/images/photo/ кладу подготовленные pcbios.png и efi.png размера 1024х768. В зависимости от того, в каком режиме запустится ПК, у меня всегда будет подсказка на самом фоне меню:  Cоздаю меню загружаемых ОС и утилит.  Оглавление Начало раздела После написания меню, необходимо подготовить загрузчики и пакеты загружаемых систем. Разберу примеры: Linux Windows Утилиты Оглавление На стенде создаю папки: Скачиваю ядро и пакет данных linux: Скачиваю драйвера и встраиваю их в пакет ядра: Создаю 2 файла ответов для debian-installer: pxe_efi_preseed.cfg с разметкой диска под UEFI pxe_pcbios_preseed.cfg с разметкой диска под Legacy Кладу их по пути /var/www/html/bullseye/install.amd/:  Оглавление Начало раздела Установки Windows через PXE как тачка на прокачку: Запускаем PXE -> Передаём управление iPXE -> Передаём управление wimboot -> Передаем управление WinPE -> Устанавливаем Windows Оглавление Но по порядку. Для установки Windows понадобится wimboot - загрузчик для wim образов. Умеет патчить BCD, работать с HTTP, переиспользовать память и т.д. Скачиваю последнюю стабильную версию и кладу рядом с другими загрузчиками /srv/tftp/wimboot Следом понадобится чистый WinPE, а именно его winpe/media/Boot/BCD winpe/media/Boot/boot.sdi winpe/media/sources/boot.wim Для использования его как "оболочки" для запуска установки Windows. Их необходимо будет распаковать в /var/www/html/images/winpe/ В каталог /srv/tftp/images/win10setup/ распаковываю образ установочного диска Windows и создаю там каталог wims - в неё будут складываться пакеты .wim образов и файлы ответов. В неё кладу заранее подготовленные: win10manager2021.wim - пакет корпоративного образа autounattend_bios_manager.xml и autounattend_efi_manager.xml - файлы ответов к нему для UEFI и Legacy режимов. Создаю каталоги: /srv/tftp/configWPE/ - для складывания в него настроек для разных образов (по аналогии с Bullseye) /srv/tftp/configWPE/win10manager2021/ - для непосредственно скрипта установки Создаю файл /srv/tftp/configWPE/winpeshl.ini - конфигурация, которая передаваемая ядру и которая указывает, какой скрипт выполнить при запуске: Создаю сам файл:  При проверке установка успешно запускается (с ошибкой в конце, что на VM мало места, но не суть):  По итогу получается:  Оглавление Начало раздела Для них на Web-сервере создал подкаталог /var/www/html/images/utils/ и складываю либо *.iso образы для запуска через Memdisk, либо передавая в качестве ядра соответствующие файлы (например Acronis) Оглавление Начало раздела По итогу получилась система с минимальным количеством файлов для заливки и добавления: 3 загрузчика (Legacy,UEFI,Windows) 3 файл WinPE для Windows По 2-3 файла непосредственно образа По 2 файла ответов на образ По 1 скрипту пост-/установки на образ Простое меню. Если убрать графику, парольную заглушку и оставить TUI - станет еще меньше. Возможность работать с HTTP (..., iSCSI SAN, AoE SAN и т.д.), что ускоряет загрузку. Оглавление Ожидаю вашего мнения в комментариях P.S. Первая статья и тонна мучений с редактором. Использую Firefox, при нажатии на "/" в большинстве случаев ничего не появляется, либо стало появляться только после отключения всех AdBlock-еров. Предпросмотра для ссылок нет - перепроверить ссылки внутри статьи не могу В плане оформления помог плагин Unotes который конвертировал мой markdown в WYSIWYG, но потом вносил коррективы. Если что-то не будет работать - буду исправлять по мере обнаружения.  Системный администратор, Go-разработчик