Модуль 12. Дополнительные подсистемы DHCP и PXE

Введение

В этом модуле вы узнаете о подсистемах ALD Pro, которые отвечают за настройку сетевых параметров и загрузку компьютера через сетевую карту. Речь пойдёт о Службе динамической настройки узла, работающей на основе DHCP (Dynamic Host Configuration Protocol), и о подсистеме установки ОС по сети, функционирующей с помощью PXE (Preboot eXecution Environment). PXE позволяет загружать компьютер через сетевую карту без использования локальных носителей, таких как жёсткий диск, DVD-ROM или USB-накопитель.

Dynamic Host Configuration Protocol

DHCP упрощает управление IP-адресами в локальной сети. Централизованный DHCP-сервер позволяет легко администрировать все динамические IP-адреса из одной точки. Это делает управление адресами более эффективным и согласованным в организации, включая филиалы.

DHCP автоматически назначает IP-адреса и другие сетевые настройки. В небольших офисах функции DHCP-сервера обычно выполняет маршрутизатор.

DHCP предлагает три способа распределения адресов:

  1. Manual Allocation (Статическое назначение, резервирование)

    • Администратор вручную назначает клиенту конкретный IP-адрес на основе его MAC-адреса.

    • DHCP-сервер всегда выдаёт один и тот же IP определённому устройству.

    • Полезно для серверов, принтеров и других устройств, которым нужен постоянный IP-адрес.

  2. Automatic Allocation (Автоматическое назначение)

    • DHCP-сервер назначает IP-адрес из пула при первом подключении устройства и навсегда закрепляет его за этим клиентом.

    • Адрес не меняется, даже если устройство отключается от сети.

    • Используется редко, так как неэффективно расходует IP-адреса.

  3. Dynamic Allocation (Динамическое назначение)

    • Самый распространённый метод.

    • DHCP-сервер выдаёт IP-адрес из пула на ограниченное время (lease time).

    • Клиент должен периодически обновлять аренду. Срок аренды обычно 24 часа, но может быть и несколько дней.

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

    • Оптимален для сетей с большим количеством временных подключений (ноутбуки, смартфоны).

Примечание

В этому модуле мы будет рассматривать только динамическое назначение адресов.

Механизм работы DHCP

DHCP работает в режиме клиент/сервер.

Когда клиент обращается к серверу DHCP, сервер выдает клиенту в аренду IP адрес, и сообщает некоторые дополнительные параметры, если клиент их запрашивает. Далее клиент работает в сети с этим адресом, выполняет запросы к службам, о которых ему стало известно от сервера DHCP. Так как IP адрес выдан в аренду, клиенту необходимо периодически связываться с сервером, чтобы продлить срок аренды. Этот механизм гарантирует, что компьютеры, которые выключаются, выходят из строя или перемещаются в другую подсеть не сохранят за собой адреса, которые им больше не нужны. Если срок аренды IP адреса истек, сервер DHCP возвращает его в пул свободных адресов и может назначить этот адрес другому клиенту. Общая схема запроса IP адреса представлена на рисунке рис. 410

../_images/image241.png

рис. 410 Схема назначения IP адреса по DHCP

Разберем подробнее процесс запроса адреса.

  • Когда клиент подключается к сети, первым шагом он посылает сообщение DHCPDISCOVER со своим собственным MAC-адресом, хэш-идентификатором транзакции (Transaction ID) и IP адресом отправителя, равным 0.0.0.0. Так как клиент не знает ни адрес DHCP, ни к какой сети он сейчас подключен, DHCPDISCOVER будет послан как широковещательное сообщение – IP адрес получателя 255.255.255.255.

  • DHCP-сервер отправляет DHCP Offer в ответ на DHCPDISCOVER. В этом сообщении он предлагает клиенту IP-адрес и другие параметры, которые запросил клиент. Получателем DHCP Offer будет машина с IP-адресом 0.0.0.0, MAC-адресом сетевой карты клиента, пославшего DHCPDISCOVER, и портом назначения 68 (стандартный порт DHCP-клиента).

  • Клиент, получив DHCPOFFER, отправляет в ответ сообщение DHCPREQUEST. Этим сообщением клиент уведомляет сервер, что он принимает предложенные сервером параметры. В сети может быть несколько DHCP-серверов, поэтому сообщение DHCPREQUEST отправляется как широковещательное, чтобы уведомить все DHCP-серверы, от кого именно принял предложение клиент.

  • Сервер DHCP, получив DHCPREQUEST, проверяет, что предложенный IP-адрес по-прежнему никем не используется. Для этого сервер отправляет ICMP-запрос на этот адрес и, если адрес действительно свободен, отвечает клиенту сообщением DHCPACK. Получив такое сообщение, клиент начинает пользоваться предложенным ему адресом.

Если прошла половина срока аренды адреса, то:

  • Клиент отправляет сообщение DHCPREQUEST напрямую DHCP-серверу, от которого он первоначально получил адрес. Если в течение заданного времени сервер не присылает DHCPACK, клиент подождет, пока не истечет 87,5% времени аренды, и отправит еще один, на этот раз широковещательный, DHCPREQUEST. Это позволяет другим доступным DHCP-серверам продлить аренду IP.

  • Получив DHCPREQUEST, сервер проверяет данные об аренде и возвращает DHCPACK.

Автоматическое освобождение (по истечении срока аренды):

  • DHCP-сервер выдаёт адрес на время (lease time), например, на 24 часа.

  • Если клиент не продлил аренду (не отправил запрос DHCPREQUEST), адрес автоматически возвращается в пул после истечения срока.

  • Клиент может досрочно прекратить использование адреса при корректном отключении (например, завершение работы ОС отправляет DHCPRELEASE).

Стоит еще отметить ситуацию, когда клиент и сервер DHCP находятся в разных широковещательных доменах (в разных подсетях). В этом случае применяется DHCP Relay (DHCP-ретранслятор) — сетевой компонент, который пересылает DHCP-запросы между клиентами и серверами, находящимися в разных подсетях. Однако эта тема уже выходит за рамки текущего модуля.

Preboot eXecution Environment

Обычная задача любого системного администратора – (пере)установка операционной системы. Для младшего сисадмина массовая закупка новых рабочих станций могла бы стать ночным кошмаром! Десятки или даже сотни компьютеров, на которых нужно провести стандартную установку операционной системы, а это ввод одних и тех же или немного отличающихся параметров и постоянное нажимание на кнопку «Далее» – на это можно потратить весь рабочий день и даже не один.

К счастью, автоматизация давно уже добралась до этой области IT. Preboot eXecution Environment, PXE (произносится как «пикси»), значительно облегчает такую работу.

PXE — это среда для загрузки компьютеров через сетевую карту, без использования жёстких дисков, CD/DVD-дисков и других устройств. Давайте подробнее рассмотрим процесс загрузки компьютера с помощью этой технологии.

../_images/image110.png

рис. 411 Схема загрузки компьютера по PXE

