Конфигурирование образа
Конфигурирование образа происходит с помощью YAML-файла конфигурации и команды apm system image build.
Базовый конфиг
Первоначальный файл с которого начинается конфигурация — /etc/apm/image.yml
apm system image build применяет изменения к текущему контейнеру исходя из настроек в image.yml.
Уточнение
При создании образа в CI/CD, файл с конфигурацией копируется с помощью Containerfile из репозиторий в контейнер по вышеуказанному пути
Переменные среды и поля конфигурационного файла используется в приоритете над конфигом и нужны для конфигурирования сборки в CI/CD. Подробнее в разделе «Переменные среды и поля конфигурационного файла»
Пример
ALT Atomic Core:
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 |
Поддерживаемые типы сборки:
stablenightly
Пример
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: trueGit-модуль (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)
Модуль 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