Product SiteDocumentation Site

Глава 10. Сборка образов с помощью mkimage-profiles

Система генерации дистрибутивов использует все преимущества банка пакетов и позволяет получать установочные образы. Для сборки образа используется утилита mkimage, которая использует для сборки «профиль», представляющим собой набор файлов Makefile. В результате из пакетов репозитория создается установочный диск CD/DVD. Целостность репозитория и его непротиворечивость позволяют с легкостью генерировать новые образы при необходимости.
mkimage-profiles (m-p) — система управления конфигурацией семейств дистрибутивов свободного программного обеспечения из репозиториев ALT для различных платформ.
Концепция:
  • конфигурация, как и образ, — объект постадийной сборки;
  • метапрофиль служит репозиторием для построения индивидуального профиля, по которому создается итоговый образ.
Особенности:
  • метапрофиль при сборке может быть доступен только для чтения;
  • для сборки предпочтительно использовать tmpfs;
  • в профиль копируются только нужные объекты (он автономен относительно метапрофиля).
Стадии работы:
  • инициализация сборочного профиля;
  • сборка конфигурации образа;
  • наполнение сборочного профиля;
  • сборка образа.

Примечание

Сборка образов может занимать большой объем дискового пространства (например, порядка 100 Гб).
Предварительные настройки:
  • пользователь с правом запуска hasher и подключения /proc к нему (см. Настройка Hasher);
  • смонтированный tmpfs на несколько гигабайт (можно указать в переменной BUILDDIR):
    • например, в /tmp или /home/USER/hasher;
    • каталог из prefix в /etc/hasher-priv/system;
  • настроенный ~/.gitconfig.
Объекты:
  • дистрибутивы и виртуальные среды/машины:
    • описываются в conf.d/*.mk;
    • могут основываться на предшественниках, расширяя их;
    • дистрибутивы могут включать один или более субпрофилей;
    • следует избегать множественного наследования;
  • субпрофили:
    • список задаётся в $(SUBPROFILES);
    • базовые комплекты размещены в подкаталогах sub.in/;
    • наборы скриптов базовых комплектов могут расширяться фичами (features);
  • фичи (features):
    • законченные блоки функциональности (или их наборы);
    • описываются в индивидуальных features.in/*/config.mk;
    • могут требовать другие фичи, а также субпрофили;
    • накопительный список формируется в $(FEATURES);
    • при сборке в $(BUILDDIR) содержимое фич добавляется в профиль;
  • списки пакетов (*_LISTS):
    • не следует создавать отдельную фичу, если достаточно списка пакетов;
    • по возможности следует избегать дублирования (см. bin/pkgdups.);
  • индивидуальные пакеты (*_PACKAGES):
    • см. conf.d/README.
Результат:
  • при успешном завершении сборки образ получает имя цели и размещается в $(IMAGEDIR):
    • указанном явно;
    • ~/out/ (если возможно);
    • $(BUILDDIR)/out/;
  • формируются отчеты, если это запрошено (переменная REPORT).
При запуске сборки принимается ряд переменных (см. profiles.mk.sample). Переменные могут быть заданы как в команде сборки (в качестве аргументов), так и в файле настроек $HOME/.mkimage/profiles.mk. Список переменных приведен в Переменные, принимаемые при сборке.

Таблица 10.1. Переменные, принимаемые при сборке

Переменная
Описание
Значение
APTCONF
Задаёт путь к apt.conf
Пусто (по умолчанию системный) либо строка
ARCH
Задаёт целевую архитектуру образов
Пусто (по умолчанию авто) либо строка
ARCHES
Задаёт набор целевых архитектур при параметрическом задании APTCONF
Пусто (по умолчанию авто) либо список через пробел
AUTOCLEAN
Включает очистку (distclean) после успешной сборки образа
Пусто (по умолчанию нет) либо любая строка
BELL
Подаёт сигнал после завершения сборки
Пусто (по умолчанию нет) либо любая строка
BRANCH
Указывает, для какой ветки производится сборка
  • не определено — пытается определиться автоматически;
  • пусто — присваивается значение sisyphus;
  • имя ветки (sisyphus, p11)
BUILDDIR
Задаёт каталог генерируемого профиля и сборки
Пусто (по умолчанию авто) либо строка
BUILDDIR_PREFIX
Задаёт префикс каталога генерируемого профиля и сборки
Строка; по умолчанию выбирается алгоритмически
BUILDLOG
Задаёт путь к файлу журнала сборки/очистки
$(BUILDDIR)/build.log (по умолчанию) либо строка
CHECK
Включает режим проверки сборки конфигурации (без сборки образа)
  • пусто (по умолчанию) — проверка не выполняется;
  • 0 — проверяется только конфигурация, списки пакетов не проверяются;
  • другое значение — полная проверка