Разберем схему рис. 411 по шагам:

  1. Включение устройства и запуск сетевой загрузки.

  2. Пользовательское устройство выполняет широковещательный DHCP Discover. Этот запрос включает в себя следующие опции:
    • Option 55 (DHCP Parameter Request List) - клиент перечисляет параметры, которые хочет получить: IP-адрес, маску подсети, DNS-серверы и серверы NTP. К этому списку добавляются адрес TFTP-сервера, имя загрузочного файла и зарезервированные дополнительные параметры PXE;

    • Option 60 (Vendor Class Identifier (VCI)) - позволяет клиентам DHCP указывать к какому типу устройства (например, к какому производителю или модели) относится запрос клиента. Благодаря этой опции, сервер может выдать разные настройки DHCP для различных типов устройств, таких как маршрутизаторы, точки доступа и т. д.;

    • Option 77 (User Class Information, UCI) - позволяет клиентам сообщать о своем классе пользователя. Это дает DHCP-серверу возможность применять различные политики и настройки;

    • Option 93 (Pxe Client Arch) - сообщает о клиентской архитектуре в контексте сетевой загрузки. Это критически важная опция для корректной работы PXE-загрузки, особенно в гетерогенных средах с различными типами клиентских устройств (x86, UEFI, ARM и т.д.);

    • Option 97 (Pxe Client Machine-id) - используется для уникальной идентификации клиента DHCP на основе его аппаратных характеристик, таких как:

      • UUID (Universally Unique Identifier) компьютера (из BIOS/UEFI).

      • Системный серийный номер (например, в тонких клиентах или IoT-устройствах).

      • Другие аппаратные идентификаторы, если MAC-адреса недостаточно.

      Примечание

      Также может использоваться Option 61 (обычно содержит MAC-адрес), однако, предпочтительным является именно Option 97 – более сложный идентификатор (UUID/серийный номер), не привязанный к сетевому интерфейсу.

  3. DHCP-сервер отправляет клиенту параметры в ответном сообщении DHCP Offer, см. рисунок рис. 412.

../_images/image22.png

рис. 412 Пример DHCP Offer

  1. На этом шаге запрашивается загрузчик, указанный DHCP-сервером в поле «Boot file name». Это могут быть разные файлы из-за того, что для систем BIOS и UEFI используются разные загрузчики. В нашем случае это lpxelinux.0. Различия загрузчиков будут рассмотрены далее в модуле.

  2. TFTP-сервер передает загрузчик.

  3. PXE запрашивает у tftp-сервера следующий загрузчик. Для систем с BIOS это будет boot-меню, а для UEFI — GRUB. Пути запросов для этого этапа определяются спецификацией PXE, и полученный ранее загрузчик будет работать в зависимости от своей архитектуры. Для поддержки систем с BIOS на tftp-сервере должна быть создана директория pxelinux.cfg. Файлы в этой директории могут быть организованы разным способом, но путь их поиска будет следующим:

    • pxelinux.cfg/{UUID или GUID клиента, который делает запрос};

    • pxelinux.cfg/01-{MAC-адрес клиента, написанный через дефис};

    • pxelinux.cfg/{IP-адрес, преобразованный в 16-й формат}.

    Если по указанным путям ничего не найдено, PXE возьмет IP-адрес в 16-ом формате и попробует убрать наименее значащие октеты. Если ничего не найдено, то будет сделана попытка загрузки из pxelinux.cfg/default, и уже если и эта попытка окажется неудачной, загрузка прервется. На рисунке рис. 413 изображен процесс поиска, зафиксированный в Wireshark.

../_images/image32.png

рис. 413 Процесс поиска файла boot-меню

Файл содержит инструкции по загрузке необходимых компонентов, включая ядро операционной системы и initrd. В настройках загрузчика можно указать IP-адрес другого TFTP-сервера, если нужные файлы расположены там.

Что касается загрузчика GRUB, то для него все пути должны быть прописаны в файле grub/grub.cfg.

  1. TFTP/HTTP передает запрашиваемый файл.

  2. PXE передает управление пользователю, на случай если требуется ручная правка пути дальнейшей загрузки.

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

  4. BIOS boot/GRUB запрашивает файлы ядра, initrd и preseed-файл.

  5. TFTP/HTTP передает запрашиваемые файлы.

  6. Установщик ОС запрашивает необходимые пакеты.

  7. HTTP сервер передает запрашиваемые файлы.

  8. Установщик ОС проводит установку пакетов.

  9. Завершение установки.

Далее нам предстоит развернуть стенд в VirtualBox и на практике реализовать среду PXE.

Описание стенда

Для работы нам потребуются четыре виртуальных машины:

  • dc-1.ald.company.lan – контролер домена (10.0.1.11);

  • dhcp-1.ald.company.lan – сервер службы динамической настройки узла (10.0.1.30);

  • pxe-1.ald.company.lan – сервер службы установки ОС по сети (10.0.1.33);

  • pxe-test-1.ald.company.lan - клиентская машина без операционной системы.

Контроллер домена dc-1.ald.company.lan у нас уже есть, виртуальные машины dhcp-1.ald.company.lan следует создать и ввести в домен ald.company.lan. Процессы установки операционной системы Astra Linux и ввод машин в домен был подробно описан в предыдущих модулях нашего курса, поэтому дальше мы будем рассматривать назначение ролей Установки ОС по сети и Службы динамической настройки узла, а также настройку этих подсистем.

Службы динамической настройки узла

Установить подсистему Служба динамической настройки узла можно с портала управления ALD Pro на странице Роли и службы сайта ‣ Служба динамической настройки узла ‣ Новый сервер, см. рисунок рис. 414. Сайт является обязательным полем, но пока еще не используется в системе. В будущем эта привязка позволит делегировать права доступа на управление подсистемами.

../_images/image42.png

рис. 414 Создание нового DHCP-сервера

Salt-stack, начиная с версии ALD Pro 2.4.0, работает по pull-модели. Чтобы ускорить назначение роли, зайдите на сервер dhcp-1.ald.company.lan и выполните следующую команду:

sudo aldpro-roles --iud --action install

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

../_images/image52.png

рис. 415 Конфигурация DHCP-сервера

  • Основное с общей информацией службы и ее состоянием.

  • Конфигурация скрипта с настройкой для dhcpd.conf

  • Настройка сетевых интерфейсов с настройкой для isc-dhcp-server

Перейдите во вкладку Настройка сетевых интерфейсов. Для запуска dhcp потребуется указать INTERFACESv4, обычно это eth0. INTERFACESv6 оставляем пустым. см. рисунок рис. 416

../_images/image23.png

рис. 416 Конфигурация интерфейса

Оставьте комментарий в соответствующем поле и сохраните введенные изменения. Переходите во вкладку Конфигурация скрипта и добавьте туда следующие строки:

# dhcpd.conf
authoritative;

option domain-name "ald.company.lan";
option domain-name-servers 10.0.1.11;
default-lease-time 600;
max-lease-time 7200;
next-server 10.0.1.33;
subnet 10.0.1.0 netmask 255.255.255.0 {
  range dynamic-bootp 10.0.1.200 10.0.1.240;
  option broadcast-address 10.0.1.255;
  option routers 10.0.1.1;
}
option architecture code 93 = unsigned integer 16;
if option architecture = 00:07 {
  filename "bootx64.efi";
} elsif option architecture = 00:09 {
  filename "bootx64.efi";
} else {
  filename "lpxelinux.0";
}

