iPXE — заливка linux, windows, утилит по сети +12


Предисловие

Полагаю буду следующим в серии статей-альтернатив:

  1. Раз!

  2. Два!

Раньше у нас использовалась заливка ОС по PXE с использованием syslinux, но как бывает с самодостаточными системами и без достаточного контроля и внимания - быстро превратилась в кашу из конфигураций, библиотек, загрузчиков.

Так же была необходимость в поддержке заливки разных ОС в режиме EFI - на тот момент заливка была только в Legacy.

В желании разобраться в этом наследстве, упростить и облегчить добавление новых образов в список, я познакомился с iPXE.

Оглавление

  1. Подготовка стендового сервера

  2. Сборка загрузчиков

  3. Написание меню загрузки

  4. Добавление образов debian, windows, утилит

  5. Итог

1. Подготовка стенда

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

Необходимо установить:

  1. TFTP

  2. Samba

  3. Apache2

  4. DHCP

1.1. TFTP

Используется для загрузчиков и ipxe скриптов:

apt install tftpd-hpa

Вношу изменения в /etc/default/tftpd-hpa:

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp" # путь к папке tftp
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure -l -vvv -r blksize -m /etc/tftpd.remap"

Замена слешей Windows на Linux /etc/tftpd.remap:

rg \\ /

Оглавление Начало раздела

1.2. Samba

Используется для установки Windows-образов, в процессе монтируя папку образа, как диск:

apt install samba

В конце /etc/samba/smb.conf добавил:

[images]
comment = images
path = /srv/tftp/images
create mask = 0660
directory mask = 0771
writable = yes
guest ok = yes
browseable = yes
locking = no
public = yes

Создал папку, выдал права, перезапустил samba:

mkdir /srv/tftp/images
chmod 777 /srv/tftp/images
service smbd restart

Оглавление Начало раздела

1.3. Apache2

Используется для загрузки образа WinPE, Linux и прочих данных по протоколу HTTP (быстрее TFTP):

apt install apache2

Настройки на стенде по умолчанию, в папке /var/www/html/ создаю директории:

  • /images/ - для папок ОС

  • /photo/ - для фонов меню, но не обязательно

mkdir -p /var/www/html/images/photo

Оглавление Начало раздела

1.4. DHCP-сервер

Выдает IP адреса в сети. Для настройки iPXE на Windows Server лучше обратиться к документации.

apt install isc-dhcp-server

Задаю статический IP адрес для стенда.

/etc/network/interfaces:

allow-hotplug ens0s3
iface ens33 inet static
address 10.0.2.5
netmask 255.255.255.0
broadcast 10.0.2.255
network 10.0.2.0
gateway 10.0.2.1

Назначаю интерфейс для прослушивания запросов.

/etc/default/isc-dhcp-server:

INTERFACESv4="enp0s3"

Формирую DHCP подсеть и добавляю ключи для загрузки с iPXE.

/etc/dhcp/dhcpd.conf:
option domain-name "local.loc";
option domain-name-servers 10.0.2.1;
# Переменная для определения архитектуры клиента:
option arch code 93 = unsigned integer 16;
# Объявляю пространство имен для ipxe
option space ipxe;
option ipxe.no-pxedhcp code 176 = unsigned integer 8;
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
# Возможность получать клиентам IP-адреса
authoritative;
# Выделение подсети
subnet 10.0.2.0 netmask 255.255.255.0 {
range 10.0.2.100 10.0.2.200;
option domain-name-servers 10.0.2.1;
option domain-name "local.loc";
option routers 10.0.2.1;
option broadcast-address 10.0.2.255;
default-lease-time 600;
max-lease-time 7200;
}
# Отключение задержки в iPXE ожидания прокси DHCP.
# Экономит пару секунд.
option ipxe.no-pxedhcp = 1;
# Используя ранее установленную переменную,
# в зависимости от режима загрузки клиента,
# идет выбор, какой загрузчик отправить клиенту:
if option arch != 00:00 {
filename "ipxe.efi";
} else {
filename "undionly.kpxe";
}
# Установка корневой директории с загрузчиками и конфигурациями
next-server 10.0.2.5;
option tftp-server-name "10.0.2.5";
option root-path "tftp://10.0.2.5:/srv/tftp/";

На всякий случай проверяю синтаксис конфигурации на ошибки:

dhcpd -t -cf /etc/dhcp/dhcpd.conf

Если всё хорошо, указания ошибок в выводе не будет:

Internet Systems Consortium DHCP Server 4.4.1
Copyright 2004-2018 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Config file: /etc/dhcp/dhcpd.conf
Database file: /var/lib/dhcp/dhcpd.leases
PID file: /var/run/dhcpd.pid

Документация:

  1. Настройка DHCP для PXE

  2. Отдача нужного загрузчика, в зависимости от режима загрузки - Legacy/UEFI

  3. Список кодов DHCP сервера

Оглавление Начало раздела

2. Сборка загрузчиков iPXE

В данном разделе будет:

  1. Загрузка пакетов

  2. Скрипт стартовой настройки

  3. Сборка загрузчиков

Оглавление

2.1. Загрузка пакетов

После настройки и проверки стенда, необходимо собрать из исходного кода загрузчики iPXE для режимов Legacy и UEFI.

Обязательно потребуется установить зависимости:

  • gcc

  • binutils

  • make

  • perl

  • liblzma или xz header files

  • mtools

apt install gcc binutils make perl liblzma-dev mtools git

Скачиваю архив кода iPXE, либо клонирую репозиторий. Захожу во внутрь:

git clone git://git.ipxe.org/ipxe.git
cd ipxe/src/

Большинство возможностей iPXE по умолчанию закомментировано и при сборке бинарников, будет недоступно. Полный перечень функций указан тут, перебирая разделы можно выбрать, что нужно и где включить.

В текущем случае нужно:

  • в файле config/gereral.h раскомментировать строки с CONSOLE_CMD, IMAGE_PNG для команд консоли и png картинок.

  • в файле config/console.h раскомментировать строку с CONSOLE_FRAMEBUFFER, тоже для картинок.

Оглавление Начало раздела

2.2. Скрипт стартовой настройки

После загрузки iPXE от DHCP появится приглашение командной строки iPXE. Дальше нужно будет получить ip и начать загрузку скрипта меню. Чтобы этого не делать вручную, можно встроить базовый скрипт в сам бинарник.

