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, p10)
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
Задает размер несжатого образа виртуальной машины в байтах
Пусто (по умолчанию двойной размер чрута) или целое

Примечание

Для того чтобы при указании переменной BRANCH сборка осуществлялась для целевого бранча, требуется:
  • прописать в ~/.mkimage/profiles.mk:
    APTCONF = ~/apt/apt.conf.$(BRANCH).$(ARCH)
    
  • создать целевые конфигурационные файлы apt по указанным путям.
Помимо этого переменная BRANCH, если определена, заменяет в имени собираемой цели слово «regular» на «alt-$BRANCH». Таким образом, достигается сборка стартеркитов из профиля регулярок под заданный бранч.
Список доступных целей:
$ 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=p10 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";
        };
};