В данном конфигурационном файле были определены следующие опции:

  • authoritative – указывает, что данный DHCP-сервер используется как единственный в данной сети;

  • option domain-name – задает имя, которое клиенты используют при запросах к DNS;

  • option domain-name-servers – адрес DNS-сервера;

  • default-lease-time – срок аренды в секундах, который DHCP-сервер устанавливает для выделенного IP-адреса;

  • max-lease-time - максимальный срок аренды в секундах, который DHCP-сервер устанавливает для выделенного IP-адреса;

  • next-server – определяет адрес хоста, с которого загружается файл начальной загрузки.

После опций идет блок с объявлением subnet 10.0.1.0 и netmask /24:

  • range dynamic-bootp – диапазон IP-адресов для выдачи клиентам;

  • option broadcast-address – адрес широковещательной рассылки;

  • option routers – адрес маршрутизатора.

В конце описано правило для отправки конкретного загрузчика в зависимости от архитектуры клиента. Примеры архитектур указаны в табл. 34

табл. 34 Коды архитектуры клиента

Код

Архитектура

0x00 0x00

Intel x86PC

0x00 0x01

NEC/PC98

0x00 0x02

EFI Itanium

0x00 0x03

DEC Alpha

0x00 0x04

Arc x86

0x00 0x05

Intel Lean Client

0x00 0x06

EFI IA32

0x00 0x07

EFI BC

0x00 0x08

EFI Xscale

0x00 0x09

EFI x86-64

0x00 0x0A

ARM 32-bit UEFI

0x00 0x0B

ARM 64-bit UEFI

0x00 0x0C

PowerPC Open Firmware

0x00 0x0D

PowerPC ePAPR

0x00 0x0E

POWER OPAL v3

0x00 0x0F

x86 UEFI boot from HTTP

0x00 0x10

x64 UEFI boot from HTTP

0x00 0x11

EBC boot from HTTP

0x00 0x12

ARM UEFI 32-bit boot from HTTP

0x00 0x13

ARM UEFI 64-bit boot from HTTP

0x00 0x14

PC/AT BIOS boot from HTTP

0x00 0x15

ARM 32-bit U-Boot

0x00 0x16

ARM 64-bit U-Boot

0x00 0x17

ARM U-Boot 32-bit boot from HTTP

Для оперативного обновления конфигурации DHCP дайте на сервере dhcp-1.ald.company.lan команду:

sudo aldpro-roles --action update --subsystem_settings dhcp

Проверьте, что служба DHCP запустилась и функционирует:

sudo systemctl status isc-dhcp-server.service

Также можно посмотреть файл настроек DHCP /etc/dhcp/dhcpd.conf:

admin@dhcp-1:~$ cat /etc/dhcp/dhcpd.conf
# dhcpd.conf
authoritative;

option domain-name "ald.company.lan";
option domain-name-servers 10.0.1.11;
default-lease-time 600;
max-lease-time 7200;
next-server 10.0.1.33;
..............

И проверить его синтаксис:

sudo dhcpd -t

Информация по выданным IP-адресам доступна в файле /var/lib/dhcp/dhcpd.leases:

admin@dhcp-1:~$ cat /var/lib//dhcp/dhcpd.leases
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-4.4.1

# authoring-byte-order entry is generated, DO NOT DELETE
authoring-byte-order little-endian;

lease 10.0.1.200 {
  starts 4 2025/06/26 03:45:58;
  ends 4 2025/06/26 03:47:58;
  tstp 4 2025/06/26 03:47:58;
  cltt 4 2025/06/26 03:45:58;
  binding state free;
  hardware ethernet 08:00:27:a1:83:25;
  uid "\001\010\000'\241\203%";
  set vendor-class-identifier = "d-i";
}

Либо воспользуйтесь утилитой dhcp-lease-list:

admin@dhcp-1:~$ sudo dhcp-lease-list --all
Reading leases from /var/lib/dhcp/dhcpd.leases
MAC                IP              hostname       valid until         manufacturer
===============================================================================================
08:00:27:a1:83:25  10.0.1.200      -NA-           2025-06-26 03:47:58
08:00:27:a1:83:25  10.0.1.201      -NA-           2025-06-26 09:14:06
08:00:27:5a:ff:c3  10.0.1.203      -NA-           2025-06-26 10:36:24
08:00:27:5a:ff:c3  10.0.1.205      -NA-           2025-06-27 03:29:44

Служба установки ОС по сети

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

Повысить роль сервера до подсистемы Установка ОС по сети можно с портала управления ALD Pro на странице Автоматизация ‣ Установка ОС по сети ‣ Новый сервер, см. рисунок рис. 417.

../_images/image62.png

рис. 417 Добавление сервера установки ОС по сети

Укажите имя компьютера, имя сайта, а также выберете подготовленный DHCP-сервер. Если используется DHCP, установленный не при помощи средств ALD Pro, то установите галочку Использовать внешний DHCP-сервер.

Аналогично установке DHCP форсируем применение роли на сервере pxe-1.ald.company.lan:

sudo aldpro-roles --iud --action install

Структура файлов на сервере PXE

Все файлы установки PXE лежат в директории /var/www/tftp/, они доступны по протоколам HTTP и TFTP. Посмотреть содержимое этого каталога можно через HTTP, см. рисунок рис. 418 или через консоль, см. рисунок рис. 419

../_images/image72.png

рис. 418 TFTP-каталог в веб-браузере

../_images/image82.png

рис. 419 TFTP-каталог в консоли

Рассмотрим файлы в этом каталоге.

  • pxelinux.0 - загрузчик syslinux, поддерживает загрузку только по TFTP;

  • lpxelinux.0 - загрузчик syslinux, но более поздней версии с поддержкой загрузки по HTTP;

  • pxelinux.cfg/ - каталог содержащий boot-меню для загрузчиков pxelinux.0 и lpxelinux.0. Именования файлов в данном каталоге должны соответствовать спецификации PXE. (Принцип именования описан ранее в пункте 6 процесса загрузки);

  • bootx64.efi - загрузчик для UEFI-систем;

  • grub/ - содержит шрифты, конфигурацию и модули grub;

  • tokens/ - в данную папку при создании компьютера для pxe загрузки добавляется файл, содержащий одноразовый пароль для ввода ПК в домен;

  • isolinux/ - содержит картинки, используемые для фона загрузчика;

  • preseed.cfg - пример конфигурации preseed-файла;

  • ldlinux.c32 - библиотека для загрузки меню;

  • gfxboot.c32 - библиотека для реализации загрузочной темы GFXBoot;

  • chain.c32 - библиотека для реализации вложенных меню;

  • vesamenu.c32 - библиотека для реализации альтернативного меню (меню vesa);

  • libcom32.c32, libutil.c32 - вспомогательные библиотеки;

  • linux - ядро операционной системы для версии 1.7;

  • Initrd.gz - временная файловая система, используемая ядром linux при начальной загрузке.