Создаю скрипт start.ipxe (имя значения не имеет). Перечень, возможных команд.

#!ipxe
:start
# Механизм получения ip. В случае ошибки - предлагает нажать "s" для запуска командной строки.
# Иначе - начать снова.
dhcp && goto next || prompt --key s --timeout 1500 Press "s" for the iPXE command line... && shell || goto start
:next
# Случае успеха - загрузить "меню" с tftp-сервера (о нём - позже).
chain tftp://10.0.2.5/boot.ipxe

Оглавление Начало раздела

2.3. Сборка загрузчиков

Внимание! Строка имени файла является и его целевой конфигурацией, т.е. какое имя будет выбрано, для той платформы и будет сборка. В ключе EMBED= указывается имя ранее созданного скрипта.

Так же в случае ошибок при сборке, необходимо добавить ключ -fno-pie в Makefile.housekeeping на 451 строке. Предполагается, что это из-за ошибок в gcc.

make bin-i386-efi/ipxe.efi EMBED=start.ipxe
make bin-i386-pcbios/undionly.kpxe EMBED=start.ipxe

Копирую полученные загрузчики в папку tftp PXE сервера

cp bin-i386-efi/ipxe.efi /srv/tftp/
cp bin-i386-pcbios/undionly.kpxe /srv/tftp/

Оглавление Начало раздела

3. Написание меню загрузки

Оглавление

Ранее, в загрузчики был встроен скрипт, который в случае успешного получения ip, загружал и запускал скрипт boot.ipxe.

Создаю его по пути /srv/tftp/boot.ipxe:
#!ipxe
# Глобальные параметры
set pass pAsWoRd                    # Установка пароля на вход в iPXE
set httpServer http://10.0.2.5:80 # Задание адреса HTTP сервера
set menu-timeout 10000 # таймаут выхода из меню
#############################

########## Графика ##########

# Меняю цвет фона на серый
colour --rgb 0x999999 6

# Цвет по-умолчанию (индекс 0)
# Буквы - черный, фон букв - прозрачный
cpair -f 0 -b 4 0

# Фоновое изображение и рамка
# ${platform} - переменная iPXE, определяет в каком режиме загружен клиент- pcbios или efi
# Задаю параметры окна, картинку фона (загрузив её по http)
console -l 32 -r 32 -t 32 -b 32 -k --x 1024 --y 768 -d 24 -p {platform}.png

# После установки фона, удаляю картинку из памяти -
# иначе она ломает wimboot загрузку WinPE
imgfree ${platform}.png
#########################

:login
# Запрашивается пароль. Если будет нажат Ctrl+C или Esc будет выход и загрузка с диска
# В идеале, можно использовать для авторизации в сервисах, но в данном случае играет роль заглушки
login || goto cancel

#Если пароль верен, перейти "дальше"-к меню загрузок, иначе - таймаут 5 секунд и повторный запрос пароля
iseq ${password} ${pass} && goto next || goto error_pass

:error_pass
echo Error password. Repeat after 5 seconds
sleep 5
goto login

:cancel
echo You change "Exit". Boot from disk...
sleep 1
exit

# Переход к файлу с меню
:next
chain --replace --autofree menu.ipxe

По пути /var/www/html/images/photo/ кладу подготовленные pcbios.png и efi.png размера 1024х768. В зависимости от того, в каком режиме запустится ПК, у меня всегда будет подсказка на самом фоне меню:

картинки меню

Cоздаю меню загружаемых ОС и утилит.

/srv/tftp/menu.ipxe
#!ipxe
# После предыдущего скрипта, настройки остаются прежними,
# потому переопределяю их, чтобы было видно текст

######## Графика ########

# Цвет по-умолчанию (индекс 0)
# Буквы - черный, фон-прозрачный
cpair -f 0 -b 4 0

# Нормальный текст (индекс 1)
# Буквы - черный, фон - прозрачный
cpair -f 0 -b 4 1

# Разделители (индекс 3)
# Буквы - красный, фон - прозрачный
cpair -f 1 -b 4 3

#########################

######## Главное меню ########

# На данный момент "всё в одном", но можно разделить как по разным меню, так и по разным файлам
:start

# Составляю меню
https://ipxe.org/cmd/menu
menu iPXE boot menu
item -k e exit (E)xit and boot from disk
item
item --gap -- -------- Windows Images --------
item -k a win10manager2021 Windows 10 M(a)nager 2021
item
item --gap -- -------- Debian Images --------
item debian11 Debian 11 Bullseye
item
item --gap -- -------- Acronis Images --------
item acronis2021x64 Acronis 2021 64-bit
item

# Для режима Legacy, добавляю утилиты использующие Memdisk
iseq ${platform} pcbios && item --gap -- -------- BIOS Utilites -------- ||
iseq ${platform} pcbios && item memtest Memtest86+ (v5.31) ||
iseq ${platform} pcbios && item mhdd Mhdd (v4.6) ||
iseq ${platform} pcbios && item hddtolls HDDtools ||
iseq ${platform} pcbios && item victory Victory ||
iseq ${platform} pcbios && item diskGenius DiskGenius (disk diagnostics) ||
iseq ${platform} pcbios && item ||

item --gap -- -------- iPXE Utilites --------
item -k c config Start interactive (c)onfiguration tool
item -k s shell Start (S)hell iPXE

choose -d exit -t ${menu-timeout} selected
goto ${selected}

########
# Пункты меню
# В среднем состоят из трёх пунктов:
# kernel - передаю ядро linux и аргументы для запуска
# initrd - пакет данных для ядра
# boot - команда передачи управления ядру linux

########
:debian11
# В данном случае, в kernel передаётся ссылка linux ядра на http-сервере и аргументы запуска
kernel {httpServer}/images/bullseye/install.amd/pxe_${platform}_preseed.cfg netcfg/dhcp_failed=note netcfg/dhcp_options="Retry network autoconfiguration" netcfg/get_domain=  --- quiet initrd=initrd.gz

# так же, ссылкой на http, передается пакет данных для ядра
initrd ${httpServer}/images/bullseye/install.amd/initrd.gz

# команда передачи управления ядру linux и в случае ошибки - переход к обоку обработки ошибок
boot || goto error
goto start

