Skip to content

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

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

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

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

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

Уточнение

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

Пример

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Переменные среды. Могут быть задействованы в любом модуле

image — обязательное поле при использовании apm s i apply или apm s i update

Модули (modules)

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

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

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

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

Брендинг (branding)

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

ПолеОписание
nameИмя брендинга для пакетов (branding-<name>-*). Требует build-type
subpackagesПодпакетоы брендинга, которые нужно поставить (branding-<name>-<subpackage>). Если пуст, поставятся все. Требует name.
release-overridesСловарь переопределения или добавления полей в os-release.
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!URL git-репозитория
command!Команды для выполнения относительно git-репозитория
build-depsЗависимости для сборки. Они будут удалены после завершения модуля
depsЗависимости для самой программы. Они не будут удалены после завершения модуля, даже если указаны в build-deps
revУказатель состояния Git
quietСокрытие вывода команд

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

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

Легенда

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

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

ALT Atomic Core:

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

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

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

ПолеОписание
kernel-infoРабота с ядром и модулями ядра
initrdРабота с initrd

Подраздел kernel-info

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

Подраздел initrd

ПолеОписание
rebuild-initrd-methodПоддерживаются: dracut, auto. Если пусто и прописан один из flavour, modules, inckude-headers, то используется auto
plymouth-themeТема загрузочного экрана Plymouth (plymouth-theme-<name>)
Пример

ALT Atomic Core:

  - name: Update kernel
    type: kernel
    body:
      kernel-info:
        flavour: ${{ Env.KERNEL_FLAVOUR }}
        modules:
          - drm
      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!Путь до файла, куда нужно добавить содержимое
create-file-permПрава для создания файла в формате rwxrwxrwx, если он не существует
prependДобавлять ли содержимое в начало файла

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

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

Легенда

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

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

ALT Atomic Core:

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

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

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

Легенда

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

ПолеОписание
source!Что
destination!Кудао
replaceЗаменить объект по destination
create-linkСоздать ссылку из родительской директории цели на назначение
Пример

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Обновить ли пакеты до транзакции
dependsУдалить пакеты с зависимостями
Пример

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Очистить все репозитории. Конфликтует с clean-temporary
customКастомные записи в sources.list
branchВетка репозитория ALT. Закомментирует остальные репозитории, для очистки есть clean
dateДата в формате YYYYMMDD или YYYY/MM/DD. Если пуст, берется обычный репозиторий. Может быть latest. Требует branch
tasksЗадачи для подключения в качестве репозиториев
no-updateНе обновлять базу данных после сохранения репозиториев
clean-temporaryОчистить временные репозитории. Конфликтует с clean

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

  • 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, если не указано иное.