В отдельных каталогах будут храниться созданные профили. В этих профилях содержатся preseed-файл, скрипты и настройки загрузчиков. Каталоги будут названы по уникальному номеру, который генерируется при создании профиля. Этот номер служит для идентификации профиля.

Настройка сервера PXE

Подготовьте установочные файлы для установки Астра 1.7.7. Для этого сперва на сервере pxe-1.ald.company.lan создайте каталог для их размещения.

sudo mkdir -p /var/www/tftp/se

Скопируйте файлы с установочного диска любым удобным способом: можно напрямую с диска, через SSH и так далее.

В примере ниже ISO-образ из CD-ROM монтируется в директорию с владельцем и группой www-data. Это позволяет сэкономить место на жестком диске виртуальной машины и сделать файлы доступными для веб-сервера Apache.

sudo mount /dev/sr0 -o ro,uid=$(id -u www-data),gid=$(id -G www-data) /var/www/tftp/se/

Не закрывайте подключение к серверу PXE, оно еще понадобится. Перейдите на портал управления ALD Pro, с его помощью вам надо будет создать скрипты загрузки.

Для начала подготовьте новый профиль. Перейдите в меню Профили загрузки и нажмите на кнопку Новый профиль. Веб-интерфейс предложит выбрать название профиля, см. рисунок рис. 420

../_images/image91.png

рис. 420 Добавление нового профиля

После того как профиль будет сохранен, станут доступны остальные вкладки:

  • Preseed - в данном меню конфигурируется, так называемый, preseed-файл. Этот файл представляет собой последовательность действий, которую требуется проходить во время установки (выбор языка, разметка дисков и тд.);

  • Postinstall - представляет собой скрипт, который исполняется после preseed-файла. Это позволяет сделать конфигурацию развертываемой машины, более специализированной и индивидуальной для каждого случая;

  • Первый запуск - также представляет собой скрипт, но данный скрипт будет исполнен во время первой перезагрузки, а не сразу после выполнения preseed-файла;

  • Настройка boot-меню - задает параметры, передаваемые в загрузчик syslinux. Настраивается для систем с BIOS;

  • GRUB - задает конфигурацию загрузчика GRUB. Настраивается для систем с UEFI.

При создании профиля появится новая директория (см. рисунок рис. 421). В ней будут файлы firststart.sh, postinstall.sh, preseed.cfg, а также вложенная директория upload. В этой директории будут храниться все конфигурации, которые вы зададите в веб-интерфейсе.

../_images/image102.png

рис. 421 Файлы профиля для автоматической установки ОС

Настройка boot-меню

Boot-меню — это файл, который настраивает первичный загрузчик syslinux. Его основная задача — загрузить ядро операционной системы, initrd и другие необходимые файлы для установки ОС. Кроме того, он предоставляет минимальный интерфейс для администратора.

Скопируйте и вставьте настройку boot-скрипта:

# Файл, определяющий систему загрузочного Меню.
UI vesamenu.c32
# Параметр, определяющий, будет ли автоматически выбран пункт меню по умолчанию.
# Если значение «1», выбор автоматический. Если выше есть параметр «UI vesamenu.c32», то
# параметр PROMPT игнорируется.
PROMPT 0
# Время, в течение которого будет отображаться меню в десятых долях секунды до выбора
# пункта по умолчанию.
TIMEOUT 100
# Пункт меню, выбранный по умолчанию.
# DEFAULT bootlocal
DEFAULT pxeinstall
# Указание пути к файлу изображения, которое будет использоваться в качестве фона.
menu background isolinux/aldpro_bios.png
# Заголовок меню.
menu title User Management Portal Boot Menu
# Метка пункта меню, также используется в параметре DEFAULT выше.
LABEL bootlocal
    # Этот пункт меню для загрузки с жесткого диска.
    menu label Boot from first HDD
    kernel chain.c32
    append hd0 0
# Текст, который будет отображаться в нижней части экрана в качестве подсказки к выбранному пункту меню.
TEXT HELP
Normal boot from HDD
ENDTEXT
LABEL pxeinstall
    menu label PXE operation system install
    kernel http://pxe-1.ald.company.lan/tftp/linux
    # Строка, определяющая параметры загрузки и установки ОС по сети.
    append initrd=http://{SELF_IP_ADDR}/tftp/initrd.gz vga=788 auto=true priority=critical debian-installer/locale=ru_RU console-keymaps-at/keymap=ru hostname={HOSTNAME} domain={DOMAIN_REALM} astra-license/license=true url=http://{SELF_IP_ADDR}/tftp/{PROFILE_UNIQ_NAME}/{PRESEED_FILE_NAME} interface=auto netcfg/dhcp_timeout=60
TEXT HELP
Install AstraLinux Operating System
ENDTEXT

В этом boot-файле предусмотрено две кнопки. Первая запускает установку с локального диска, вторая — через PXE. По умолчанию система выбирает сетевую установку.

Для bootlocal описаны:

  • Текст кнопки - Boot from first HDD;

  • Использование - chain.c32;

  • Загрузка с hd0 - 0.

Для pxeinstall описаны:

  • Текст кнопки - PXE operation system install;

  • kernel - путь к архиву с ядром;

  • append - содержит параметры ядра:
    • initrd - путь к архиву с временной файловой системой;

    • vga - параметр ядра, отвечающий за разрешение экрана;

    • auto - параметр отвечает за автозагрузку;

    • debian-installer/locale=ru - определение локали;

    • console-keymaps-at/keymap=ru - определение используемой раскладки;

    • hostname = - указание имени хоста;

    • domain = - указание используемого домена;

    • astra-license/license=true - принятие лицензионного соглашения;

    • url= - путь к preseed-файлу;

    • interface = auto, netcfg/dhcp_timeout=60 - параметры сетевого интерфейса.

Обратите внимание, что в скриптах можно применять встроенные переменные:

  • POSTINSTALL_FILE_NAME - название postinstall скрипта;

  • PRESEED_FILE_NAME - название файла preseed;

  • FIRSTSTART_FILE_NAME - название firstinstall скрипта;

  • PROFILE_UNIQ_NAME - уникальное имя профиля. Им будет названа директория внутри /var/www/tftp. В этой директории будут храниться все файлы, связанные с данным профилем;

  • SELF_IP_ADDR - доменное имя сервера автоматизации установки ОС;

  • REPOSITORY_SERVER - доменное имя сервера репозиториев;

  • DOMAIN_REALM - область действующего домена;

  • DC_HOSTNAME - доменное имя контроллера домена.

GRUB

Пример конфигурации GRUB:

# GRUB configuration

if loadfont $prefix/font.pf2 ; then
  set gfxmode=800x600
  set gfxpayload=keep
  insmod efi_gop
  insmod efi_uga
  insmod video_bochs
  insmod video_cirrus
  insmod gfxterm
  insmod png
  terminal_output gfxterm
fi

if background_image /isolinux/aldpro.png; then
  set color_normal=light-gray/black
  set color_highlight=white/black
else
  set menu_color_normal=cyan/blue
  set menu_color_highlight=white/blue