# Разбор файлов для linux - будет ниже
:win10manager2021
# wimboot - загрузчик .wim файлов установщика Windows, который сам патчит BCD, запускает установку и подтягивает скрипты запуска
# https://ipxe.org/wimboot
kernel wimboot
###########################################
# Неизменный блок для любого образа Windows
###########################################
initrd ${httpServer}/images/winpe/Boot/BCD BCD           # Стандартный BCD WinPE
initrd ${httpServer}/images/winpe/Boot/boot.sdi boot.sdi # Стандартный boot.sdi WinPE
initrd ${httpServer}/images/winpe/boot.wim boot.wim      # Стандартный boot.wim
initrd configWPE/winpeshl.ini winpeshl.ini               # Конфиг запускающий скрипт установки.
###########################################

# Изменяемые данные в зависимости от образа
initrd configWPE/win10manager2021/install.bat install.bat   # Скрипт установки образа
boot || goto error

goto start
#############################
# Утилиты загружаемые с iPXE
#############################
# Acronis images

:acronis2021x64
kernel ${httpServer}/images/utils/acr2021/dat10.dat initrd=dat11.dat initrd=dat12.dat vga=vesa MBRCRCS force_modules=usbhid quiet
initrd ${httpServer}/images/utils/acr2021/dat11.dat
initrd ${httpServer}/images/utils/acr2021/dat12.dat
boot || goto error
goto start
# Утилиты загружаются через Memdisk и доступны только для BIOS режима

:memtest
kernel memdisk || goto error
initrd ${httpServer}/images/utils/memtest86+-5.31b.iso || goto error
imgargs memdisk iso raw || goto error
boot || goto error
goto start

:victory
kernel memdisk || goto error
initrd ${httpServer}/images/utils/vcr35r.iso || goto error
imgargs memdisk iso raw || goto error
boot || goto error
goto start

:mhdd
kernel memdisk || goto error
initrd ${httpServer}/images/utils/mhdd32ver4.6.iso || goto error
imgargs memdisk iso raw || goto error
boot || goto error
goto start

:hddtools
kernel memdisk || goto error
initrd ${httpServer}/images/utils/hddtools.iso || goto error
imgargs memdisk iso raw || goto error
boot || goto error
goto start

:diskGenius
kernel memdisk || goto error
initrd ${httpServer}/images/utils/DiskGenius.iso || goto error
imgargs memdisk iso raw || goto error
boot || goto error
goto start

# Интерактивное меню редактирования конфигурация iPXE и сетевой карты
:config
config
goto start

# Командная строка iPXE
:shell
shell
goto start

:exit
echo Boot from disk...
sleep 2
exit

# При ошибках выход на командную строку
:error
echo Failed - have error
sleep 1
goto shell
##############################

Оглавление Начало раздела

4. Добавление образов Linux, Windows, утилит

После написания меню, необходимо подготовить загрузчики и пакеты загружаемых систем.

Разберу примеры:

  1. Linux

  2. Windows

  3. Утилиты

Оглавление

4.1. Добавление Linux

На стенде создаю папки:

mkdir -p /var/www/html/images/bullseye/install.amd # Для загрузчика, файлов ответа
mkdir -p /var/www/html/images/bullseye/postinstall # Для скриптов и пакетов пост-установки. Скачиваться будут благодаря команде в файле ответов
cd /var/www/html/images/install.amd/

Скачиваю ядро и пакет данных linux:

wget http://ftp.debian.org/debian/dists/stable/main/installer-amd64/current/images/netboot/debian-installer/amd64/linux
wget http://ftp.debian.org/debian/dists/stable/main/installer-amd64/current/images/netboot/debian-installer/amd64/initrd.gz

Скачиваю драйвера и встраиваю их в пакет ядра:

[ -f initrd.gz.orig ] || cp -p initrd.gz initrd.gz.orig
[ -f firmware.cpio.gz ] || wget http://cdimage.debian.org/cdimage/unofficial/non-free/firmware/stable/current/firmware.cpio.gz
cat initrd.gz.orig firmware.cpio.gz > initrd.gz

Создаю 2 файла ответов для debian-installer:

  • pxe_efi_preseed.cfg с разметкой диска под UEFI

  • pxe_pcbios_preseed.cfg с разметкой диска под Legacy

Кладу их по пути /var/www/html/bullseye/install.amd/:

[drwxr-xr-x 4.0K]  bullseye
├── [drwxr-xr-x 4.0K]  install.amd
│   ├── [-rw-r--r-- 138M]  initrd.gz
│   ├── [-rw-r--r-- 6.5M]  linux
│   ├── [-rw-r--r--  15K]  pxe_efi_preseed.cfg
│   └── [-rw-r--r--  15K]  pxe_pcbios_preseed.cfg
└──[drwxr-xr-x 4.0K]  postinstall
Если сейчас попытаться загрузить linux, то все получится

Оглавление Начало раздела

4.2 Добавление Windows

Установки Windows через PXE как тачка на прокачку:

  • Запускаем PXE ->

  • Передаём управление iPXE ->

  • Передаём управление wimboot ->

  • Передаем управление WinPE ->

  • Устанавливаем Windows

Оглавление

Но по порядку.

  1. Для установки Windows понадобится wimboot - загрузчик для wim образов. Умеет патчить BCD, работать с HTTP, переиспользовать память и т.д.

Скачиваю последнюю стабильную версию и кладу рядом с другими загрузчиками /srv/tftp/wimboot

  1. Следом понадобится чистый WinPE, а именно его

    • winpe/media/Boot/BCD

    • winpe/media/Boot/boot.sdi

    • winpe/media/sources/boot.wim

Для использования его как "оболочки" для запуска установки Windows.

Их необходимо будет распаковать в /var/www/html/images/winpe/

  1. В каталог /srv/tftp/images/win10setup/ распаковываю образ установочного диска Windows и создаю там каталог wims - в неё будут складываться пакеты .wim образов и файлы ответов.

  2. В неё кладу заранее подготовленные:

    • win10manager2021.wim - пакет корпоративного образа

    • autounattend_bios_manager.xml и autounattend_efi_manager.xml - файлы ответов к нему для UEFI и Legacy режимов.

  3. Создаю каталоги:

    • /srv/tftp/configWPE/ - для складывания в него настроек для разных образов (по аналогии с Bullseye)

    • /srv/tftp/configWPE/win10manager2021/ - для непосредственно скрипта установки

  4. Создаю файл /srv/tftp/configWPE/winpeshl.ini - конфигурация, которая передаваемая ядру и которая указывает, какой скрипт выполнить при запуске:

[LaunchApps]
"install.bat"
  1. Создаю сам файл:

/srv/tftp/configWPE/win10manager2021/install.bat
@echo off
echo wpeinit start

:: Инициализация среды WinPE
wpeinit

:: Задержка для гарантированного запуска сетевой карты и получение IP
echo We are waiting for 15 seconds for the network card to start
ping -4 -n 15 -w 1000 "">nul
ipconfig /renew

echo
echo wait 5 second pre-mount share folder with distr
ping -4 -n 5 1000 "">nul

::Монтирование каталога с установщиком Windows
net use Y: \10.0.2.5\images\win10setup /user:anonymous anonymous

:: Получение информации, в каком режиме запущен пк - UEFI или Legacy
echo check boot-mode
wpeutil UpdateBootInfo
for /f "tokens=2* delims=        " %%A in ('reg query HKLM\System\CurrentControlSet\Control /v PEFirmwareType') DO SET Firmware=%%B

:: В зависимости от режима выше - выбор нужного образа установки и файла ответов
echo start Setup win10
if %Firmware%==0x1 Y:\sources\setup.exe /unattend:Y:\wims\autounattend_bios_manager.xml /installfrom:Y:\wims\win10manager2021.wim
if %Firmware%==0x2 Y:\sources\setup.exe /unattend:Y:\wims\autounattend_efi_manager.xml /installfrom:Y:\wims\win10manager2021.wim
cmd.exe

При проверке установка успешно запускается (с ошибкой в конце, что на VM мало места, но не суть):

Картинка

По итогу получается:

Дерево каталогов
# Web-сервер
images
├── bullseye         # Файлы образа Linux
│   ├── install.amd/ # Ядро и файлы ответов
│   └── postinstall/ # Скрипты и пакеты для пост-установки
├── photo            # Необязательный каталог для фонов меню
│   ├── efi.png
│   └── pcbios.png
└── winpe            # Файлы для запуска WinPE
    ├── BCD
    ├── boot.sdi
    └── boot.wim
# Tftp/Samba-серва
tftp
├── boot.ipxe            # Установка переменных среды iPXE
├── configWPE            # Хранилище конфигураций образов Windows
│   ├── win10manager2021
│   │   └── install.bat  # Скрипт запуска установки, где меняются samba пути
│   └── winpeshl.ini     # Общая для всех конфигурация, запускающая скрипт установки
├── images
│   └── win10setup       # Каталог стандартного установочного диска Windows
│       ├── autorun.inf
│       ├── boot/
│       ├── bootmgr/
│       ├── bootmgr.efi
│       ├── efi/
│       ├── setup.exe
│       ├── sources/
│       ├── support/
│       └── wims/        # Пакеты *.wim и файлы ответов
│           ├── autounattend_bios_manager.xml
│           ├── autounattend_efi_manager.xml
│           └── win10manager2021.wim
├── ipxe.efi             # Загрузчик для UEFI
├── menu.ipxe            # Меню iPXE
├── undionly.kpxe        # Загрузчик для Legacy
└── wimboot              # Загрузчик для Windows

Оглавление Начало раздела

4.3 Утилиты

Для них на Web-сервере создал подкаталог /var/www/html/images/utils/ и складываю либо *.iso образы для запуска через Memdisk, либо передавая в качестве ядра соответствующие файлы (например Acronis)

Оглавление Начало раздела

5. Итог

По итогу получилась система с минимальным количеством файлов для заливки и добавления:

  • 3 загрузчика (Legacy,UEFI,Windows)

  • 3 файл WinPE для Windows

  • По 2-3 файла непосредственно образа

  • По 2 файла ответов на образ

  • По 1 скрипту пост-/установки на образ

  • Простое меню. Если убрать графику, парольную заглушку и оставить TUI - станет еще меньше.

  • Возможность работать с HTTP (..., iSCSI SAN, AoE SAN и т.д.), что ускоряет загрузку.

Оглавление

Ожидаю вашего мнения в комментариях

P.S. Первая статья и тонна мучений с редактором.

  • Использую Firefox, при нажатии на "/" в большинстве случаев ничего не появляется, либо стало появляться только после отключения всех AdBlock-еров.

  • Предпросмотра для ссылок нет - перепроверить ссылки внутри статьи не могу

  • В плане оформления помог плагин Unotes который конвертировал мой markdown в WYSIWYG, но потом вносил коррективы. Если что-то не будет работать - буду исправлять по мере обнаружения.




