Работа с модулем установки ОС

Модуль установки операционных систем (ОС) позволяет устанавливать ОС на устройства, поддерживающие BIOS (Basic Input/Output System) и UEFI (Unified Extensible Firmware Interface), с помощью USB или носителя СD-ROM. При этом установка осуществляется по сети с использованием установщика iPXE.

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

Доменная модель:

Дистрибутив операционной системы

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

Включает:

  • ссылку на установочное ядро ОС во внешнем хранилище;

  • ссылку на файл временной файловой системы (initrd) во внешнем хранилище.

Профиль установки

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

Включает:

  • список опций, с которыми запускается установочное ядро ОС;

  • шаблон файла автоответов;

  • шаблон скрипта пост-установки.

В текущей версии продукта поддерживается только один скрипт пост-установки для профиля установки. Привязка нескольких скриптов к одному профилю недопустима и приведет к ошибке в процессе установки ОС.

Cпособ развертывания

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

Включает:

  • данные для создания root-пользователя ОС;

  • данные для создания локального пользователя ОС;

  • доменное имя устройства по умолчанию.

Шаблоны конфигурационных файлов

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

В общем случае шаблоны не являются универсальными (например, шаблон файла ответов существенно различается для семейства Debian и RedHat).

Поддерживается шаблонизация в формате jinja в части подстановки переменных и реализации логики формирования целевых файлов на основе шаблонов.

Поддерживаемые категории шаблонов:

  • файл автоответов;

  • скрипт пост-установки.

Поддерживаемые переменные подстановки:

  • переменные подстановки, которые задаются через конфигурационный файл — при указании значений таких переменных в конфигурационном файле к их именам необходимо добавить префикс lcm.provisioner.template-engine.template-placeholders;

    Пример:

    • в файле конфигурации модуля lcm-provisioner:

      lcm.provisioner.template-engine.template-placeholders.unattended_install_file_url=/v1/unattended_install_files
    • в шаблоне:

      {{unattended_install_file_url}}
  • обязательные переменные установки, необходимые для корректной работы модуля установки ОС:

    • lcm.provisioner.template-engine.template-placeholders.osmax_provisioner_base_url=http://<osmax-provisioner-host>:<port>;

    • lcm.provisioner.template-engine.template-placeholders.unattended_install_file_url=/v1/unattended_install_files.

  • переменные подстановки, вычисляемые для связки устройства со способом развертывания:

Наименование Описание Способ вычисления

hostname

Наименование устройства

Соответствует значению атрибута hostname устройства. Доступно для вычисления, если для устройства назначен способ развертывания

domain

Имя домена

Вычисляется по правилу: если сетевому интерфейсу устройства назначено доменное имя, то значение должно ему соответствовать; если значение не найдено, то возвращается значение доменного имени, указанное для связанного с устройством способа развертывания

mac

МAC-адрес

Вычисляется на основании MAC-адреса, указанного на сетевом интерфейсе устройства

architecture

Архитектура процессора

Вычисляется на основании архитектуры процессора устройства

initrd

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

Вычисляется как initrd-атрибут дистрибутива, который планируется к установке

kernel

Путь и имя файла, в котором содержится ядро операционной системы

Вычисляется как атрибут kernel дистрибутива, который планируется к установке

repository_url

URL-адрес репозитория, где размещается установочный дистрибутив

Вычисляется как атрибут repository_url дистрибутива, который планируется к установке

kernel_options

Дополнительные опции ядра, с которыми выполняется установка

Вычисляется как атрибут kernel_options (дополнительные опции ядра) профиля установки

unattended_install_file_url

Путь к файлу ответов

Заполняется URL API-метода функции v1/unattended_install_files

is_create_user

Признак необходимости создания локального пользователя

Заполняется значением атрибута is_create_user сущности «Способ развертывания»

password_hash_algorithm

Используемый hash-алгоритм для задания паролей, доступные значения: MD5 и SHA512

Заполняется значением атрибута hash_algorithm сущности «Способ развертывания»

root_crypted_password

Hash пароля root (MD5/SHA512)

Заполняется значением атрибута root_hash_password сущности «Способ развертывания»

user_full_name

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

Заполняется значением атрибута user_account.userFullName сущности «Способ развертывания», если атрибут is_create_user = true соответствует d-i passwd/user-fullname

user_name

Имя пользователя, логин

Заполняется значением атрибута user_account.userName сущности «Способ развертывания», если атрибут is_create_user = true

user_crypted_password

Hash пароля пользователя

Заполняется значением атрибута user_account.userHashPassword сущности «Способ развертывания», если атрибут is_create_user = true

osmax_provisioner_base_url

Cервер Осмакс, по которому можно получить скрипты и другую информацию

machine_id

Внутренний идентификатор устройства

Заполняется значением атрибута machine_id устройства

Загрузочный образ

Загрузочный образ, с помощью которого можно выполнить установку OC.

NOTE

В текущей версии продукта поддерживается только один тип загрузочного образа — универсальный загрузочный образ. Он содержит программу-загрузчик, которая переносится на автономный носитель.

API-методы, предоставляемые модулем установки ОС позволяют варьировать только имя формируемого ISO-образа и имя сущности, а формируемые загрузочные образы имеют одинаковое поведение.

Устройство

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

Включает:

  • hostname;

  • сетевой интерфейс (определяет MAC-адрес и доменное имя устройства);

  • ссылка на способ развертывания.

В ходе установки ОС устройство идентифицируется по его MAC-адресу.