fi

# Установка Astra Linux Special Edition
menuentry 'Install AstraLinux Operating System' {
    set background_color=black
    linux    (http,pxe-1.ald.company.lan)/tftp/linux modprobe.blacklist=evbug debian-installer/allow_unauthenticated=true auto=true priority=critical debian-installer/locale=en_US console-keymaps-at/keymap=ru hostname={HOSTNAME} domain={DOMAIN_REALM} astra-license/license=true url=http://pxe-1.ald.company.lan/tftp/{PROFILE_UNIQ_NAME}/{PRESEED_FILE_NAME} interface=auto netcfg/dhcp_timeout=60
    initrd   (http,pxe-1.ald.company.lan)/tftp/initrd.gz
}

Первая часть конфигурации включает модули, которые загружаются из директории /var/www/tftp/grub/x86_64-efi.

Затем следует графическая часть, после которой идут параметры для дальнейшей загрузки. Эти параметры очень похожи на те, что указаны в скрипте boot-меню.

Поиск конфигурации GRUB задается в файле /var/www/tftp/grub/grub.cfg:

admin@pxe-1:~$ cat /var/www/tftp/grub/grub.cfg
regexp --set=1:m1 --set=2:m2 --set=3:m3 --set=4:m4 --set=5:m5 --set=6:m6  '^([0-9a-f]{1,2})\:([0-9a-f]{1,2})\:([0-9a-f]{1,2})\:([0-9a-f]{1,2})\:([0-9a-f]{1,2})\:([0-9a-f]{1,2})' "$net_default_mac"

mac=${m1}-${m2}-${m3}-${m4}-${m5}-${m6}

configfile=$prefix/grub.cfg-$mac
source "$configfile"

По умолчанию при создании компьютера для автоматической установки в папке grub/ будет помещен файл с названием grub.cfg-{MAC-адрес созданного компьютера}.

regexp –set при помощи регулярного выражения присваивает переменным m1-6 значения MAC-адреса клиента, после чего объявляются переменные mac и configfile, определяющие название требуемой конфигурации, и идет поиск.

Также в конфигурацию grub аналогично syslinux добавлен путь по умолчанию, на случай если специально подготовленных настроек не предусмотрено.

Внимание

Во время сетевой загрузки в Virtualbox могут возникать проблемы при включенном режиме EFI. Наблюдаются ошибки на 7-ой версии Virtualbox и тестирование на последних версиях также показали неудачные результаты. Проверенной считается версия 6.1.40.

Особенности установки ОС по сети на компьютерах с UEFI

Внимание

На компьютерах с UEFI может потребоваться отключение функции Secure Boot.

Secure Boot – это функция безопасности, реализованная в современных компьютерных системах, которая защищает от неавторизованного или вредоносного программного обеспечения во время загрузки. Она обеспечивает запуск только доверенных и подписанных загрузчиков операционной системы, драйверов и прошивки, тем самым предотвращая загрузку несанкционированного кода или вредоносного программного обеспечения.

Существуют несколько сценариев, когда вам может потребоваться отключить Secure Boot в UEFI:

  • Неподдерживаемые операционные системы - Secure Boot требует, чтобы операционная система имела действительную цифровую подпись, распознаваемую UEFI-прошивкой системы. Если вы пытаетесь установить или загрузить операционную систему, у которой нет распознаваемой подписи, например, некоторые дистрибутивы Linux или более старые версии Windows, система может препятствовать процессу загрузки. Отключение Secure Boot позволяет обойти это ограничение;

  • Проблемы совместимости драйверов или оборудования - в некоторых случаях могут возникать проблемы совместимости между определенными драйверами, компонентами оборудования и Secure Boot. Если определенный драйвер или компонент оборудования не имеет цифровой подписи или не соответствует требованиям UEFI-прошивки, это может препятствовать нормальной загрузке системы. Отключение Secure Boot может помочь вам устранить такие проблемы совместимости;

  • Расширенная конфигурация системы - некоторые изменения или настройки системы, такие как двойная загрузка нескольких операционных систем или установка альтернативных загрузчиков, могут потребовать отключения Secure Boot. Эти модификации часто включают пользовательские загрузчики или настройки загрузки, которые не имеют необходимых цифровых подписей, чтобы удовлетворить требования Secure Boot.

Чтобы включить EFI-режим в VirtualBox, нужно активировать соответствующую опцию в разделе Система в настройках виртуальной машины, см. рисунок рис. 422.

../_images/image112.png

рис. 422 Включение EFI-режима в VirtualBox

Если у GRUB возникнут проблемы с сетью при загрузке файлов с TFTP/HTTP-сервера, также рекомендуется поменять тип адаптера на virtio-net, это можно сделать в настройках сети, см. рисунок рис. 423.

../_images/image121.png

рис. 423 Настройка сетевого адаптера в VirtualBox

Preseed

Preseed - это файл подготовленных ответов в специальном формате. Для него характерно использование ключевого слова d-i <значение параметра>. Он очень распространен и используется с установщиком debian.

Примечание

Комментарии в этом скрипте нужно писать на отдельных строках.

Пример preseed-файла:

# Репозиторий сетевой установки
# Использовать протокол HTTP
d-i mirror/protocol string http

# Адрес сервера, где хранятся установочные файлы
#d-i mirror/http/hostname string pxe-1.ald.company.lan
d-i mirror/http/hostname string {SELF_IP_ADDR}

# Путь к установочным файлам на сервере относительно корня HTTP-сервера.
d-i mirror/http/directory string /tftp/se

# Локаль и языки
d-i mirror/country string manual

# Установка только выбранной локали (страна и язык).
d-i debian-installer/locale string ru_RU

# Опции могут быть настроены индивидуально для большей гибкости
d-i debian-installer/locale select ru_RU.UTF-8
d-i debian-installer/language string ru
d-i debian-installer/country string RU
d-i debian-installer/keymap string ru

# Выбор раскладки клавиатуры для консоли (во время установки)
# Выбор архитектуры клавиатуры (AT, MAC, USB)
d-i console-tools/archs select at
d-i console-keymaps-at/keymap select ru
d-i console-setup/toggle string Alt+Shift
d-i console-setup/layoutcode string ru

# Настройка способа переключения раскладки клавиатуры
d-i keyboard-configuration/toggle select Alt+Shift

# Указание кода раскладки клавиатуры
d-i keyboard-configuration/layoutcode string ru
d-i keyboard-configuration/xkb-keymap select ru
d-i languagechooser/language-name-fb select Russian
d-i countrychooser/country-name select Russia


# netcfg выберет активный сетевой интерфейс, если такой имеется. Если
# есть более одного интерфейса, то при данной настройке список
# интерфейсов выводиться не будет.
d-i netcfg/choose_interface select auto

# Статическая настройка сети.
# d-i netcfg/get_nameservers string 192.168.1.1
# d-i netcfg/get_ipaddress string 192.168.1.42
# d-i netcfg/get_netmask string 255.255.255.0
# d-i netcfg/get_gateway string 192.168.1.1
# d-i netcfg/confirm_static boolean true

