Skip to content

Конфигурирование образа

Конфигурирование образа происходит с помощью YAML-файла конфигурации и команды apm system image build.

Базовый конфиг

Первоначальный файл с которого начинается конфигурация — /etc/apm/image.yml

apm system image build применяет изменения к текущему контейнеру исходя из настроек в image.yml.

Уточнение

При создании образа в CI/CD, файл с конфигурацией копируется с помощью Containerfile из репозиторий в контейнер по вышеуказанному пути

Переменные среды и поля конфигурационного файла используется в приоритете над конфигом и нужны для конфигурирования сборки в CI/CD. Подробнее в разделе «Переменные среды и поля конфигурационного файла»

Пример

ALT Atomic Core:

yml
image: ${{ Env.IMAGE }}

modules:
  - name: Set repos
    type: repos
    body:
      branch: sisyphus
      date: ${{ Env.YEAR }}.${{ Env.MONTH }}.${{ Env.DAY }}
      clean: true
      name: ${{ Env.IMAGE_NAME }}

  - type: packages
    body:
      update: true
      upgrade: true

  - name: Set branding
    type: branding
    body:
      name: alt-atomic-${{ Env.IMAGE_NAME }}
      build-type: ${{ Env.IMAGE_TYPE }}

  - name: Copy root
    type: copy
    body:
      source: root
      destination: /
      replace: true

  - type: include
    body:
      targets:
        - packages.yml
        - network.yml
        - apt-rpm.yml
        - filesystem.yml
        - systemd.yml
        - settings.yml
        - passwd.yml
        - disable-bins.yml

  - name: Configurate grub
    type: shell
    body:
      command: scripts/grub.sh

  - name: Update kernel
    type: kernel
    body:
      flavour: 6.12
      modules:
        - drm
      rebuild-initrd-method: dracut

  - name: Cleanup
    type: include
    body:
      targets:
        - cleanup.yml

Поля конфигурационного файла

Легенда

! — обязательное поле

ПолеОписание
image!Базовый образ для использования (ссылка на контейнер)
modulesСписок модулей
envПеременные среды. Могут быть задействованы в любом модуле

Модули (modules)

Массив модулей для выполнения

ПолеОписание
nameИмя модуля для логирования
typeТип тела модуля
idИдентификатор модуля. Подробнее в разделе «Идентификатор модуля»
envПеременные среды для модуля. Могут быть задействованы только в рамках данного модуля
ifУсловие в формате языка Expr
bodyТело модуля
outputДанные для вывода

Идентификатор позволяет обращаться к модулю для получения значений следующих полей:

  • Имя (name)
  • Тип (type)
  • Идентификатор (id)
  • Результат условного выражения (if)
  • Данные вывода (output)

Брендинг (branding)

Модуль branding — предназначен для выбора брендинга для устанавливаемого образа

ПолеОписание
nameИмя брендинга для пакетов (branding-<name>-*). Требует build-type
plymouth-themeТема загрузочного экрана Plymouth (plymouth-theme-<name>)
build-typeТип сборки, нужен для os-release. Требует name

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

  • stable
  • nightly
Пример

ALT Atomic Core:

  - name: Set branding
    type: branding
    body:
      name: alt-atomic-${{ Env.IMAGE_NAME }}
      build-type: ${{ Env.IMAGE_TYPE }}

Копирование (copy)

Модуль copy — предназначен для копирования файлов и директорий.

Легенда

! — обязательное поле

ПолеОписание
source!Путь объекта (что копировать)
destination!Путь назначения (куда копировать)
replaceЗаменять ли destination, если объект уже существует
Пример

ALT Atomic Core:

  - name: Copy root
    type: copy
    body:
      source: root
      destination: /
      replace: true

Git-модуль (git)

Модуль git — предназначен для работы с Git-репозиториями: установка зависимостей, сборка, установка результата работы в систему и прочее.

Легенда

! — обязательное поле

ПолеОписание
url!Ссылка на Git-репозиторий
command!Команды для выполнения из директории Git-репозитория
depsЗависимости для сборки (будут удалены после завершения работы модуля)
refВетка, коммит, тег или другой указатель
quietСокрытие вывода команд

Подключение других конфигов (include)

Модуль include — предназначен для подключения других конфигов.

Легенда

! — обязательное поле

ПолеОписание
targets!Относительные пути к YAML-конфигам для выполнения
Пример

ALT Atomic Core:

  - name: Cleanup
    type: include
    body:
      targets:
        - cleanup.yml

Работа с ядром (kernel)

Модуль kernel — предназначен для выбора версии (flavour) ядра, подключения дополнительных модулей, включения заголовков и пересборки initramfs.

ПолеОписание
flavourВерсия ядра
modulesИмена модулей ядер (kernel-module-<name>-<flavour> — массив из <name>)
include-headersВключать ли заголовки ядра
rebuild-initrd-methodМетод пересборки initramfs

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

  • dracut
Пример

ALT Atomic Core:

  - name: Update kernel
    type: kernel
    body:
      flavour: 6.12
      modules:
        - drm
      rebuild-initrd-method: dracut

Модуль link — предназначен для создания символических ссылок на объекты.

Легенда