Комментарии (7):

  1. GrimAnEye
    /#24603140

    Привет@xTuMoHx

    В отпуске появилось время и потому исполнил запрос. Ожидаю мнения)

  2. AlexGluck
    /#24603154

    А почему не сэкономили время и не взяли cobbler? Там уже большинство из первой части статьи сделано.

    • GrimAnEye
      /#24603256

      Честно посмотрел различные статьи по настройке cobbler и думаю, что настройка его или настройка "нативного" окружения равны по трудозатратам, но в случае cobbler, при возникновении проблем, придется обслуживать "обертку" над схожими сервисами, что может усложнить диагностику.

      Ставилась задача минимализировать настройки, скрипты и конфигурации, а так же иметь низкий порог для понимания, для будущих поколений.

  3. Naves
    /#24603752

    0) кому не нужны картинки, компилировать свой ipxe не нужно.

    1) У меня Debian в UEFI-режиме упорно не хотел видел preseed-файл. Хотя при загрузке в легаси-режиме все работало. В итоге собрал такую конструкцию.

    Hidden text
    item --gap Debian
    item debian-net Debian net install
    item debian-preseed Debian preseed install
    item debian-preseed-uefi Debian preseed install (UEFI)
    
    :debian-net
    kernel http://deb.debian.org/debian/dists/stable/main/installer-amd64/current/images/netboot/debian-installer/amd64/linux || read void
    initrd http://deb.debian.org/debian/dists/stable/main/installer-amd64/current/images/netboot/debian-installer/amd64/initrd.gz || read void
    imgargs linux initrd=initrd.gz -- vga=788 || read void
    boot 
    
    :debian-preseed
    kernel ${url}/debian-installer/amd64/linux
    initrd ${url}/debian-installer/amd64/initrd.gz
    initrd ${url}/debian-installer/preseed.cfg preseed.cfg
    imgargs linux initrd=initrd.gz -- vga=788
    boot 
    
    #https://forum.ipxe.org/showthread.php?tid=20259
    #https://forum.ipxe.org/showthread.php?tid=8275
    #use echo preseed.cfg | cpio -H newc -o > preseed.cfg.cpio && gzip preseed.cfg.cpio
    :debian-preseed-uefi
    kernel ${url}/debian-installer/amd64/linux
    initrd ${url}/debian-installer/amd64/initrd.gz
    initrd ${url}/debian-installer/preseed.cfg.cpio.gz
    imgargs linux initrd=initrd.gz initrd=preseed.cfg.cpio.gz -- vga=788 
    boot

    2) Дебиан регулярно (каждые полгода вроде) обновляет софт установщика на сайте, и тогда установка перестает работать с руганью на версию ядра из PXE. В идеале нужно делать PXE-образ со встроенными пакетами установщика.

    3) Выложите в статье свой вариант preseed-файлов. Там тоже есть над чем помучаться для новичков.

    • GrimAnEye
      /#24604060

      0) При компиляции не только картинки включаются. Можно встроить скрипт для цепной загрузки, включение дополнительных команд для диагностики и настройки сети.

      1,2) У меня проблем с Debian 9, 10, 11 не было проблем при выборе preseed файла. Может быть он был просто недоступен или к нему неверно указывался путь?

      3) Разборов и анализов preseed файлов великое множество, мои не выбиваются из этого ряда. Их различия - лишь в способе разбивки диска для Legacy и UEFI режимов соответственно.

      А так же - все пакеты для установки из репозитория перенесены в post-install скрипт с повторной загрузкой при ошибке, в виду проблем с загрузкой множества пакетов одновременно - в последние пару месяцев удаленные репозитории случайным образом обрывают подключения при загрузки пакетов, чем ломают установку. В офисной сети это решено заливкой через proxy apt-ng-cache.

      Legacy
      
      ### Сеть ###
      # Полностью отключить настройку сети. Это полезно для компакт-диска
      # установки на не сетевые устройства, где есть вопросы по сети,
      # предупреждения и длительные тайм-ауты мешают.
      d-i netcfg/enable boolean true
      d-i netcfg/choose_interface select auto
      d-i netcfg netcfg/dhcp_timeout string 60
      # Время ожидания (в секундах) подключения к сети:
      d-i netcfg/link_wait_timeout string 20
      # Неназначенное имя пк - его нужно будет ввести
      d-i netcfg netcfg/get_hostname string unassigned-hostname
      # назначенный домен - его не нужно будет вводить
      d-i netcfg/get_domain string
      d-i netcfg/dhcp_failed note
      d-i netcfg/dhcp_options select Retry network autoconfiguration
      
      ### Настройка времени ###
      # Временная зона
      d-i time/zone string Asia/Krasnoyarsk
      d-i clock-setup/ntp boolean true
      d-i clock-setup/ntp-server string 0.debian.pool.ntp.org
      ### Репозитории ###
      d-i mirror/country string manual
      d-i mirror/http/mirror string mirror.yandex.ru
      d-i mirror/http/hostname string mirror.yandex.ru
      d-i mirror/http/directory string /debian
      d-i mirror/suite string bullseye
      
      # Установка прокси. В офисной сети работает apt-ng-cacher адресу
      # Если раскомментировать и подставить строчку:
      # то установка и настройка внутри системы назначается на него.
      # Для .iso образа, нужно оставить закоменченным, ведь образ не сможет найти proxy
      d-i mirror/http/proxy string http://HIDE_APT_NG_CACHE_SERVER:9999
      ### Локализация ###
      d-i debian-installer/language string ru
      d-i debian-installer/locale string ru_RU.UTF-8
      d-i debian-installer/country string RU
      d-i	localechooser/preferred-locale select ru_RU.UTF-8
      d-i	debian-installer/locale select ru_RU.UTF-8
      d-i	localechooser/shortlist select RU
      d-i	localechooser/languagelist select ru
      
      ### Клавиатура ###
      d-i keyboard-configuration/xkb-keymap select ru
      d-i keyboard-configuration/layoutcode string ru,us
      d-i console-setup/variant select Россия
      d-i keyboard-configuration/toggle select Alt+Shift
      
      #Если для сети или другого оборудования требуется несвободная прошивка, вы можете
      #настроить установщик так, чтобы он всегда пытался загрузить его без запроса. Или
      #измените значение на false, чтобы отключить запросы.
      d-i hw-detect/load_firmware boolean true
      ### Разбитие диска ###
      # Кастомная схема разбития
      d-i partman-auto/init_automatically_partition select custom
      # Использовать первый диск компьютера
      #d-i partman-auto/disk string /dev/sda
      d-i partman/early_command string debconf-set partman-auto/disk "$(list-devices disk | head -n1)"
      # Использовать обычный метод использования диска, без lvm и crypto
      d-i partman-auto/method string regular
      # Если один из дисков, которые будут автоматически разбиты на разделы
      # содержит старую конфигурацию LVM, пользователь обычно получает
      # предупреждение. Это можно предварительно удалить...
      d-i partman-lvm/device_remove_lvm boolean true
      # То же самое относится к уже существующему программному RAID-массиву:
      d-i partman-md/device_remove_md boolean true
      # И то же самое касается подтверждения записи разделов lvm.
      d-i partman-lvm/confirm boolean true
      d-i partman-lvm/confirm_nooverwrite boolean true
      # Вы можете выбрать один из трех предустановленных рецептов разбиения:
      # -atomic: все файлы в одном разделе
      # -home: отдельный раздел /home
      # -multi: отдельные разделы /home, /var и /tmp
      d-i partman-auto/choose_recipe select boot-root
      # Это делает partman автоматическим разделением без подтверждения, если
      # вы сказали ему, что делать, используя один из методов выше.
      d-i partman-partitioning/confirm_write_new_label boolean true
      d-i partman/choose_partition select finish
      d-i partman/confirm boolean true
      d-i partman/confirm_nooverwrite boolean true
      #d-i partman-basicfilesystems/no_swap boolean false
      d-i partman-md/confirm boolean true
      # Если нет, вы можете поместить весь рецепт в файл предварительной конфигурации за один раз.
      # (логическая) строка. В этом примере создается небольшой раздел /boot, подходящий
      # swap, а оставшееся место использует для корневого раздела.
      d-i partman/default_filesystem string ext4
      d-i partman-auto/expert_recipe string                     \
              boot-root ::                                      \
             4096 100 4096 linux-swap                           \
                           $reusemethod{ }                      \
                           method{ swap } format{ }             \
                           .                                    \
           25000 200 30000 ext4                                 \
                           $primary{ } $bootable{ }             \
                           method{ format } format{ }           \
                           use_filesystem{ } filesystem{ ext4 } \
                           mountpoint{ / }                      \
                           .                                    \
          35000 4000 -1 ext4                                    \
                           method{ format } format{ }           \
                           use_filesystem{ } filesystem{ ext4 } \
                           mountpoint{ /home }                  \
                           .
      ### Настройка root ###
      # Пропустить создание учетной записи root (обычная учетная запись пользователя сможет
      # используйте судо)
      d-i passwd/root-login boolean true
      # В качестве альтернативы, чтобы пропустить создание обычной учетной записи пользователя.
      d-i passwd/make-user boolean false
      # Корневой пароль, либо открытым текстом
      #d-i пароль/пароль root пароль r00tme
      #d-i passwd/root-пароль-снова пароль r00tme
      # или зашифрован с помощью хэша crypt(3).
      # printf "password" | mkpasswd -s -m sha-256
      d-i passwd/root-password-crypted password HIDE_PASSWORD
      ### Установка базовой системы ###
      # Настройте APT так, чтобы по умолчанию не устанавливались рекомендуемые пакеты.
      #Использование этого может привести к неполной системе и должен использоваться только очень
      # опытные пользователи.
      d-i base-installer/install-recommends boolean true
      # Устанавливаемый пакет образа ядра (мета); "none" можно использовать, если не нужно устанавливать ядро.
      d-i base-installer/kernel/image select linux-image-5.10.0-10-amd64
      # Использовать несвободное ПО?
      d-i apt-setup/non-free boolean true
      # Использовать программное обеспечение из раздела contrib?
      d-i apt-setup/contrib boolean true
      # Выберите, какие службы обновления использовать; определить зеркала, которые будут использоваться.
      # Значения, показанные ниже, являются обычными значениями по умолчанию.
      d-i apt-setup/services-select multiselect security, updates
      d-i apt-setup/security_host string security.debian.org
      # По умолчанию установщик требует, чтобы репозитории были аутентифицированы
      # используя известный ключ gpg. Этот параметр можно использовать для отключения этого
      # аутентификация. Предупреждение: небезопасно, не рекомендуется.
      d-i debian-installer/allow_unauthenticated boolean false
      # Проверить целостность другого установочного образа?
      d-i cdrom-checker/nextcd boolean false
       
      # Просканировать дополнительный установочный носитель?
      apt-cdrom-setup apt-setup/cdrom/set-double boolean false
      apt-cdrom-setup apt-setup/cdrom/set-failed boolean false
      apt-cdrom-setup apt-setup/cdrom/set-first boolean false
      apt-cdrom-setup apt-setup/cdrom/set-next boolean false
       
      #Раскомментируйте это, чтобы добавить мультиархивную конфигурацию для i386.
      d-i apt-setup/multiarch string i386
      ### Выбор пакета ###
      #standard, desktop, xfce-desktop, ssh-server
      tasksel tasksel/first select ssh-server
      
      # Отдельные дополнительные пакеты для установки
      # Здесь указываются только те пакеты, которые задают вопросы в процессе установки.
      # Прочие пакеты, с перепроверкой подключения, перенесены в postinstall.sh
      # Они не указаны все в одном месте из-за проблем с подключением к репозиториям - при
      # длительной выгрузке пакетов репозиторий обрывает подключение (error 104)
      d-i pkgsel/include string nscd nslcd ttf-mscorefonts-installer
      
      # Если нужен будет wiresherk...
      # При установке Wireshark запретить не root захват пакетов
      #d-i wireshark-common/install-setuid boolean false
      
      ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula boolean true
      popularity-contest popularity-contest/participate boolean false
      
      # Настройка nscd и nslcd по умолчанию - в postistall будет изменение на требуемые данные
      d-i nslcd/ldap-base string dc=unassigned-domain
      d-i nslcd/ldap-uris string ldap://127.0.0.1/
      d-i libnss-ldapd/nsswitch  multiselect
      
      # Обновлять ли пакеты после debootstrap.
      # Allowed values: none, safe-upgrade, full-upgrade
      d-i pkgsel/upgrade select full-upgrade
      # Некоторые версии установщика могут сообщать о том, какое программное обеспечение у вас установлено
      # установлено и какое программное обеспечение вы используете. По умолчанию не отчитываться,
      # но отправка отчетов помогает проекту определить, какое программное обеспечение наиболее
      # популярен и включает его на компакт-диски.
      popularity-contest popularity-contest/participate boolean false
      ### Установка загрузчика
      #Grub — загрузчик по умолчанию (для x86). Если вы хотите установить lilo
      #вместо этого раскомментируйте это:
      d-i grub-installer/skip boolean false
      #Чтобы также пропустить установку lilo и не устанавливать загрузчик,
      # раскомментируйте это тоже:
      d-i lilo-installer/skip boolean true
      #Это достаточно безопасно, так как grub автоматически устанавливается в MBR.
      #если на машине не обнаружена другая операционная система.
      d-i grub-installer/only_debian boolean true
      #Это заставляет grub-installer устанавливаться в MBR, если он также находит какие-либо другие
      #ОС, которая менее безопасна, поскольку может не иметь возможности загрузить эту другую ОС.
      d-i grub-installer/with_other_os boolean true
      #В частности, из-за потенциальных USB-накопителей местоположение MBR не может быть
      #определяется безопасно в целом, поэтому это необходимо указать:
      d-i grub-installer/bootdev  string default
      # Отключает именование по новому формату, возвращая eth0, eth1
      d-i debian-installer/add-kernel-opts string net.ifnames=0 biosdevname=0
      
      ### Завершение установки
      # Во время установки с последовательной консоли обычные виртуальные консоли
      # (VT1-VT6) обычно отключены в /etc/inittab. Раскомментировать следующий
      # строка, чтобы предотвратить это.
      d-i finish-install/keep-consoles boolean true
      #Избегайте этого последнего сообщения о завершении установки.
      d-i finish-install/reboot_in_progress note
      # Есть 2 способа установки - с помощью PXE и с помощью ISO образа записанного на флешку.
      # Раскомментируй требуемый способ и собери пакет
      # PXE - Переход в /opt установленной системы, загрузка скрипта пост-установки c ...
      d-i preseed/late_command string cd /target/opt/ ; \
      \
      wget http://HIDE_HTTP_SERVER/bullseye/post-install/postinstall.sh ; \
      wget http://HIDE_HTTP_SERVER/bullseye/post-install/postinstall.tar.gz ; \
      chroot /target/ bash /opt/postinstall.sh

      UEFI
      
      ### Сеть ###
      # Полностью отключить настройку сети. Это полезно для компакт-диска
      # установки на не сетевые устройства, где есть вопросы по сети,
      # предупреждения и длительные тайм-ауты мешают.
      d-i netcfg/enable boolean true
      d-i netcfg/choose_interface select auto
      d-i netcfg netcfg/dhcp_timeout string 60
      # Время ожидания (в секундах) подключения к сети:
      d-i netcfg/link_wait_timeout string 20
      # Неназначенное имя пк - его нужно будет ввести
      d-i netcfg netcfg/get_hostname string unassigned-hostname
      # назначенный домен - его не нужно будет вводить
      d-i netcfg/get_domain string
      d-i netcfg/dhcp_failed note
      d-i netcfg/dhcp_options select Retry network autoconfiguration
      
      ### Настройка времени ###
      # Временная зона
      d-i time/zone string Asia/Krasnoyarsk
      d-i clock-setup/ntp boolean true
      d-i clock-setup/ntp-server string 0.debian.pool.ntp.org
      ### Репозитории ###
      d-i mirror/country string manual
      d-i mirror/http/mirror string mirror.yandex.ru
      d-i mirror/http/hostname string mirror.yandex.ru
      d-i mirror/http/directory string /debian
      d-i mirror/suite string bullseye
      
      # Установка прокси. В офисной сети работает apt-ng-cacher адресу 
      # Если раскомментировать и подставить строчку:
      # то установка и настройка внутри системы назначается на него.
      # Для .iso образа, нужно оставить закоменченным, ведь образ не сможет найти proxy
      d-i mirror/http/proxy string http://HIDE_APT_NG_CACHE_SERVER:9999
      ### Локализация ###
      d-i debian-installer/language string ru
      d-i debian-installer/locale string ru_RU.UTF-8
      d-i debian-installer/country string RU
      d-i	localechooser/preferred-locale select ru_RU.UTF-8
      d-i	debian-installer/locale select ru_RU.UTF-8
      d-i	localechooser/shortlist select RU
      d-i	localechooser/languagelist select ru
      
      ### Клавиатура ###
      d-i keyboard-configuration/xkb-keymap select ru
      d-i keyboard-configuration/layoutcode string ru,us
      d-i console-setup/variant select Россия
      d-i keyboard-configuration/toggle select Alt+Shift
      
      #Если для сети или другого оборудования требуется несвободная прошивка, вы можете
      #настроить установщик так, чтобы он всегда пытался загрузить его без запроса. Или
      #измените значение на false, чтобы отключить запросы.
      d-i hw-detect/load_firmware boolean true
      ### Разбитие диска ###
      # Кастомная схема разбития
      d-i partman-auto/init_automatically_partition select custom
      # Использовать первый диск компьютера
      #d-i partman-auto/disk string /dev/sda
      d-i partman/early_command string debconf-set partman-auto/disk "$(list-devices disk | head -n1)"
      # Использовать обычный метод использования диска, без lvm и crypto
      d-i partman-auto/method string regular
      # Если один из дисков, которые будут автоматически разбиты на разделы
      # содержит старую конфигурацию LVM, пользователь обычно получает
      # предупреждение. Это можно предварительно удалить...
      d-i partman-lvm/device_remove_lvm boolean true
      # То же самое относится к уже существующему программному RAID-массиву:
      d-i partman-md/device_remove_md boolean true
      # И то же самое касается подтверждения записи разделов lvm.
      d-i partman-lvm/confirm boolean true
      d-i partman-lvm/confirm_nooverwrite boolean true
      # Вы можете выбрать один из трех предустановленных рецептов разбиения:
      # -atomic: все файлы в одном разделе
      # -home: отдельный раздел /home
      # -multi: отдельные разделы /home, /var и /tmp
      d-i partman-auto/choose_recipe select boot-root
      # Это делает partman автоматическим разделением без подтверждения, если
      # вы сказали ему, что делать, используя один из методов выше.
      d-i partman-partitioning/confirm_write_new_label boolean true
      d-i partman/choose_partition select finish
      d-i partman/confirm boolean true
      d-i partman/confirm_nooverwrite boolean true
      #d-i partman-basicfilesystems/no_swap boolean false
      d-i partman-md/confirm boolean true
      # Если нет, вы можете поместить весь рецепт в файл предварительной конфигурации за один раз.
      # (логическая) строка. В этом примере создается небольшой раздел /boot, подходящий
      # swap, а оставшееся место использует для корневого раздела.
      d-i partman/default_filesystem string ext4
      d-i partman-auto/expert_recipe string                  \
              boot-root ::                                   \
                  1 1 1 free                                 \
                        $iflabel{ gpt }                      \
                        $reusemethod{ } method{ biosgrub }   \
                        .                                    \
             128 96 256 fat32                                \
                        $iflabel{ gpt } use_filesystem{ }    \
                        method{ efi } format{ }              \
                        .                                    \
          4096 100 4096 linux-swap                           \
                        $reusemethod{ }                      \
                        method{ swap } format{ }             \
                        .                                    \
       25000 1000 40000 ext4                                 \
                        method{ format } format{ }           \
                        use_filesystem{ } filesystem{ ext4 } \
                        mountpoint{ / }                      \
                        .                                    \
          30000 3000 -1 ext4                                 \
                        method{ format } format{ }           \
                        use_filesystem{ } filesystem{ ext4 } \
                        mountpoint{ /home }                  \
                        .
      ### Настройка root ###
      # Пропустить создание учетной записи root (обычная учетная запись пользователя сможет
      # используйте судо)
      d-i passwd/root-login boolean true
      # В качестве альтернативы, чтобы пропустить создание обычной учетной записи пользователя.
      d-i passwd/make-user boolean false
      # Корневой пароль, либо открытым текстом
      #d-i пароль/пароль root пароль r00tme
      #d-i passwd/root-пароль-снова пароль r00tme
      # или зашифрован с помощью хэша crypt(3).
      # printf "password" | mkpasswd -s -m sha-256
      d-i passwd/root-password-crypted password HIDE_PASSWORD
      ### Установка базовой системы ###
      # Настройте APT так, чтобы по умолчанию не устанавливались рекомендуемые пакеты.
      #Использование этого может привести к неполной системе и должен использоваться только очень
      # опытные пользователи.
      d-i base-installer/install-recommends boolean true
      # Устанавливаемый пакет образа ядра (мета); "none" можно использовать, если не нужно устанавливать ядро.
      d-i base-installer/kernel/image select linux-image-5.10.0-10-amd64
      # Использовать несвободное ПО?
      d-i apt-setup/non-free boolean true
      # Использовать программное обеспечение из раздела contrib?
      d-i apt-setup/contrib boolean true
      # Выберите, какие службы обновления использовать; определить зеркала, которые будут использоваться.
      # Значения, показанные ниже, являются обычными значениями по умолчанию.
      d-i apt-setup/services-select multiselect security, updates
      d-i apt-setup/security_host string security.debian.org
      # По умолчанию установщик требует, чтобы репозитории были аутентифицированы
      # используя известный ключ gpg. Этот параметр можно использовать для отключения этого
      # аутентификация. Предупреждение: небезопасно, не рекомендуется.
      d-i debian-installer/allow_unauthenticated boolean false
      # Проверить целостность другого установочного образа?
      d-i cdrom-checker/nextcd boolean false
       
      # Просканировать дополнительный установочный носитель?
      apt-cdrom-setup apt-setup/cdrom/set-double boolean false
      apt-cdrom-setup apt-setup/cdrom/set-failed boolean false
      apt-cdrom-setup apt-setup/cdrom/set-first boolean false
      apt-cdrom-setup apt-setup/cdrom/set-next boolean false
       
      #Раскомментируйте это, чтобы добавить мультиархивную конфигурацию для i386.
      d-i apt-setup/multiarch string i386
      ### Выбор пакета ###
      #standard, desktop, xfce-desktop, ssh-server
      tasksel tasksel/first select ssh-server
      
      # Отдельные дополнительные пакеты для установки
      # Здесь указываются только те пакеты, которые задают вопросы в процессе установки.
      # Прочие пакеты, с перепроверкой подключения, перенесены в postinstall.sh
      # Они не указаны все в одном месте из-за проблем с подключением к репозиториям - при
      # длительной выгрузке пакетов репозиторий обрывает подключение (error 104)
      d-i pkgsel/include string nscd nslcd ttf-mscorefonts-installer
      
      # Если нужен будет wiresherk...
      # При установке Wireshark запретить не root захват пакетов
      #d-i wireshark-common/install-setuid boolean false
      
      ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula boolean true
      popularity-contest popularity-contest/participate boolean false
      
      # Настройка nscd и nslcd по умолчанию - в postistall будет изменение на требуемые данные
      d-i nslcd/ldap-base string dc=unassigned-domain
      d-i nslcd/ldap-uris string ldap://127.0.0.1/
      d-i libnss-ldapd/nsswitch  multiselect
      
      # Обновлять ли пакеты после debootstrap.
      # Allowed values: none, safe-upgrade, full-upgrade
      d-i pkgsel/upgrade select full-upgrade
      # Некоторые версии установщика могут сообщать о том, какое программное обеспечение у вас установлено
      # установлено и какое программное обеспечение вы используете. По умолчанию не отчитываться,
      # но отправка отчетов помогает проекту определить, какое программное обеспечение наиболее
      # популярен и включает его на компакт-диски.
      popularity-contest popularity-contest/participate boolean false
      ### Установка загрузчика
      #Grub — загрузчик по умолчанию (для x86). Если вы хотите установить lilo
      #вместо этого раскомментируйте это:
      d-i grub-installer/skip boolean false
      #Чтобы также пропустить установку lilo и не устанавливать загрузчик,
      # раскомментируйте это тоже:
      d-i lilo-installer/skip boolean true
      #Это достаточно безопасно, так как grub автоматически устанавливается в MBR.
      #если на машине не обнаружена другая операционная система.
      d-i grub-installer/only_debian boolean true
      #Это заставляет grub-installer устанавливаться в MBR, если он также находит какие-либо другие
      #ОС, которая менее безопасна, поскольку может не иметь возможности загрузить эту другую ОС.
      d-i grub-installer/with_other_os boolean true
      #В частности, из-за потенциальных USB-накопителей местоположение MBR не может быть
      #определяется безопасно в целом, поэтому это необходимо указать:
      d-i grub-installer/bootdev  string default
      # Отключает именование по новому формату, возвращая eth0, eth1
      d-i debian-installer/add-kernel-opts string net.ifnames=0 biosdevname=0
      
      ### Завершение установки
      # Во время установки с последовательной консоли обычные виртуальные консоли
      # (VT1-VT6) обычно отключены в /etc/inittab. Раскомментировать следующий
      # строка, чтобы предотвратить это.
      d-i finish-install/keep-consoles boolean true
      #Избегайте этого последнего сообщения о завершении установки.
      d-i finish-install/reboot_in_progress note
      # Есть 2 способа установки - с помощью PXE и с помощью ISO образа записанного на флешку.
      # Раскомментируй требуемый способ и собери пакет
      # PXE - Переход в /opt установленной системы, загрузка скрипта пост-установки c ...
      d-i preseed/late_command string cd /target/opt/ ; \
      \
      wget http://HIDE_HTTP_SERVER/bullseye/post-install/postinstall.sh ; \
      wget http://HIDE_HTTP_SERVER/bullseye/post-install/postinstall.tar.gz ; \
      chroot /target/ bash /opt/postinstall.sh
      

  4. ftarasenko
    /#24603812 / +1

    • ipxe.efi меняют сейчас на snponly.efi из-за проблем с драйверами

    • Посмотрите на ironic как управление baremetal серверами, если задача будет заливать больше 2 серверов в день.

    • GrimAnEye
      /#24604078

      Полагаю подсказка больше ориентирована при заливке серверов:

      https://ipxe.org/appnote/buildtargets:

      bin-arm32-efi (Limited support, works with snp.efi and snponly.efi, but not with ipxe.efi)

      Сохраню на будущее.

      В данном случае сервис используется офисной техподдержкой для заливки офисных (пользовательских) машин, а для серверов используются виртуальные машины создаваемые из шаблонов. Рассказать об этом не смогу, смежный отдел :)