# Выбор установки программного обеспечения, не подпадающего под критерии свободного ПО.
# Содержит ПО, не отвечающее критериям свободного ПО
d-i apt-setup/non-free boolean true
# Пакеты свободного ПО, использующие зависимости не из ветки main
d-i apt-setup/contrib boolean true

# Выбор сервисов обновления
d-i apt-setup/services-select none

# Установка часов для UTC
d-i clock-setup/utc boolean true
# Часовой пояс
d-i time/zone string Europe/Moscow
# Нужно ли синхронизировать время с NTP-сервером
d-i clock-setup/ntp boolean false

# Автоматическое создание разделов диска
# Выбор файловой системы
d-i partman-base    partman/default_filesystem      string  btrfs

# Использование всего объема диска
d-i partman-auto/init_automatically_partition \
      select Авто - использовать весь диск

# Выбор метода. На данный момент существуют три метода:
# - regular  использования обычных типов разделов для вашей архитектуры;
# - lvm  использование LVM для создания разделов;
# - crypto  использование LVM на зашифрованном разделе.
d-i partman-auto/method string regular

# Если один из дисков, который нужно разметить с помощью автоматической
# разметки, содержит старую конфигурацию LVM, то пользователю выдаётся
# предупреждение. Ответ можно автоматизировать...
d-i partman-auto/purge_lvm_from_device boolean true
# и подтвердить запись LVM-разделов
d-i partman-lvm/confirm boolean true

# Создание разделов для режима BIOS:
#d-i partman-auto/choose_recipe select atomic

# Создание разделов для режима UEFI:
#d-i partman-auto/choose_recipe select /lib/partman/recipes-amd64-efi/30atomic


# Не задавать вопросы во время создания разделов
d-i partman/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
# Записать изменения на диск
d-i partman/confirm boolean true
# Если выбрано шифрование диска, эта опция управляет стиранием диска перед шифрованием
d-i partman-auto-crypto/erase_disks     boolean true
# Указывает, нужен ли раздел SWAP или нет
d-i partman-basicfilesystems/no_swap boolean    false
# Продолжать создание разделов после ошибки
d-i partman-target/mount_failed boolean true
d-i partman-partitioning/unknown_label boolean  true
d-i partman-lvm/vgdelete_confirm boolean        true
# Подтвердить запись изменений на диск
d-i partman-lvm/confirm boolean true
# Подтверждает перезапись
d-i partman/confirm_nooverwrite boolean true
# Продолжение установки без загрузки модулей ядра
d-i anna/no_kernel_modules boolean true
# Устанавливаемый пакет с образом ядра. none  ядро устанавливать не нужно
d-i base-installer/kernel/image string linux-image-generic

# Создавать пользователя во время установки
d-i passwd/make-user boolean true
# Полное имя пользователя
d-i passwd/user-fullname string localadmin
# Имя пользователя
d-i passwd/username string localadmin
# Пароль пользователя в открытом виде
d-i passwd/user-password password AstraLinux
# Повторение пароля пользователя в открытом виде
d-i passwd/user-password-again password AstraLinux
# Пароль пользователя в виде MD5-хеша
#d-i passwd/user-password-crypted password [MD5 хеш]

# Использование репозиториев без проверки gpg-ключа.
d-i debian-installer/allow_unauthenticated string true
# Диалог выбора программного обеспечения
tasksel tasksel/first multiselect Base packages, Fly desktop, SSH server
tasksel tasksel/astra-feat-setup multiselect
# Дополнительные пакеты
# Специфичные для Астры параметры
d-i astra-additional-setup/os-check select Maximum security level Smolensk
d-i astra-additional-setup/additional-settings-smolensk multiselect Enable Mandatory Integrity Control, Enable Mandatory Access Control, Disable ptrace capability
#d-i astra-additional-setup astra-additional-setup/automatic-network-disable multiselect
#d-i astra-additional-setup/automatic-network-disable multiselect
#d-i desktop-tablet-mode-switch/tablet-mode multiselect

# Некоторые версии программы установки могут отсылать отчёт
# об установленных пакетах. По умолчанию данная возможность
# выключена, но отправка отчёта помогает проекту
# определить популярность программ и какие из них включать на CD.
astra-license astra-license/license boolean true
popularity-contest popularity-contest/participate boolean false

# Только одна ОС
d-i grub-installer/only_debian boolean true
# Установщик должен учитывать возможное наличие другой ОС на диске (мультизагрузка)
d-i grub-installer/with_other_os boolean true
# Пароль загрузчика GRUB в открытом виде
d-i grub-installer/password password AstraLinux
d-i grub-installer/password-again password AstraLinux
grub-installer grub-installer/password-mismatch error
# Пароль GRUB в виде MD5-хеша
#d-i grub-installer/password-crypted password [MD5 хеш]

# Не показывать диалог окончания установки
d-i finish-install/reboot_in_progress note
d-i finish-install/exit/poweroff boolean true
# Команда, выполняемая на последней стадии установки
d-i preseed/late_command string in-target systemctl enable ssh; \
    in-target bash -c "apt-get -y purge linux-image-*-hardened"; \
    in-target bash -c "apt-get -y autoremove --purge"; \
    in-target bash -c "sed -i 's/deb-src/#deb-src/g' /etc/apt/sources.list"; \
    in-target bash -c "/usr/bin/wget -O /tmp/postinstall.sh http://pxe-1.ald.company.lan/tftp/{PROFILE_UNIQ_NAME}/{POSTINSTALL_FILE_NAME}";\
    in-target bash -c "/bin/sh -x /tmp/postinstall.sh";\
    echo

Postinstall и Firstinstall

Postinstall — это скрипт, который запускается после выполнения файла preseed и его директивы late_command. Для удобства отладки, поддержания порядка и разделения функционала на отдельные задачи рекомендуется разбить весь процесс на разные скрипты. Каждый из них может выполнять уникальные задачи, специфичные для инфраструктуры и конкретной машины. Postinstall-скрипт также может создавать отдельный systemd-unit, который вызывает следующий скрипт, называемый скриптом первоначальной загрузки.

При добавлении нового компьютера в Перечень компьютеров установки ОС по сети PXE-сервер генерирует токен в файле /var/www/tftp/tokens/$host-fqdn.pwd и создает запись о компьютере в LDAP-каталоге. Благодаря этому механизму машину можно сразу после развертывания ввести в домен.

Ниже представлены примеры Postinstall- и Firstinstall-скриптов для реализации ввода машины в домен.

Пример Postinstall-скрипта:

#!/bin/bash
set -x
# Включает SSH-сервер.
sudo systemctl enable ssh
# Добавление файла с указанием репозиториев с нужной версией ALD Pro.
cat <<EOL > /etc/apt/sources.list.d/aldpro.list
deb https://dl.astralinux.ru/aldpro/frozen/01/3.0.0/ 1.7_x86-64 main base
EOL

cat <<EOL > /etc/apt/sources.list
deb https://dl.astralinux.ru/astra/frozen/1.7_x86-64/1.7.7/uu/2/repository-base/ 1.7_x86-64 main contrib non-free
EOL