Общее описание процесса установки ОС

  1. Необходимо подготовить носитель USB\CD-ROM с универсальным загрузочным образом. Для подготовки образа используется группа API-методов: /v1/bootable_images.

  2. С подготовленного носителя на устройство загружается универсальный загрузочный образ.

  3. Образ содержит универсальный IPXE-скрипт, который инициализирует сетевой интерфейс устройства и обращается к модулю установки ОС за IPXE-скриптом для конкретного устройства, указывая его MAC-адрес. Для этого используется API-метод /v1/boot_loader_configs.

  4. Модуль установки OC по MAC-адресу выполняет поиск устройства и связанный с ним способ развертывания, на основе этой информации рендерит шаблон IPXE-скрипта для конкретного устройства и отдает сформированный скрипт.

  5. Устройство загружает установочное ядро целевой ОС и начинает ее установку.

  6. После инициализации сетевого интерфейса установочное ядро запрашивает у модуля установки ОС файл автоответов, используя API-метод /v1/boot_loader_configs.

  7. Модуль установки ОС выполняет поиск устройства и связанный с ней способ развертывания по MAC-адресу, на основе этой информации рендерит шаблон файла автоответов для конкретного устройства и отдает сформированный скрипт.

  8. Установка ОС выполняется согласно внутренней логике ОС с использованием предоставленного файла автоответов. Если в конце файла автоответов есть вызов пост-установочного скрипта, то установочное ядро целевой ОС запрашивает у модуля установки ОС скрипт пост-установки, используя API-метод /v1/provisioning_scripts.

  9. Модуль установки OC выполняет поиск устройства и связанный с ней способ установки по machineId, на основе этой информации рендерит шаблон пост-установочного скрипта и отдает сформированный скрипт.

  10. Установочное ядро целевой ОС (или установленное ядро целевой ОС, в зависимости от команды вызова скрипта) выполняет скрипт, после чего установка завершается.

  11. Если установка выполнялась с USB-накопителя на машине с BIOS, необходимо извлечь USB-накопитель или изменить в BIOS порядок загрузки, отдав приоритет жесткому диску компьютера.

Настройка модуля установки ОС для обеспечения установки ОС на устройства

В комплект поставки модуля установки ОС входит предустановленный пример конфигурации, позволяющий выполнять установку ОС astra se 1.7.5.9. Конфигурация, описанная ниже, за исключением работы с устройствами, представлена в данном примере. Наименование способа развертывания примера — "Установка Astra Linux 1.7.5.9 c загрузочного образа".
  1. Создайте способ развертывания.

    1. Создайте дистрибутив ОС, используя группу API-методов /v1/installation_distros.

      Внешний источник файлов установочного ядра ОС и временной файловой системы (initrd) должен быть доступен по протоколу HTTP для устройств, на которые будет осуществляться установка ОС.
    2. Настройте шаблон IPXE-скрипта, используя API-метод /v1/templates/{templateId}.

      В текущей реализации модуля установки ОС всем способам развертывания автоматически назначается единый шаблон IPXE-скрипта c именем "BIOS iPXE universal base script".
    3. Создайте шаблон скрипта пост-установки, используя группу API-методов /v1/templates.

      Использование скрипта пост-установки является опциональным. Если вы предполагаете его использовать, загрузите соответствующий ему шаблон и пропишите вызов скрипта пост-установки в шаблоне файла автоответов.
    4. Создайте шаблон файла автоответов, используя группу API-методов /v1/templates.

      Если вы предполагаете использовать скрипт пост-установки, пропишите его вызов в скрипте автоответов.

      Пример:

       # вызов скрипта пост-установки
         in-target wget {{osmax_provisioner_base_url}}/v1/provisioning_scripts?machineId={{machine_id}} -O /tmp/post_install.sh; \
         in-target chmod +x /tmp/post_install.sh; \
         in-target /tmp/post_install.sh; \
    5. Обеспечьте доступность по HTTP-протоколу зеркал репозитория пакетов, планируемых к установке ОС для устройств, на которые планируется осуществлять установку.

      Используйте следующие команды скрипта автоустановки:
       d-i mirror/http/hostname
       d-i mirror/http/directory
    6. Обеспечьте наличие в шаблоне файла автоответов вызовов, обслуживающих регистрацию статуса установки ОС на стороне модуля установки ОС:

      # Регистрация старта установки (внутреннее использование)
      d-i    preseed/early_command string wget --method=put --body-data='{"status":"READY_TO_INSTALL"}' --header="content-type: application/json" -O- {{osmax_provisioner_base_url}}/v1/unprovisioned_machines/{{machine_id}}/status
      
      # Финальные действия при установке, для расширения шаблона можно добавлять любые кастомные действия перед командам "вызов скрипта пост-инсталляции" и "Регистрация установки"
      d-i preseed/late_command string \
      # Здесь размещается вызов скрипта постинсталляции если он используется
      # .. возможный вызов скрипта постинсталляции ..
      # Регистрация завершения установки (внутреннее использование)
          wget --method=put --body-data='{"status":"OS_INSTALLED"}' --header="content-type: application/json" -O- {{osmax_provisioner_base_url}}/v1/unprovisioned_machines/{{machine_id}}/status
    7. Создайте профиль установки, используя группу API-методов /v1/installation_profiles.

    8. Создайте способ развертывания, используя группу API-методов /v1/installation_recipes.

  2. Создайте загрузочный образ, используя группу API-методов /v1/bootable_images.

    Достаточно сформировать один загрузочный образ. Он является универсальным и подходит для всех способов развертывания.
  3. Создайте устройства, используя группу API-методов /v1/unprovisioned_machines или через пользовательский интерфейс «Кабинет Администратора».