aft-runtime: создание рантаймов#

aft-runtime — инструмент для создания Flatpak-рантаймов из базовой системы. Рантайм формируется на основе одного из трёх источников: дистрибутива (через debootstrap), Docker-образа или существующей корневой файловой системы. Результат экспортируется в OSTree-репозиторий и может использоваться приложениями, собранными через aft-app или flatpak-builder.

Команды#

build#

Сборка рантайма по YAML-манифесту:

sudo aft-runtime build <файл.yaml>

Манифест может содержать несколько документов (разделённых ---), каждый из которых описывает отдельный рантайм.

create#

Создание рантайма из параметров командной строки:

sudo aft-runtime create --id org.example.Platform --version stable --source debootstrap --distribution <имя-дистрибутива> --mirror <url-зеркала> --package bash --package coreutils

import#

Импорт рантайма из Docker-образа или корневой файловой системы:

sudo aft-runtime import --id org.example.Platform --version stable --docker-image <имя-образа>:<тег>
sudo aft-runtime import --id org.example.Platform --version stable --rootfs /path/to/rootfs

validate#

Проверка корректности манифеста:

aft-runtime validate <файл.yaml>

list#

Список рантаймов в репозитории:

aft-runtime list

clean#

Очистка рабочего каталога:

aft-runtime clean

generate-manifest#

Открытие генератора манифестов в браузере:

aft-runtime generate-manifest
aft-runtime -G

help#

aft-runtime help

Параметры команды create#

Основные параметры#

Параметр

Обязательный

Описание

-i, --id

Да

Идентификатор рантайма (обратный DNS).

-v, --version

Да

Версия рантайма.

-a, --arch

Нет

Архитектура. По умолчанию: amd64.

-B, --branch

Нет

Ветка (например, stable, 24.08).

Параметры источника#

Параметр

Обязательный

Описание

-s, --source

Да

Тип источника: debootstrap, docker, import.

-d, --distribution

Условно

Имя дистрибутива (обязательно для debootstrap).

--suite

Нет

Suite для debootstrap (stable, testing).

-m, --mirror

Условно

URL зеркала (обязательно для debootstrap).

-D, --docker-image

Условно

Имя Docker-образа (обязательно для docker).

-r, --rootfs

Условно

Путь к rootfs (обязательно для import).

Пакеты и репозитории#

Все параметры можно указывать многократно.

Параметр

Описание

-p, --package

Пакет для установки в рантайм.

--sdk-package

Дополнительный пакет для SDK.

-C, --component

Компонент репозитория (main, contrib, non-free).

--add-repo

Строка APT-репозитория для подключения.

--post-install

Команда, выполняемая после установки пакетов.

-e, --env

Переменная окружения (формат КЛЮЧ=ЗНАЧЕНИЕ).

Параметры сборки#

Параметр

По умолчанию

Описание

-S, --sdk

false

Создать SDK-версию рантайма.

-b, --sbom

false

Генерировать SBOM.

-c, --clean-docs

false

Удалить документацию из рантайма.

-g, --gpg-sign

Идентификатор GPG-ключа для подписи.

Пути#

Параметр

По умолчанию

Описание

-w, --work-dir

./build_dir

Рабочий каталог для промежуточных файлов.

-o, --output

./repo

Путь к OSTree-репозиторию.

Логирование#

  • -V, --verbose — уровень debug;

  • -q, --quiet — уровень error;

  • -l, --log-level — явное указание (debug, info, warn, error).

Типы источников#

debootstrap#

Формирует минимальную систему из пакетов указанного дистрибутива. Требует наличия утилиты debootstrap в системе.

Параметры в манифесте:

source:
  type: debootstrap
  debootstrap:
    distribution: <имя-дистрибутива>
    suite: stable
    mirror: <url-зеркала>
    components:
      - main
      - contrib
    variant: minbase

Подробное описание полей — в Справочник манифеста aft-runtime.

docker#

Экспортирует файловую систему из Docker-образа. Требует наличия утилиты docker и работающего демона Docker.

source:
  type: docker
  docker:
    image: <имя-образа>:<тег>

Если образ отсутствует локально, он загружается автоматически.

import#

Импортирует существующую файловую систему. Поддерживает два формата входных данных:

  • Каталог — рекурсивное копирование;

  • Tar-архив — с автоопределением формата сжатия;

source:
  type: import
  import:
    path: /path/to/rootfs

Дополнительные репозитории#

Секция additional-repos позволяет подключить дополнительные APT-репозитории в chroot-среде перед установкой пакетов.

additional-repos:
  - url: https://repo.example.com/packages
    codename: stable
    components:
      - main
    key-url: https://repo.example.com/key.gpg

Каждый репозиторий содержит:

  • url (обязательное) — URL репозитория;

  • codename (обязательное) — кодовое имя (stable, testing);

  • components — компоненты (main, contrib, non-free);

  • key-url — URL GPG-ключа репозитория (загружается и добавляется в trusted.gpg.d/).

Создание SDK#

SDK создаётся автоматически при build.sdk: true в манифесте или при указании параметра -S/--sdk в командной строке.

SDK — это расширенная копия рантайма, дополненная пакетами для разработки. Пакеты SDK указываются в секции packages.sdk манифеста:

packages:
  runtime:
    - bash
    - coreutils
    - libc6
  sdk:
    - build-essential
    - pkg-config
    - cmake
    - git

SDK экспортируется в тот же репозиторий, что и рантайм, с идентификатором, производным от идентификатора рантайма. Например, для рантайма org.example.Platform SDK будет иметь идентификатор org.example.Sdk.

Примеры#

Создание рантайма из debootstrap#

sudo aft-runtime create \
    --id org.example.Platform \
    --version stable \
    --source debootstrap \
    --distribution <имя-дистрибутива> \
    --mirror <url-зеркала> \
    --component main \
    --component contrib \
    --package bash \
    --package coreutils \
    --package libc6 \
    --package libstdc++6 \
    --package zlib1g \
    --sdk \
    --sdk-package build-essential \
    --sdk-package cmake \
    --sbom \
    --output ./repo

Импорт рантайма из Docker-образа#

sudo aft-runtime create \
    --id org.example.Platform \
    --version stable \
    --source docker \
    --docker-image <имя-образа>:<тег> \
    --package libssl3 \
    --output ./repo

Импорт из существующей rootfs#

sudo aft-runtime create \
    --id org.example.Platform \
    --version stable \
    --source import \
    --rootfs /path/to/rootfs \
    --output ./repo

Сборка из манифеста#

sudo aft-runtime build runtime.yaml