cat <<EOL > /etc/apt/preferences.d/aldpro
Package: *
Pin: release n=generic
Pin-Priority: 900
EOL

# Скачивание с сервера установки ОС по сети скрипта firststart.sh.
wget http://{SELF_IP_ADDR}/tftp/{PROFILE_UNIQ_NAME}/{FIRSTSTART_FILE_NAME} -O /usr/bin/firststart.sh

# Создание файла для запуска сервиса, который выполнит скрипт firststart.sh
cat <<EOL > /etc/systemd/system/firststart.service
[Unit]
Wants=network-online.target
After=network-online.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/firststart.sh start

[Install]
WantedBy=multi-user.target
EOL
chmod 774 /usr/bin/firststart.sh
systemctl enable firststart || true

Пример скрипта первого запуска (Firstinstall):

#!/bin/bash
set -x
case $1 in
    start)
        exec 1> /var/log/pxeinstall.log
        apt-get update
        export DEBIAN_FRONTEND=noninteractive
        apt-get install -yq aldpro-client wget
        mkdir -p /etc/ssl/freeipa
        wget -O /root/token http://{SELF_IP_ADDR}/tftp/tokens/$(hostname -f).pwd
        /opt/rbta/aldpro/client/bin/aldpro-client-installer -i -f -c {DOMAIN_REALM} --pc -d $(hostname -s) -p $(cat /root/token)
        systemctl disable firststart
        rm /etc/systemd/system/firststart.service
        rm /usr/bin/firststart.sh
        rm /root/token
        reboot
        ;;
    stop)
        systemctl disable firststart
        ;;
    *)
        echo "$Usage: $0 {start|stop}"
        ;;
esac

После того как все скрипты будут сохранены, форсируйте применение новых настроек на сервере PXE:

sudo aldpro-roles --subsystem_settings os

Обратите внимание, в каталоге upload профиля загрузки появятся файлы скриптов, которые были созданы на портале управления:

admin@pxe-1:~$ tree /var/www/tftp/
/var/www/tftp/
├── 4aea790b-0aa7-4c78-a517-4f8eac9ac773
│   ├── firststart.sh
│   ├── postinstall.sh
│   ├── preseed.cfg
│   └── upload
│       ├── boot
│       ├── firststart
│       ├── grub
│       ├── postinstall
│       └── preseed

Перечень компьютеров

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

Для начала создайте новую виртуальную машину в VirtualBox:

../_images/image152.png

рис. 424 Новый компьютер для автоматической установки ОС

Поле Образ ISO оставьте пустым, Тип: Linux, Версия: Other Linux (64-bit)

В меню Система ‣ Материнская плата включите поддержку EFI:

../_images/image162.png

рис. 425 Включите поддержу EFI

Укажите остальные настройки: RAM 2048, число процессоров - 2, объем диска - 20ГБ:

../_images/image172.png

рис. 426 Итоговые настройки нового ПК

Итак, новый компьютер создан в VirtualBox. Теперь следует указать его в настройках сервера PXE. Для этого на портале управления перейдите по пути Автоматизация ‣ Установка ОС по сети ‣ Сервер: pxe-1.ald.company.lan ‣ Перечень компьютеров. Укажите данные, необходимые для автоматической загрузки и классификации компьютера, см. рисунок рис. 427:

../_images/image181.png

рис. 427 Добавление компьютера для автоматической установки

  • Имя компьютера - имя которое отображается в веб-интерфейсе;

  • Имя сайта - выбираем нужный сайт;

  • Профиль загрузки - выбираем профиль, на рисунке 8 выбран ранее созданный профиль, который еще не был заполнен;

  • MAC-адрес - указываем MAC-адрес того АРМа, на который предполагается установка выбранного профиля;

  • Модель - можно рассматривать как комментарий, для удобства и классификации;

  • Домен - заполняется автоматически.

Для станций, работающих на VirtualBox посмотреть MAC-адрес можно во вкладке Network, изображенной на рисунке рис. 428:

../_images/image192.png

рис. 428 MAC-адрес сетевого адаптера в VirtualBox

После сохранения нового компьютера, он появится в веб-интерфейсе.

../_images/image201.png

рис. 429 Запись компьютера в Перечне компьютеров

Кроме того, запись этого компьютера появится в LDAP, см. рисунок рис. 430:

../_images/image211.png

рис. 430 Запись компьютера в LDAP

Обновите конфигурацию на сервере PXE:

sudo aldpro-roles --subsystem_settings os

После успешного обновления конфигурации в каталоге pxelinux.cfg автоматически появятся несколько файлов, сгенерированных на основе файла /var/www/tftp/4aea790b-0aa7-4c78-a517-4f8eac9ac773/upload/boot. Имена этих файлов будут иметь вид число-{MAC адрес клиента написанный через дефис}:

admin@pxe-1:~$ tree /var/www/tftp/
/var/www/tftp/
..................
├── pxelinux.cfg
│   ├── 01-08-00-27-24-fb-ed
│   ├── 06-08-00-27-24-fb-ed
│   ├── 07-08-00-27-24-fb-ed
│   ├── 0f-08-00-27-24-fb-ed
│   ├── 10-08-00-27-24-fb-ed
│   ├── 11-08-00-27-24-fb-ed
│   ├── 12-08-00-27-24-fb-ed
│   ├── 13-08-00-27-24-fb-ed
│   └── 14-08-00-27-24-fb-ed

Таким образом, для каждого компьютера с BIOS будут свои файлы. Если вам нужна другая логика выбора загрузочных файлов, создайте свои файлы. Например, можно создать файл с именем default в директории pxelinux.cfg/ и записать в него содержимое одного из boot-файлов. Это позволит всем компьютерам без предварительных настроек автоматически загружаться.

Для компьютеров с UEFI также будет автоматически сгенерирован файл в каталоге grub с названием grub.cfg-{mac-адрес созданного компьютера}:

admin@pxe-1:~$ tree /var/www/tftp/
/var/www/tftp/
..................
├── grub
│   ├── font.pf2
│   ├── grub.cfg
│   ├── grub.cfg-08-00-27-24-fb-ed
..................

Включите виртуальную машину. Вы увидите диалоговое окно, изображенное на рисунке рис. 431. Чтобы попасть в UEFI меню VirtualBox, выполните команду exit.

../_images/image132.png

рис. 431 UEFI Interactive Shell в VirtualBox

После можно начать загрузку по PXE (Рисунок рис. 432).

../_images/image141.png

рис. 432 Запуск PXE-загрузки в EFI-режиме

Начнется полностью автоматическая установка ОС Астра Линукс.

Примечание

Скрипты Postinstall и Firstinstall установят клиентскую часть ALD Pro и подключат компьютер к домену. Скрипт Firstinstall запустится после первой перезагрузки. Обычно его выполнение занимает 4-5 минут, после чего компьютер автоматически перезагрузится. В этот период лучше не трогать устройство и дождаться завершения процесса. После перезагрузки можно будет войти в систему как под локальной учетной записью, так и через доменную.

Примечание