! — обязательное поле

ПолеОписание
target!Где создать ссылку, абсолютный путь
to!Куда она будет вести
replaceЗаменить ли target, если уже существует
Пример

ALT Atomic Core

  - type: link
    body:
      target: /ostree
      to: /sysroot/ostree
      replace: true

Совмещение содержимого файлов (merge)

Модуль merge — предназначен для создания символических ссылок на объекты.

Легенда

! — обязательное поле

ПолеОписание
source!Путь до файла, содержимое которого нужно взять
destination!Путь до файла, куда нужно добавить содержимое

Создание директорий (mkdir)

Модуль mkdir — предназначен для создания директорий по указанным путям с определёнными правами владения.

Легенда

! — обязательное поле

ПолеОписание
targets!Пути, по которым нужно создать директории
perm!Права для создаваемых директорий в формате chmod (rwxrwxrwx)
Пример

ALT Atomic Core:

  - type: mkdir
    body:
      targets:
        - /sysroot
      perm: rwxr-xr-x

Перемещение объектов (move)

Модуль move — предназначен для перемещения объектов в файловой системе с возможность оставить ссылку вместо перемещённого объекта.

Легенда

! — обязательное поле

ПолеОписание
source!Объект для перемещения
destination!Место, куда переместить объект
replaceЗаменить объект по destination, если уже существует
create-linkСоздать символическую ссылку в source, которая будет указывать на destination
Пример

ALT Atomic Core:

  - type: move
    body:
      source: /etc/apt
      destination: /usr/share/apt
      create-link: true

Конфигурирование сети (network)

Модуль network — предназначен для формирования сетевых настроек.

Легенда

! — обязательное поле

ПолеОписание
hostname!Сетевое имя устройства
Пример

ALT Atomic Core:

  - type: network
    body:
      hostname: alt-atomic-${{ Env.IMAGE_NAME }}

Работа с пакетами (packages)

Модуль packages — предназначен для работы с пакетами: установка, удаление, обновление базы данных и самих пакетов.

ПолеОписание
installПакеты к установке
removeПакеты к удалению
updateОбновить ли базу данных (до транзакции)
upgradeОбновить ли пакеты
Пример

ALT Atomic Core:

  - type: packages
    body:
      install:
        - glxinfo
        - mesa-dri-drivers
      update: true
      upgrade: true

Удаление объектов (remove)

Модуль remove — предназначен для удаления объектов

Легенда

! — обязательное поле

ПолеОписание
targets!Путь до объектов, которые нужно удалить
insideОчистить объекты вместо удаления (удалить содержимое файла, удалить файлы в директории)
Пример

ALT Atomic Core:

  - name: Clean logs
    type: remove
    body:
      targets:
        - /var/log/README.logs
        - /var/log/rpmpkgs
      inside: true

Изменение содержимого файла (replace)

Модуль replace — предназначен для замены содержимого файла по регулярному выражению.

Легенда

! — обязательное поле

ПолеОписание
target!Путь до файла, который будет
pattern!Шаблон регулярного выражения
repl!То, что будет подставлено на место найденной подстроки (можно использовать группы)

Работа с репозиториями (repos)

Модуль replace — предназначен для очистки, установки собственных или предустановленных репозиториев, добавления заданий (тасков).

Легенда

! — обязательное поле

ПолеОписание
cleanОчистить репозитории
customКастомные записи в sources.list. Требует name
branchВетка репозитория ALT. Требует name
dateДата среза репозитория в формате YYYY.MM.DD или latest. Если пуст, берётся обычный репозиторий. Требует branch
tasksЗадачи (таски) для подключения в качестве репозиториев (указываются только номера). Требует name
nameИмя файла репозиториев
no-updateНе обновлять базу данных после сохранения репозиториев

Список доступных веток:

  • sisyphus
Пример

ALT Atomic Core:

  - name: Set repos
    type: repos
    body:
      branch: sisyphus
      date: ${{ Env.YEAR }}.${{ Env.MONTH }}.${{ Env.DAY }}
      clean: true
      name: ${{ Env.IMAGE_NAME }}

Выполнение скриптов (shell)

Модуль shell — предназначен для выполнения императивного кода на Bash.

Легенда

! — обязательное поле

ПолеОписание
command!Команды на выполнение
quietСокрытие вывода команд
Пример

ALT Atomic Core:

  - name: Set root password
    type: shell
    body:
      command: echo "root:root" | chpasswd

Работа с сервисами SystemD (systemd)

Модуль systemd — предназначен для контроля состояния SystemD.

Легенда

! — обязательное поле

ПолеОписание
targetsИмена сервисов
enabledВключать сервис или нет. Конфликтует с masked
globalВключать ли сервис глобально, для всех пользователей
maskedМаскировать ли сервис. Конфликтует с enabled
Пример

ALT Atomic Core:

  - type: systemd
    body:
      targets:
        - ostree-remount
        - NetworkManager
        - libvirtd
        - chrony
        - podman.socket
        - sync-users.service
        - sync-directory.service
        - tmp.mount
      enabled: true

Опубликовано под лицензией GPL-3.0+. Содержание доступно по лицензии CC BY-SA 4.0, если не указано иное.