CLEAN
Экономия RAM+swap при сборке в tmpfs. Очистка рабочего каталога после успешной сборки очередной стадии
Пусто, 0, 1, 2; по умолчанию пусто при DEBUG, иначе 1
DEBUG
Включает средства отладки, может отключить очистку после сборки
Пусто (по умолчанию), 1 или 2
DISTRO_VERSION
Задаёт версию дистрибутива (если применимо)
Пусто (по умолчанию) либо любая строка
HOMEPAGE, HOMENAME, HOMEWAIT
Указывают адрес, название и таймаут перехода для домашней страницы
Корректный URL, строка, неотрицательное целое число
IMAGEDIR
Указывает путь для сохранения собранного образа
Равно $HOME/out (если существует), иначе $(BUILDDIR)/out (по умолчанию), либо другой путь
ISOHYBRID
Включает создание гибридного ISO-образа
Пусто (по умолчанию) либо любая строка
LOGDIR
Указывает путь для сохранения логов сборки
Равно $(IMAGEDIR) (по умолчанию) либо другой путь
MKIMAGE_PREFIX
Указывает путь к mkimage. Если параметр не задан, используется системный mkimage
NICE
Понижает нагрузку системы от сборочной задачи
Пусто (по умолчанию) либо любая строка
NO_SYMLINK
Не создавать символические ссылки на собранный образ
Пусто (по умолчанию) либо любая строка
QUIET
Отключает поясняющие сообщения при сборке (например, при запуске через cron)
Пусто (по умолчанию) либо любая строка
REPORT
Запрашивает создание отчётов о собранном образе. Требует включения DEBUG и отключения CHECK
  • пусто (по умолчанию) — создание отчёта отключено;
  • 2 — создать архив из каталога отчёта;
  • любое другое непустое значение — создать отчёт в виде каталога
ROOTPW
Устанавливает пароль root по умолчанию для образов виртуальных машин
Пусто (по умолчанию root) либо строка
SAVE_PROFILE
Сохраняет архив сгенерированного профиля в .disk/
Пусто (по умолчанию) либо любая строка
SORTDIR
Дополнительно структурирует каталог собранных образов
Пусто (по умолчанию) либо строка (например, $(IMAGE_NAME)/$(DATE))
SQUASHFS
Определяет способ сжатия squashfs для stage2
  • пусто (по умолчанию) либо normal — xz;
  • tight — xz с ключом -Xbcj по платформе (лучше, но дольше — подбор в два прохода);
  • fast — gzip/lzo (быстрее запаковывается и распаковывается, но степень сжатия меньше)
STATUS
Добавляет в имя образа указанный префикс
Пусто (по умолчанию) либо строка (например, «alpha», «beta»)
STDOUT
Выводит сообщения (при включённом DEBUG) одновременно в лог и на экран
1 — включить вывод на экран, если включен DEBUG
USE_QEMU
Использовать qemu, если архитектура не совпадает
1 (по умолчанию), для отключения — любое другое значение
VM_SAVE_TARBALL
Указывает, что нужно сохранить промежуточный тарбол, из которого создается образ виртуальной машины, в заданном формате
tar tar.gz tar.xz
VM_SIZE
Задаёт размер несжатого образа виртуальной машины в байтах
Пусто (по умолчанию двойной размер chroot) или целое число

Примечание

Чтобы при указании переменной BRANCH сборка выполнялась для целевой ветки, необходимо:
  • прописать в ~/.mkimage/profiles.mk:
    APTCONF = ~/apt/apt.conf.$(BRANCH).$(ARCH)
    
  • создать целевые конфигурационные файлы apt по указанным путям.
Кроме того, переменная BRANCH (если задана) заменяет в имени собираемой цели слово «regular» на «alt-$BRANCH». Таким образом обеспечивается сборка стартеркитов из профиля regular для заданной ветки.
Список доступных целей:
$ make -C /usr/share/mkimage-profiles help
Список доступных образов:
$ make -C /usr/share/mkimage-profiles help/distro
Пример команды сборки образа:
$ make -C /usr/share/mkimage-profiles syslinux.iso
Пример команды сборки образа с указанием переменных:
$ make -C /usr/share/mkimage-profiles DEBUG=1 BRANCH=p11 APTCONF=/etc/apt/apt.conf.local alt-server.iso
Содержимое apt.conf.local может выглядеть так:
Dir::Etc::main "/dev/null";
Dir::Etc::parts "/ver/empty";
Dir::Etc::SourceParts "/var/empty";
Dir::Etc::sourcelist "/etc/apt/sources.list.d/alt-local.list";
APT::Acquire::Retries "3";
APT::Cache-Limit 201326592;
//Acquire::http::AllowRedirect "true";

RPM
{
        Allow-Duplicated {
                // Old-style kernels.
                "^(NVIDIA_)?(kernel|alsa)[0-9]*(-adv|-linus)?($|-up|-smp|-secure|-custom|-enterprise|-BOOT|-tape|-aureal)";
                // New-style kernels.
                "^kernel-(image|modules)-.*";
        };
        Hold {
                // Old-style kernels.
                "^(kernel|alsa)[0-9]+-source";
        };
};