Согласно файлу preseed, имя локального администратора будет localadmin, его пароль - AstraLinux.

Загрузка других дистрибутивов Linux

Из рассмотренного материала следует, что в подсистеме PXE есть все инструменты для установки любых Linux-систем. Некоторые шаги сейчас нужно выполнять вручную, но в будущем их можно будет сделать в веб-интерфейсе.

Помните, что для разных дистрибутивов нужны свои ядра и initrd, которые, вероятно, придется подготавливать для каждого конкретного дистрибутива. Обычно эти файлы находятся в папке netinstall в корне ISO-образа.

Что касается файла ответов (preseed), то его формат зависит от установщика операционной системы. Мы обсуждали только preseed, который совместим с установщиком debian-installer. Однако для других дистрибутивов Linux может понадобиться другой формат этого файла. В табл. 35 указаны дистрибутивы, установщики и форматы файлов ответов.

табл. 35 Установщики Linux

Дистрибутив

Установщик

Формат файла ответов

Debian

debian-installer

Preseed (текст)

Ubuntu Server (с 20.04)

Subiquity

autoinstall (YAML)

Fedora/RHEL

Anaconda

Kickstart

OpenSUSE

AutoYaST

XML

CoreOS

Ignition

JSON/YAML

NixOS

Nix

Nix-конфиг

Пример файла preseed в формате YAML:

# Автоматически подтвердить согласие с лицензией
license: true

# Список доступных языков системы
locales:
  - en_US
  - ru_RU

# Список доступных раскладок клавиатуры
layouts:
  - us
  - ru

# Настройки комбинации клавиш для переключения раскладки клавиатуры (alt_shift_toggle, ctrl_shift_toggle, ...)
# grp options from /usr/share/X11/xkb/rules/base.lst
layout_switch_keys:
  - ctrl_shift_toggle

# Настройки часового пояса
timezone: Europe/Moscow

# Настройки синхронизации времени (опционально)
# Для того, чтобы служба синхронизации времени автоматически запускалась после установки ОС следует указать ntp_state: True.
# При этом если значение параметра ntp_settings не задано, то для синхронизации будет использоваться сервер ntp1.vniiftri.ru.
ntp_settings:
  ntp_state: True # Статус синхронизации
  ntp_server: 'ntp1.vniiftri.ru' # Сервер для синхронизации (опционально)

# Настройки пользователя
user:
  username: astra # Имя пользователя
  # Ниже приведены примеры настройки паролей пользователя и GRUB
  # Supported plain and hashed passwords (see man chpasswd and man crypt)
  password: Passw0rd
  # или
  # password-encrypted: $6$hackmehackme$ZzN7PixBxkr6xS2Mdc9rUgjBsF/HimXDXgDGM48JOq/fBnuOKIf42/wOjwR9vA/D2Blwbz.82AGwjxnyaVntX0
  # Supported plain and encrypted GRUB passwords (see man grub-mkpasswd-pbkdf2)
  grub-password: Passw0rd
  # или
  # grub-password-encrypted: <зашифрованный пароль GRUB>

host:
  # Имя хоста
  hostname: astra
  # Генерировать случайный суффикс вида "-NNNNN" к имени хоста (не обязательно)
  generate_sub_name: True

# Настройки репозиториев
# При установке по сети требуется обязательно указать в данной секции удаленный репозиторий. При установке из образа определять данную секцию не обязательно
repos:
  debootstrap:
    name:
      default: "Main repository"
      ru_RU: "Основной репозиторий"
    url: 'deb https://dl.astralinux.ru/astra/stable/1.8_x86-64/repository-main/ 1.8_x86-64 main contrib non-free'

# Ядро, которое будет установлено
kernel-package: 6.1.50-1-generic

# Список компонентов системы, которые будут установлены
tasks:
  - Base
  - Fly
  - hidden

# Идентификатор режима защищенности, который будет применен к устанавливаемой системе (в данном примере будет применен максимальный режим)
mode: 2

# Список дополнительных настроек (настройки безопасности), которые будут применены к устанавливаемой системе
features:
  - astra-mic-control
  - astra-mac-control
#  - astra-ptrace-lock
#  - astra-sudo-control
# Ниже приведены примеры конфигурации разметки

# В данном примере разметка будет выполнена в соответствии с заранее прописанным шаблоном из указанного файла storage:
#  # Device is enought. Default template will be used.
#  device: /dev/sdb # Диск, к которому будет применена разметка, и на который будет установлена система
#  template: default_template.txt # Файл шаблона разметки
# Выбор типа таблицы разделов:
# 1. Если не используется разметка дисков с помощью опции config, то указать тип таблицы разделов можно с помощью опций gpt и bios:
#       gpt: True # Создать таблицу разделов GPT. Рекомендованный вариант.
#       bios: True # Произвести установку системы в режиме совместимости с BIOS
# 2. Если используется опция config, то тип таблицы разделов указывается в команде очистки разделов clearpart:
#       clearpart --all --disklabel=gpt # Рекомендованный вариант
#      или
#       clearpart --all --disklabel=msdos

# В данном примере полностью описывается шаблон разметки
# Формат шаблона  Kickstart
# Является аналогом ручной разметки
# При установке в режиме UEFI требуется описать разделы, необходимые для данного режима. Пример такого описания включен в шаблон:
# part /boot/efi --label=efi --fstype=ext2 --size=1024 --asprimary
storage:
# gpt: true # Выбор типа таблицы разделов. В данном примере не используется, так как далее для разметки диска используется опция confg,
# позволяющая детально задать шаблон разметки.
# Строки шаблона должны быть разделены последовательностью из двух символов "\n" (новая строка).  Опция config и шаблон разметки:
  config: "
    ignoredisk --only-use=sda|vda

    clearpart --all --disklabel=gpt

    bootloader --location=partition

    part biosboot --fstype=biosboot --size=2

    part /boot --label=boot --fstype=ext2 --size=1024 --asprimary

    part /boot/efi --label=efi --fstype=ext2 --size=1024 --asprimary

    part pv.lvm_part --grow --asprimary

    volgroup VG pv.lvm_part

    logvol / --fstype=ext4 --name=lv_root --vgname=VG --percent=100

    logvol swap --fstype=swap --name=lv_swap --vgname=VG --recommended"

# Аналог preseed/late_command в debian installer
# Команды будут выполнены в окружении инсталлятора
#late_command: "
#sudo apt-get download tree;
#sudo dpkg -i tree*.deb"

# late_command_intarget - то же самое, что и late_command с тем отличием, что команды будут выполнены в окружении устанавливаемой системы. Например:
#late_command_intarget: "
#sed -i 's/^XKBOPTIONS=.*/XKBOPTIONS=\"grp:ctrl_shift_toggle,grp_led,numpad:microsoft\"/' /etc/default/keyboard ;
#wget -O /usr/local/bin/update.sh ftp://192.168.1.7/al_update.sh;
#chmod +x /usr/local/bin/update.sh;
#wget -O /lib/systemd/system/update.service ftp://192.168.1.7/al_update.service;
#systemctl enable update.service"

Практика и тестирование

Заключение

Дополнительные источники информации