Содержание
mkimage-profiles, или m-p — результат осмысления и обобщения опыта создания семейств дистрибутивов свободного программного обеспечения на базе ALT Linux.
Цели
Средства
Двухуровневость:
Примеры использования
Выполняем начальные инструкции по документации:
git clone git://git.altlinux.org/gears/m/mkimage-profiles.git cd mkimage-profiles make rescue.iso
Brief summary
Configurables: ~/.mkimage/profiles.mk; see doc/params.txt and conf.d/README
License: GPLv2+, see COPYING
Most docs are in Russian, welcome to learn it or ask for English.
Задача:
Концепция:
Особенности:
Стадии работы:
Объекты:
дистрибутивы и виртуальные среды/машины:
субпрофили:
фичи:
списки пакетов (*_LISTS):
Результат:
при успешном завершении сборки образ называется по имени цели и укладывается в $(IMAGEDIR):
См. тж.:
doc/:
Примечание: пути в документации задаются от каталога верхнего уровня, если не указаны как относительные в явном виде (./) или по смыслу.
Удачи; что не так — пишите.
Michael Shigorin <mike@altlinux.org>, Anton Midyukov <antohami@altlinux.org>
Переменные могут быть заданы, как в команде сборки в качестве аргументов, так и в файле настроек $HOME/.mkimage/profiles.mk. При запуске на сборку принимается ряд переменных (см. тж. profiles.mk.sample):
APTCONF
ARCH
ARCHES
AUTOCLEAN
BELL
BRANCH
значение:
BUILDDIR
BUILDDIR_PREFIX
BUILDLOG
CHECK
CLEAN
DEBUG
DISTRO_VERSION
HOMEPAGE, HOMENAME, HOMEWAIT
IMAGEDIR
ISOHYBRID
LOGDIR
MKIMAGE_PREFIX
NICE
NO_SYMLINK
NOCHECK
QUIET
PACK_SQUASHFS_PROCESSORS
значение:
REPORT
ROOTPW
SAVE_PROFILE
SORTDIR
значение: пусто (по умолчанию) либо строка
SQUASHFS
значение:
STATUS
значение:
STDOUT
значение:
USE_QEMU
значение:
VM_SAVE_TARBALL
VM_SIZE
make DEBUG=1 CLEAN=1 grub.iso
Переменная make, указывающая для какого бранча производится сборка. Если не задана, определяется автоматически. Если переменная имеет пустое значение, назначается sisyphus. Для того, чтобы при указании этой переменной сборка осуществлялась для целевого бранча, требуется:
APTCONF = ~/apt/apt.conf.$(BRANCH).$(ARCH)
Помимо этого переменная BRANCH, если определена, заменяет в имени собираемой цели слово "regular" на "alt-$BRANCH". Таким образом достигается сборка стартеркитов из профиля регулярок под заданный бранч.
Также эту переменную можно использовать в профилях других целей для обеспечения поддержки целевого бранча.
Особенности дистрибутива, не учитываемые в пакетной базе или зависящие от переменных времени сборки/установки образа; по необходимости влияют на конфигурацию, приносят с собой или запрашивают скрипты, которые могут быть оформлены как:
В большинстве случаев можно рекомендовать создание feature средствами метапрофиля, поскольку при этом дерево кода более удобно для анализа и обновления (и в отличие от m-p-d — нет вынужденной необходимости либо контролировать включение нужных фич "вручную" в скриптах по косвенным признакам, либо выносить их в пакеты installer-feature-*); также возможно добиться большей степени интеграции по данным (например, язык gfxboot и LiveCD).
Создание и упаковку installer-feature-* можно рекомендовать, если:
Стоит избегать изменения пакетных умолчаний в случае, когда их представляется осмысленным и возможным скорректировать в пакете: таким образом они станут более дистрибутивными.
Обратите внимание, что фичи включаются в комплект инкрементально: что добавили, то уже не убрать; поэтому при необходимости следует выделять промежуточные цели сборки, собирающие необходимые фичи и оставляющие те, по которым есть расхождения, на включение ближе к конечной дистрибутивной цели.
Соглашение по именованию таково, что цели use/ФИЧА и use/ФИЧА/… определяются в файле features.in/ФИЧА/config.mk и только в нём.
Состав пакетной базы субпрофилей определяется значениями следующих переменных профиля (см. тж. conf.d/README):
main: пакетная база для установки
THE_KMODULES, BASE_KMODULES, MAIN_KMODULES, BASE_KMODULES_REGEXP
stage2: общая часть install2, live, rescue
STAGE1_KMODULES, STAGE1_KMODULES_REGEXP, STAGE2_KMODULES, STAGE2_KMODULES_REGEXP
install2: компактная "живая" система, содержащая только инсталятор
см. stage2
live: пользовательский LiveCD (может содержать также инсталятор)
rescue: спасательный LiveCD
stage1: ядро и загрузчик второй стадии
STAGE1_KMODULES_REGEXP
Этот каталог содержит включаемые фрагменты конфигурации образов с тем, чтобы было удобнее параллельно разрабатывать специфические образы без излишних merge conflict’ов.
Следует понимать, что основная цель появления mkimage-profiles на свет — это уменьшение "форков" внутри семейства дистрибутивных профилей. Поэтому при возможности следует всё-таки работать над общей базовой частью, включая скриптовые хуки и списки пакетов, а также оптимизировать граф зависимостей между конфигурациями образов.
Попросту говоря, copy-paste — тревожный признак.
Вместо него нередко может помочь выделение кусочков конфигурации в пределах включаемого файла в цели mixin/*, которые не являются самостоятельными или даже промежуточными, но включают полезные группы настроек, нужных в различных образах, не наследующих друг другу — посмотрите существующие примеры использования.
По переменным (см. тж. doc/pkglists.txt):
для направленного действия служат:
аналогично по kernel-modules-*:
Не стоит бояться такого разнообразия, для большинства задач достаточно THE_*.
По подстановкам:
По спискам пакетов:
Этот каталог копируется из метапрофиля в профиль "как есть" и формирует "заготовку" финальной стадии, собирающей собственно образ из результатов работы индивидуальных субпрофилей (для distro) либо непосредственно "на месте" (для ve, vm).
Содержимое image.in/files/ копируется в корень образа.
Соответственно для сборки также потребуется одна из фич features.in/build-*.
Пакетная база рабочего чрута минимальна (может чуть расширяться фичами — см. features.in/repo/lib/50-genbasedir.mk в качестве примера).
Если требуется какая-либо иная обработка чрута, следует предпочитать scripts.d — для универсальной обработки скрипт можно добавить здесь, для специфичной — в фичу.
Результат — готовый образ в $(IMAGEDIR)/.
Этот каталог содержит т.н. фичи (features, особенности).
Фича — отдельно подключаемая сущность, которая содержит повторно используемые конфигурацию/код и определяет одну из особенностей создаваемого образа. Может зависеть от других фич либо субпрофилей.
Каждая фича должна содержать файл config.mk, включаемый в main.mk при построении конфигурации будущего профиля; он может описывать одну или более целей вида use/*, дополняющих конфигурацию, и обязан добавить имя фичи в $(FEATURES), для чего создана функция add_feature.
На этапе генерации сборочного профиля фичи рассматриваются после инициализации профиля (см. image.in/) и копирования субпрофилей (см. sub.in/). Для каждой фичи, указанной в $(FEATURES), копируются подкаталоги сообразно включенным субпрофилям, а также lib/ и {image-,}scripts.d/; затем выполняются generate.sh и generate.mk при их наличии.
Если фича дополняет хуками семейство целевых субпрофилей, построенных на одном базовом, можно воспользоваться подкаталогом с именем исходного базового субпрофиля (см. $src, $dst в Makefile).
Рекомендуется давать несколько различающиеся имена скриптам, которые одна и та же фича может добавлять в различные стадии, чтобы они не выглядели одинаково в логе сборки.
Наиболее востребованные цели можно снабжать "ярлычками" вроде "+icewm" с тем, чтобы сделать более краткими и выразительными использующие их правила. Просьба не злоупотреблять количеством, такие имена предполагается показывать в интерфейсе к профилю.
Каталог lib/ является специфическим для фич, определяющих построение конкретного вида образа — см. build-*/.
Несложный пример содержится в 00example/, более близкий к жизни и нынешним пределам возможностей метапрофиля — в syslinux/.
См. тж. файлы README в каталогах фич (отсутствие — баг!).
Этот каталог содержит "заготовку" фичи в качестве примера и должен дать представление о том, какой код может быть включён в настоящую фичу: статические файлы, два makefile для создания конфигурации и генерирования части профиля, а также шелл-скрипт для такого генерирования.
Вовсе не требуется втягивать всё в свою фичу: лучше постараться сделать её минимальной, самодостаточной и полезной в качестве "кирпичика".
Единственной обязательной частью фичи является файл config.mk, который включается в distro.mk верхнего уровня и предоставляет цель вида use/*, специфичную для данной фичи, а также добавляет её в переменную FEATURES. Если название фичи не упоминается в списке, содержащемся в этой переменной, то она не задействуется при построении профиля, а только при сборке конфигурации.
Для наиболее ходовых целей use/, особенно если их много, можно создавать цели-алиасы + (например, +power). Просьба относиться вдумчиво, т.к. в дальнейшем предполагается визуализировать такие цели в UI конфигурирования образа.
Остальное содержимое является дополнительным и используется в таком порядке (см. features.in/Makefile):
Например, если используются субпрофили stage1, stage2/install2 и main, можно решить собрать специфические для фичи скрипты инсталятора в install2/image-scripts.d/ (или необходимые для операций с пакетной базой — в main/scripts.d/, смотря чего надо добиться; загляните также в документацию mkimage).
А если требуются нетривиальные действия по конфигурированию (как при сборке syslinux.cfg из кусочков, в зависимости от того, что из запрошенных модулей оказалось в наличии) — то их можно произвести из generate.sh и generate.mk.
Пожалуйста, присылайте отзывы о (бес)полезности кода в этом каталоге mike@altlinux.org.
Данная фича позволяет задавать альтернативы [1]. Например, так:
@$(call add,ALTERNATIVES,/usr/bin/xvt:/usr/bin/xterm)
Также в самом конфиге могут быть уже преопределены цели для установки альтернатив. Например, use/alternatives/xvt/% позволяет задавать произвольные альтернативы для xvt: use/alternatives/xvt/xterm, use/alternatives/xvt/mate-terminal и т.д. При этом альтернатива должна быть доступна.
Добавление установки загрузчика основной системы, затребованного посредством указания "grub" или "uboot" в BASE_BOOTLOADER.
Модуль alterator-grub добавляется в устанавливаемую систему (он НЕ должен требоваться пакету installer-distro-) и требует пакет выбранного загрузчика. Так как для uboot такого модуля нет и в тоже время uboot не используется в установочных дистрибутивах, то установка модуля alterator была ограничена целями distro/, формирующими ISO-образы.
Обратите внимание: в процессе конфигурирования дистрибутива "переключение" загрузчика может происходить только в одну сторону — если выставлен grub, произведено переключение на lilo и затем произведена ещё одна попытка переключения на grub, то в конфигурации останется lilo как последняя "новая" цель с точки зрения make.
При необходимости всё-таки "пересилить" последнее изменение можно
@$(call set,BASE_BOOTLOADER,grub)
Реализация экспериментальная (нужно модуляризовать installer-steps).
Эта фича врезается в makefile субпрофилей и обеспечивает добавление задающих внешний вид и сообщения дистрибутива пакетов; см. тж. https://www.altlinux.org/Branding
Реализация "двумерная" — отдельно задаётся BRANDING (см. пакеты branding-*-%version-%release.src.rpm), затем отдельно указывается, какие и куда помещать компоненты заданного брендинга.
Назначение и возможные значения (если требуются):
STAGE1_BRANDING
STAGE2_BRANDING
INSTALL2_BRANDING
THE_BRANDING
Эта фича обеспечивает наличие и конкретизацию выбора браузера. Разумеется, дополнительные варианты могут быть установлены явным или косвенным затребованием.
Следует понимать, что каждая из целей может быть использована лишь один раз, повторное упоминание будет проигнорировано make.
Эта фича конфигурирует создание образа дистрибутива, включая работу с субпрофилями — которая сейчас нужна только дистрибутивным целям.
Дополняет финальную стадию сборки (lib/, scripts.d/) и тесно с ней связана.
При желании более полно воспользоваться доступными средствами фиксации метаданных обратите внимание на следующие переменные: META_SYSTEM_ID, META_PUBLISHER, META_PREPARER, META_APP_ID, META_VOL_ID, META_VOL_SET, META_BIBLIO, META_ABSTRACT; см. тж. genisoimagerc(5) из пакета genisoimage.
При необходимости задать своё содержимое файла .disk/info, который также используется propagator, см. META_DISK_INFO.
Эта фича конфигурирует создание образа виртуального окружения (VE), что используется для сборки шаблонов OpenVZ и ARM-чрутов для TWRP.
Дополняет финальную стадию сборки (lib/, image-scripts.d/) и тесно с ней связана.
Эта фича конфигурирует создание образа виртуальной машины (VM) или тарбола rootfs для использования его на реальном компьютере. Дополняет финальную стадию сборки (lib/, image-scripts.d/). Для создания образа виртуальной машины требуется sudo(8) Для создания тарбола sudo не требуется. — см. тж. doc/vm.txt
Эта фича вместо созидания занимается выкидыванием лишнего (например, части модулей инсталятора из установленной системы).
По возможности стоит работать над дизайном инфраструктуры и пакетной базой так, чтобы ставить-удалять приходилось как можно меньше. В идеале такой антифичи не должно быть вовсе :)
Для пакетов, которые следует удалять из установленной классическим инсталятором системы, но не из livecd, применяйте переменную CLEANUP_BASE_PACKAGES.
Для удаления пакетов только из livecd используйте переменную CLEANUP_LIVE_PACKAGES.
также удаляет rpm, apt и базу по пакетам из livecd, если в него не был добавлен инсталятор! |
Эта фича предоставляет интерфейс для конфигурирования дистрибутивных значений по умолчанию control(8).
См. тж.:
Данная фича предназначена для настройки часового пояса и переключения хранения времени в BIOS между UTC (по Гринвичу) и местным временем.
TIME_UTC
TIME_ZONE
Эта фича конфигурирует root login и пользователей по умолчанию.
Если ROOTPW не задан, то подходящий пароль не существует. При необходимости задать пустой пароль root (например, на LiveCD) выставьте переменную ROOTPW_EMPTY в значение "1".
применяйте разумно, т.к. крайне легко создать и оставить дыру в безопасности! |
Пользователи добавляются через переменную USERS через пробел в формате:
login:passwd:admin:sudo
Например:
@$(call add,USERS,fedya:123:1:1 masha:321::)
Будут созданы два пользователя: fedya с паролем 123', c правами администратора и настроенным sudo, и пользователь masha c паролем 321, без прав администратора и без sudo.
Также можно определить группы, в которые будут добавляться пользователи через переменную GROUPS.
В версии mkimage-profiles 1.4.4 появилась возможность создать пользователя с произвольными uid, gid, домашним каталогом, интерпретатором shell и т.д. Используйте для этого следующую конструкцию:
@$(call set,SPEC_USER,имя_пользователя:группа:uid:gid:home_dir:shell)
Например:
@$(call set,SPEC_USER,user:user:500:500:/home/user:/bin/bash)
При этом нужно иметь в виду, что будет создана соответствующая группа с соответствующим gid (нужно быть уверенным, что одноимённая группа не существует), а пользователь будет добавлен в неё. Пользователь будет создан без пароля. Для установки пароля при первом запуске, смотрите фичу oem.
Эта фича служит для создания образов, предназначающихся для разработки. В первую очередь обеспечивается развёртывание hasher и mkimage.
Реализованы поддержка LiveCD, VM, VE и добавление группы в инсталятор.
Обратите внимание: use/dev/repo достаточно серьёзно изменяет поведение субпрофиля main, оставляя из всего обычного множества обрабатываемых переменных только MAIN_PACKAGES, MAIN_PACKAGES_REGEXP и MAIN_LISTS во избежание дублирования не требующихся для сборки минимальных образов пакетов.
Эта фича добавляет в образ распакованную документацию дистрибутива, а именно вводную страничку (входит в пакет branding--indexhtml), и/или специфичное для данного продукта руководство из пакета docs- (вариант задаётся отдельно выставлением переменной DOCS), и/или тексты лицензионных соглашений.
Обратите внимание, что для indexhtml создаётся переброска с учётом языка (при наличии index-LL.html), поэтому ожидается задействование фичи l10n с соответствующим указанием языка по умолчанию.
предполагается применение при формировании ISO-образов, другие случаи наверняка потребуют доработки. |
Эта фича конфигурирует поддержку клиента домена ALT Linux.
krb5-ticket-watcher применяется для отладки либо обновления билетов при нехватке сконфигурированного по умолчанию (сутки) либо указанного администратором времени жизни таковых.
не проверено на инсталяторах! |
Фича добавляет создание FreeDOS "live floppy" в stage1.
Текущее состояние — загружается минимальная система. Для практического применения (в первую очередь это перешивка firmware) требуется сделать подключение CD и/или USB Flash с тем, чтобы класть туда прошивки.
Спасибо за идею и местами реализацию: Александру Бандуре, Сергею Горенко, Николаю Гречуху и Алексею Фролову.
Фича drm решает задачу создания общей точки входа для добавления drm-модулей ядра для разных списков пакетов. Потребность выделения в отдельную фичу возникла с одной стороны в связи с необходимостью сделать переключатель между свободным и проприетарным драйвером NVIDIA, с другой из-за необходимости добавлять только drm-модули ядра в таких целях, как use/stage2/kms и use/plymouth.
Фича добавляет в образы необходимое для поддержки EFI/UEFI.
Конфигурируется заданием загрузчика (EFI_BOOTLOADER) и файла сертификата (EFI_CERT) при помощи целей; пример использования доступен в conf.d/regular.mk
См. тж.:
Эта фича добавляет комплекты различного firmware в инсталятор, устанавливаемую систему и т.п.
Следует учитывать, что объём добавленного может быть довольно существенным — в десктопе вряд ли нужен микрокод для FC HBA или SCSI RAID, который может быть критичен для полезного серверного или спасательного дистрибутива (см. #18047).
Эта фича позволяет системно конфигурировать файлы конфигурации подсистемы конфигурирования шрифтов fontconfig (sic!), заодно предоставляя прошедшие обкатку в дистрибутивах варианты предварительно заданной конфигурации для удобства.
This feature installs gitlab-runner according official guide [1]
The following envs can be altered:
GL_USER - define default gitlab-runner username (gitlab-runner by default) GL_SSH_KEY - ssh pubkey added to authorized_keys of GL_USER
this feature depends on network enablement in hasher (see [2] for details) and mkimage [3] |
Добавление поддержки grub; требуется для инсталяторов, live/rescue; реализуется в рамках stage1.
Самостоятельное творческое использование на данный момент подразумевает изучение кусочков конфигурации, которые уже существуют.
Цели config.mk:
Переменные generate.mk:
Здесь производится первичная обработка конфигурационных данных, окончательно проверяемых и используемых уже в инструментальном чруте.
Обратите внимание: фрагменты, соответствующие именам субпрофилей, добавляются автоматически; это поведение при необходимости отключается выставлением переменной grub_DIRECT и тогда вместо use/grub/*.cfg следует применять прямое указание вида @$(call set,grub_CFG,…).
Установить дефолтный пункт: Для того, чтобы установить конкретный дефолтный пункт (пример для LiveCD без поддержки сессии):
@$(call set,GRUB_DEFAULT,live)
Именем дефолтного пункта является --id.
Запуск iso образа с неправильно работающей в grub графике (только EFI): На ESP-разделе образа можно отредактировать конфиг EFI/BOOT/grub.cfg, добавив в его начало:
GRUB_TERMINAL='console'
Если нужно включить последовательную консоль, пропишите в нём:
GRUB_TERMINAL='console serial'
GRUB_SERIAL_COMMAND='serial --unit=0 --speed=115200'
Добавление модуля hdt (Hardware Detection Tool) к syslinux; может быть востребовано для инсталяторов, live/rescue.
Фича не только требует фичу syslinux (и соответствующий пакет, а также pciids), но и тесно с ней интегрирована; в частности, фрагмент конфигурационного файла располагается не "здесь", а "там", поскольку сам hdt.c32 также входит в пакет syslinux.
Каталог содержит основную feature для создания адаптированного дистрибутива Homeros. Это промежуточный вариант, при помощи которого можно получить минимальный разговаривающий образ, но, возможно, помимо его дальнейшего естественного развития требуется ещё осмысление с точки зрения идей mkimage-profiles.
Эта фича добавляет средства настройки методов ввода (Input Methods).
На данный момент является экспериментальной, приветствуется помощь в тестировании/доработке/отладке.
Осуществляется сборка initrd.img при помощи make-initrd с включенными фичами bootchain. Это альтернатива фичи initrd-propagator. Используется тот же список модулей ядра, что и при сборке с propagator, но в отличие от последнего модули добавляются в initrd.img самим make-initrd.
Документацию по использованию bootchain следует смотреть в пакетах make-initrd-bootchain-*:
/usr/share/make-initrd/features/bootchain-*/README.md
Конфиг находится в stage1/files/bootchain. Почти все переменные можно переопределить. Переменные в m-p по сравнению с конфигом bootchain имеют приставку BOOTCHAIN_. Дефолты заданы в config.mk
Переопределить можно так:
$(call set,BOOTCHAIN_OEM_WELCOME_TEXT,Welcome to my OS!)
Добавляется поддержка propagator. propagator обеспечивает первую стадию загрузчика. Ранее был неотъемлемой частью субпрофиля stage1. Был вынесен в фичу для обеспечения возожности собирать образы с использованием специально собранного initrd вместо него.
Эта фича определяет систему инициализации, которая будет использована в пользовательской среде (livecd, установленный дистрибутив, vm). Она не влияет на состав инсталятора и rescue-образа.
Обратите внимание: как и с use/bootloader/%, в силу особенностей make переключение в каждую позицию возможно лишь один раз, далее эта цель считается достигнутой и при последующих вызовах не отрабатывает.
См. тж.:
Эта фича дополняет базовый "живой" образ второй стадии специфическими для инсталяционного образа настройками и скриптовыми хуками.
Рекомендуется подключать при помощи +installer, чтобы обеспечить включение типового набора связанных с инсталятором функций.
При добавлении скриптов в image-scripts.d/ следует позаботиться, чтобы в компактном livecd, которым является инсталятор, оказались нужные им утилиты (INSTALL2_PACKAGES). Перегружать его не следует, поскольку это прямо влияет на требования по минимальному размеру оперативной памяти для установки (если не задействован параметр загрузки ядра lowmem, обрабатываемый propagator).
При необходимости принудительно удалить что-либо из попавшего в образ инсталятора (вместе с "оптовым" пакетом либо по зависимостям, когда точно известно, что для данного применения они избыточны) можно воспользоваться переменной INSTALL2_CLEANUP_PACKAGES для указания списка пакетов на удаление без учёта зависимостей перед формированием squashfs и INSTALL2_CLEANUP_KDRIVERS для удаления излишних модулей ядра.
Эта фича обеспечивает формирование ISO-образа с добавлением липовой таблицы разделов с целью обеспечения возможности его загрузки как с CD/DVD, так и с USB-флэшки.
Можно указать в цепочке зависимостей дистрибутива явно с тем, чтобы гарантировать гибридный вид образа, либо запросить включение этой фичи при сборке конфигурации произвольного дистрибутива (ISOHYBRID=1, см. features.in/pack/config.mk).
Обратите внимание: в propagator до 20101130-alt15 поддержка автоматической загрузки с флэш-носителя, содержащего ISO-образ, отсутствует, что компенсируется специальной обработкой в gfxboot.
Эта фича привносит код, имеющий смысл при добавлении в образ ядра, и задаёт начальный вариант такового.
Также занимается складированием наборов имён пакетов kernel-modules-* с тем, чтобы избавить релиз-менеджеров от необходимости учитывать полные списки и точные имена дополнительных модулей для поддержки, скажем, Ethernet.
Simple hook to run Linux Driver Management tools to configure hybrid graphics (aka Optimus/PRIME) for different DM’s.
Currently supported: + LightDM + GDM + SDDM
See https://github.com/solus-project/linux-driver-management
Эта фича дополняет live образ второй стадии специфическими для инсталяционного образа настройками и скриптовыми хуками.
В отличие от фичи install2 не собирается отдельный образ второй стадии altinst, а дополняется образ live пакетами инсталятора с целью уменьшить общий объём iso-образа.
Есть два варианта инcталятора:
Первый вариант выглядит так:
В отличии от install2 в репозиторий main помещаются только те пакеты, которых нет в live образе. Этим и достигается уменьшение размера iso-образа.
Второй вариант не отличается от altinst.
Эта фича дополняет базовый "живой" образ второй стадии специфическими для полноценного LiveCD настройками и скриптовыми хуками, а также создаёт файл index.html с домашней страницей (редиректором) в корне образа.
Графический вариант безусловно требует x11-autologin, при появлении необходимости обойтись без него можно временно продублировать содержимое цели и сообщить о таком случае.
Дополнительно обрабатываемые переменные:
LIVE_REPO
LIVE_CLEANUP_KDRIVERS
LIVE_RUNAPP_BINARY
Эта фича дополняет зачистку "живой" стадии инсталятора с тем, чтобы уменьшить её размер и требования к памяти.
Эта фича обеспечивает добавление функций терминального сервера:
На данный момент является экспериментальной.
Эта секретная фича добавляет в инсталяторы поддержку шифрования файловых систем с помощью LUKS при их создании.
Эта фича конфигурирует внедрение контрольной суммы в образ инсталятора после его сборки с целью проверки целостности на ранней стадии установки.
NB: прототип, для реального использования надо сделать микрообраз на основе stage2.
Эта фича добавляет и включает очистку освобождаемой памяти средствами zmalloc (через LD_PRELOAD).
Добавление memtest86+ в загрузку с образа и в устанавливаемую пакетную базу; востребовано для инсталяторов, live/rescue. Интегрируется с syslinux.
Эта фича занимается метаданными в составе образов — в первую очередь инсталяционных и пригодных к установке "живых".
Обязательные к установке по умолчанию пакеты задаются переменными SYSTEM_PACKAGES, COMMON_PACKAGES, BASE_PACKAGES, BASE_LISTS, THE_PACKAGES, THE_LISTS и передаются инсталятору посредством Metadata/pkg-groups.tar (файл .base).
См. тж. фичу main.
Фича предназначена для создания образа прошивки для отладочной платы BFK3.1.
Фича предназначена для создания прошивки для компьютера "Таволга Терминал".
https://www.altlinux.org/Ports/mipsel/Прошивка_образа_в_формате_recovery.tar_на_Таволга_Терминал
Эта фича позволяет сконфигурировать публично доступный рекурсивный DNS-сервер для условий, когда локальный неизвестен заранее или попросту отсутствует; следует понимать, что это в некотором роде утечка данных, т.е. риск безопасности.
Также возможно указать свои NAMESERVERS через пробел у себя в фиче или конфигурации дистрибутива, которая задействует use/net-dns.
Эта фича позволяет задать конфигурацию Ethernet-интерфейсов.
udev-rule-generator-net штатно добавляется для обеспечения предсказуемых имён вида eth0/eth1/… в силу того, что их сломали в апстримном systemd-udevd; для генерируемых "на лету" следует применять конфигурирование времени загрузки (NM, connman либо пакет livecd-net-eth).
Обратите внимание: применение в инсталяторах требует задействования как use/net-eth, так и use/stage2/net-eth; +net-eth "подберёт" оба.
Эта фича конфигурирует базовую поддержку сети, включая нужную подсистему (etcnet, NetworkManager поверх etcnet или connman).
Используйте TARGET_HOSTNAME для определения имени узла (файлы /etc/sysconfig/network и /etc/hostname).
Эта фича предназначена для добавления в образ поддержки SSH: добавляется клиент и конфигурируется сервер (требуется задание пути к существующему публичному ключу посредством переменной SSH_KEY).
Эта фича выполняет предварительное конфигурирование системы для работы плагинов файл-менеджеров, реализующих взаимодействие с Samba-сервером для динамического создания разделяемых файловых ресурсов ("пользовательских шар"). Без добавления соответствующего файл-менеджера и нужного плагина смысла не имеет.
Эта фича отключает спящий и ждущий режимы, а также гибернацию. Нужна для одноплатных компьютеров вроде Raspberry Pi, не поддерживающих их.
Эта фича конфигурирует службу NTP в качестве клиента с целью предоставления точного времени в составе LiveCD; для установленных систем рекомендуется применение модуля alterator-datetime.
Эта фича обеспечивает автоматический запуск предварительной настройки, характерный для OEM-образов.
Дефолтные шаги определяются в файле /etc/alterator-setup/steps. Его дефолтное содержание: sysconfig notes-license datetime root users setup-finish
Для переопределения списка шагов используйте переменную OEM_STEPS. Пример: цель: use/oem @$(call set,OEM_STEPS,sysconfig notes-license datetime setup-finish)
Список доступных шагов для alterator-setup находится в /usr/share/alterator/steps/
Эта фича обеспечивает наличие и конкретизацию выбора офисного пакета по аналогии с выбором браузера. Разумеется, дополнительные варианты могут быть установлены явным или косвенным затребованием.
Следует понимать, что каждая из целей может быть использована лишь один раз, повторное упоминание будет проигнорировано make.
Эта фича определяет формат упаковки создаваемого образа.
На данный момент поддерживаются iso (загрузочный ISO9660) и tar для дистрибутивов, tar/cpio с возможностью сжатия gz/xz (виртуальные окружения), а также различные варианты для образов виртуальных машин, поддерживаемые qemu-img.
Эта экспериментальная фича предназначена для обеспечения запуска заданного приложения в моно^Wкачестве единственного, т.е. PID 1.
Особенности результата:
Возможна настройка сетевых интерфейсов средствами ядра, условия:
Пакет следует добавить в STAGE1_PACKAGES; путь к бинарнику задаётся в PID1_BIN; PID1_PANIC позволяет указать время до перезагрузки ядра при завершении работы приложения.
Эта фича обеспечивает добавление записей в файл
$(PKGBOX)/aptbox/etc/apt/pkgpriorities
после инициализации чрута, но перед установкой пакетов.
Содержимое файла pkgpriorities
формируется на основе списка
PINNED_PACKAGES
. Значение приоритета по умолчанию определяется
переменной PIN_PRIORITY
, в которую при инициализации фичи
записывается "Important"
. Список приоритетов:
Essential, Important, Required, Standard, Optional, Extra
Переопределить значение приоритета можно отдельно для каждого пакета в списке, указав желаемый приоритет через двоеточие после имени пакета; например:
$(call add,PINNED_PACKAGES,my-package:Essential)
Используя PINNED_PACKAGES
, можно заранее определить выбор того
или иного пакета для удовлетворения виртуальной зависимости.
Если виртуальный пакет присутствует в основном списке пакетов для
установки, а пакет, его предоставляющий — в этом списке, то
вероятность его установки повышается согласно приоритету. Однако
если виртуальный пакет не выбран для установки или приоритетный
пакет отсутствует в репозитории, то сборка образа продолжится без
изменений. Следовательно, с помощью списка PINNED_PACKAGES
можно
влиять на состав дистрибутива, но его содержание, в отличие от
обыкновенных списков пакетов, имеет рекомендательный, а не
обязательный, характер.
Эта фича предназначена для добавления поддержки plymouth — современной реализации bootsplash. Плотно взаимодействует с фичей branding по объективным причинам, но оформлена отдельно для возможности собирать образы с частичным брендированием либо "без излишеств".
Эта фича конфигурирует поддержку управления питанием — выключение и регулировку частоты CPU для ACPI, засыпание для APM (не проверялось).
Эта фича меняет содержимое файла /etc/altlinux-release в соответствии с установленной переменной RELNAME, что изменяет пункты загрузки GRUB.
Применяется при необходимости перекрыть внесенный брендингом текст.
Эта фича предназначена для конфигурирования репозиториев в образе, включая генерацию хэшей и подключение к LiveCD.
По умолчанию таким репозиторием является RPMS.main (создаваемый sub/main), но возможно добавление addons, updates или иных по мере необходимости.
Результат — каталог ALTLinux/base/ для копирования в образ.
Дополнительно обрабатываемые переменные:
REPO
Эта фича дополняет базовый "живой" образ второй стадии специфическими для спасательного образа настройками и скриптовыми хуками.
Цель use/rescue/rw добавляет предварительно настроенный пункт загрузки, который в случае "просто гибридного" (не GPT) ISO, записанного на USB Flash, обеспечит создание и монтирование дополнительного раздела для сохранения данных между сессиями.
Эта фича предоставляет типичные для серверных образов наборы списков пакетов и модулей ядра.
Данная фича конфигурирует автоматический запуск сервисов при загрузке системы.
Поскольку в конкретном образе может быть желательно перекрыть умолчания предыдущей конфигурации, рекомендуется в фичах работать с переменными DEFAULT_SERVICES_* и оставить переменные SERVICES_* для релиз-менеджеров.
Выключение сервиса в каждой из этих пар имеет приоритет перед включением.
Предприняты особые меры в виде скрипта для install2, чтобы передать указание настроить службы инсталятору.
Для включения systemd-специфичных сервисов рекомендуется использовать DEFAULT_SYSTEMD_SERVICES_* и SYSTEMD_SERVICES_*.
Для включения служб systemd-logind нужно использовать DEFAULT_SYSTEMD_USER_SERVICES_* и SYSTEMD_USER_SERVICES_*.
Для того, чтобы замаскировать или размаскировать юнит systemd используйте SYSTEMD_SERVICES_MASK и SYSTEMD_SERVICES_UNMASK.
Эта фича добавляет поддержку аудиоподсистемы (как ядерную, если не включена в kernel-image, так и утилиты).
Эта фича полностью подготавливает русскоязычный или англоязычный вывод речи на базе сервера VoiceMan.
Эта фича служит для добавления в первую стадию хуков, необходимых при наличии в stage1 ядра (что типично, но не обязательно).
Передача информации о конфигурации ядра между stage1 и stage2 также требуется для оптимального сжатия squashfs-образа второй стадии.
Возможно пополнение списка опций конфигурации ядра (CONFIG_*), необходимых для загрузки целевого дистрибутива, посредством переменной STAGE1_KCONFIG (см. фичу efi в качестве примера).
Добавление поддержки syslinux; требуется для инсталяторов, live/rescue; реализуется в рамках stage1.
Самостоятельное творческое использование на данный момент подразумевает знакомство с /usr/share/doc/syslinux-*/syslinux.txt и изучение кусочков конфигурации, которые уже существуют.
Цели config.mk:
Переменные generate.mk:
Здесь производится первичная обработка конфигурационных данных, окончательно проверяемых и используемых уже в инструментальном чруте.
Обратите внимание: фрагменты, соответствующие именам субпрофилей, добавляются автоматически; это поведение при необходимости отключается выставлением переменной SYSLINUX_DIRECT и тогда вместо use/syslinux/*.cfg следует применять прямое указание вида @$(call set,SYSLINUX_CFG,…).
Установить дефолтный пункт: Для того, чтобы установить конкретный дефолтный пункт (пример для LiveCD с поддержкой сессии):
@$(call set,SYSLINUX_DEFAULT,session)
Именем дефолтного пункта является LABEL.
Эта фича занимается терминалами ввода-вывода, в первую очередь COM-портами (serial console).
Следует заметить, что systemd занимается развешиванием agetty самостоятельно.
По умолчанию при сборке образа xorriso генерирует UUID образа вида YYYY-MM-DD-hh-mm-ss-cc из текущего времени. Если в командной строке xorriso есть пареметр -volume_date uuid YYYYMMDDhhmmsscc то UUID образа генерируется из него. Данная фича читает текущее время и создаёт переменные: UUID_ISO, содержащую YYYY-MM-DD-hh-mm-ss-cc UUID_ISO_SHRT, содержащую YYYYMMDDhhmmsscc Также фича добавляет в initrd файл /lib/udev/rules.d/60-cdrom_id.rules Это позволяет идентифицировать CD/DVD по UUID и использовать для загрузки инсталлятора method:disk,uuid:YYYY-MM-DD-hh-mm-ss-cc
Эта фича обеспечивает специфичную для vagrant предварительную настройку образа файловой системы виртуальной машины.
Обратите внимание, что специфика включает широко известные: - пароли root и пользователя vagrant с беспарольным sudo; - "секретный" ключ от публичной части у пользователя vagrant.
См. тж.:
Эта фича предназначена для конфигурирования поддержки выполнения дистрибутивов в качестве гостей в среде виртуальных машин.
Эта фича обеспечивает выставление нужного профиля разбивки дисков при установке с помощью installer или livecd-install.
Эта фича добавляет в формируемый пользовательский корень (как правило, live) функцию автоматического входа путём конфигурирования отдельно запрошенного для установки display manager (например, lightdm) либо специального средства (пакеты nodm или autologin).
Обратите внимание: с autologin могут быть проблемы под systemd, а при использовании работающего в таком окружении nodm на сегодня отмечено наличие /sbin:/usr/sbin в пользовательском PATH перед /bin:/usr/bin, что приводит к неработоспособности consolehelper и livecd-install, который им пользуется.
Эта фича добавляет в формируемый пользовательский корень (как правило, live) функцию автоматического запуска графической сессии; обратите внимание, что автоматическим входом после запуска графики занимается соседняя фича x11-autologin.
Эта фича добавляет базовую поддержку графической системы X11, а также комплектует типовые десктопные окружения и средства графического входа в систему.
Для добавления X-сервера и драйверов используйте цели: - use/x11/xorg — свободные драйверы, может недоставать акселерации, особенно 3D, и функций энергосбережения, но поддерживают наиболее широкий спектр оборудования для типичных десктопных задач; - use/x11/3d — по возможности подключаются проприетарные драйверы NVIDIA, обычно обладающие более высоким уровнем ускорения графики, но также имеющие и больше проблем совместимости со свежими ядрами/xorg-server, а заодно обычно рано теряющие поддержку "устаревших" видеокарт.
Возможно предоставлять в образе одновременно свободные и закрытые драйверы, но в этом случае следует понимать, что автоопределение в X.org предпочитает свободный драйвер и nvidia при наличии nouveau не будет автоматически выбран, т.е. потребуется дополнительное конфигурирование (вручную или при помощи alterator-x11) — для live-систем это может быть лишено практического смысла.
Обратите внимание: как и в фиче bootloader, переключение на какой-либо дисплейный менеджер срабатывает только один раз;
use/x11/xdm use/x11/lxdm use/x11/xdm
приведёт к выставлению lxdm, а не xdm, поскольку это будет последняя "новая" цель с точки зрения make.
При необходимости перекрыть последнее изменение добавьте:
@$(call set,THE_DISPLAY_MANAGER,нужный)
This feature allows to use X11 through VNC server. It adds x11vnc package and sets default password to alt. Another thing is that this feature adds dummy video adapter configuration to the /etc/X11/xorg.conf.d/. x11vnc becomes default service.
Эта фича обеспечивает наличие "ручки" для конфигурирования типовых пользовательских каталогов для нескольких типов данных и предоставляет возможность задавать предпочитаемые умолчания, которые могут различаться по дистрибутивам.
См. тж.:
Этот каталог содержит субпрофили; содержимое затребованных (названия которых содержатся в значении переменной SUBPROFILES, которую заполняют цели sub/* — см. lib/sugar.mk) будет скопировано в корневой каталог формируемого профиля.
Просьба ответственно относиться к изменению существующих субпрофилей и вдумчиво — к созданию новых; возможно, достаточно всего лишь оформить нужное новой фичей (см. features.in/).
Обратите внимание: поскольку сборка частей дистрибутивного образа и происходит в каталогах субпрофилей, то повторное использование одного простого субпрофиля в рамках сгенерированного профиля штатным образом невозможно. Если требуется создать несколько близких по реализации субпрофилей, изучите stage2 и задействующие его фичи.
Краткое описание существующих вариантов (см. соотв. README):
Этот каталог содержит субпрофиль main, собирающий пакетную базу для локальной инсталяции дистрибутива из полученного образа, включая необязательные пакеты; в distro/live-builder применяется как локальный репозиторий для сборки.
Рекомендуется использовать BASE_PACKAGES и BASE_LISTS для того, что должно быть установлено по умолчанию, и MAIN_PACKAGES, MAIN_LISTS — для того, что должно быть доступно на носителе; подробнее см. в документации фичи metadata.
Если что-либо требуется как в main, так и в live, применяйте THE_PACKAGES и THE_LISTS вместо дублирования вручную.
В image-scripts.d смысла нет, только scripts.d, т.к. рабочий чрут не содержит исполняемых файлов.
Не следует использовать этот субпрофиль напрямую, для добавления пакетного репозитория в образ предназначена фича use/repo/main.
Результат — каталог ALTLinux/RPMS.main для копирования в образ (если не указан иной суффикс посредством переменной MAIN_SUFFIX).
Этот каталог содержит субпрофиль первой стадии загрузки; здесь место syslinux (загрузчик) и propagator (ориентировка на местности, вытягивание второй стадии с CD/FTP/…).
Скрипты запускаются извне формируемого образа (scripts.d/); следует крайне бережно относиться к объёму этой стадии.
Обратите внимание: если не указать явно требуемый вариант ядер посредством STAGE1_KFLAVOURS, то будет взят из KFLAVOURS; если используется загрузчик отличный от grub, то будет взят последний указанный в STAGE1_KFLAVOURS или KFLAVOURS; если не указать явно регэкс, описывающий требуемые в инсталяторе kernel-modules-, посредством STAGE1_KMODULES_REGEXP — будут доступны модули из kernel-image (упаковываются в boot/full.cz).
Сам список модулей, попадающих в full.cz, определяется в файле modules (наиболее базовые!) и дополняется указанным в переменной STAGE1_MODLISTS набором списков модулей, см. features.in/stage2/stage1/modules.d/ в качестве примера.
Требуется для инсталяционных, live- и rescue-образов, соответствующими фичами подключается автоматически (в силу зависимости stage2 от stage1).
Результат — каталог syslinux/ для копирования в образ.
Этот каталог содержит общий базовый субпрофиль "живой" второй стадии, используемый для сборки образов install2, live, rescue (возможно, нескольких одновременно в составе одного дистрибутива).
Зависимость на него стоит прописывать в таких фичах; сама по себе (без нужного stage2cfg.mk) смысла не имеет.
Обратите внимание, что набор потенциально доступных в stage1 модулей ядра для stage2 может быть расширен (STAGE2_KMODULES).
Результат — соответственно названный файл со squashfs, подлежащий копированию в итоговый образ.
NB: смонтированный образ доступен в такой системе как /image/.
Этот каталог содержит все возможные списки пакетов и описания групп, которые по мере необходимости копируются из метапрофиля в формируемый профиль.
Этот каталог содержит списки пакетов, копируемые из метапрофиля в создаваемый профиль по необходимости (определяется по наличию имён списков в переменных *_LISTS, см. реализацию в ./Makefile).
Список .base является особенным (формирует базовую систему, см. http://www.altlinux.org/Alterator-pkg); он создаётся из содержимого ряда переменных (см. реализацию).
Подкаталог tagged содержит тегированные списки, имена которых удобно получать функцией tags() (см. lib/functions.mk).
Для выявления дубликатов в составе списков служит ‘make pkgdups’; пытаться избежать дублей на 100% скорее бесполезно, но бродячие устойчивые группы пакетов могут заслуживать выделения отдельным списком.
При копировании списков в BUILDROOT происходит их обработка с применением архитектурнозависимых макросов, см. doc/archdep.txt
NB: списки пакетов есть смысл выделять в файлы при повторном использовании либо при заметном объёме, когда перечисление прямо в конфигурации сильно снижает её читаемость.
Этот каталог содержит тегированные списки; на данный момент реализация (bin/tags2lists) требует, чтобы каждый из тегов был отдельным словом из символов в наборе [a-zA-Z0-9_]
Не используйте в слове "-"); рекомендуется разделять слова "+".
Применение: дополнение жёстко статически заданной функциональности (как правило, обязательной в данном образе) более "плавающим" в долгосрочном плане результатом раскрытия списка тегов (который может покрывать второстепенные вещи способом, обычно требующим меньше внимания).
Реализация никак не сопряжена с pkg.in/groups/
Этот каталог содержит описания групп, копируемые из метапрофиля в создаваемый профиль по необходимости (только фигурирующие в списке, которым является значение переменной MAIN_GROUPS).
В данный момент перенесено почти 1:1 из mkimage-profiles-desktop, требует увязки с pkg.in/lists/tagged/
Некоторые фрагменты кода закладываются на определённое поведение других частей mkimage-profiles либо содержание переменных.
NB: пути приводятся от верхнего уровня; проект в целом предполагает наличие ALT 8.0+ и GNU make 3.82+ (на которых и разрабатывается), но может быть портирован вместе с mkimage. Если что-либо не работает или не собирается, стоит проверить на Sisyphus (mkimage, make, hasher, собственно пакетная база), поскольку именно на нём происходит основная разработка mkimage-profiles. Сломанная сборка на текущем стабильном бранче считается ошибкой и подлежит исправлению, если оно технически возможно на базе этого бранча.
lib/report.mk
pkg.in/lists/Makefile
характерное сообщение об ошибке:
E: Couldn't find package
sub.in/stage1/Makefile
features.in/syslinux/scripts.d/20-propagator-ramdisk
image.in/Makefile
При отладке сборки конфигурации или самого дистрибутива могут оказаться полезными следующие средства:
build/distcfg.mk
build/build.log
REPORT=1 включает генерацию дополнительного вывода:
Общая информация по отладке сборки профилей mkimage доступна на вики: https://www.altlinux.org/Mkimage/debug
ВНИМАНИЕ: заключительная операция создания образа жёсткого диска из архива с содержимым корневой файловой системы требует доступа к sudo и разрешения на выполнение скрипта bin/tar2fs в корневом каталоге метапрофиля при установке mkimage-profiles из пакета (это в планах исправить, но подход к libguestfs пока успехом не увенчался).
Соответствующий фрагмент конфигурации sudo(8) может выглядеть как:
mike ALL=NOPASSWD: /usr/share/mkimage-profiles/bin/tar2fs
При работе с локальной копией mkimage-profiles.git следует иметь в виду, что предоставлять недоверенному пользователю право выполнять от имени root доступный ему по записи скрипт равнозначно предоставлению полных привилегий root (поэтому фича build-vm сперва проверяет наличие системно установленного пакета и по возможности старается запустить под sudo скрипт из него, доступный по записи только root).
Для работы с более специфичными форматами, чем raw ("буквальный" образ диска), потребуется утилита qemu-img из одноименного пакета; см. тж. вывод команды make help/vm
Также потребуется пакет multipath-tools (/sbin/kpartx).
Пример сборки и запуска VM:
$ make ROOTPW=reallysecret1 vm/bare.img && kvm -hda ~/out/bare.img
Если при сборке образа файловой системы произойдёт сбой, может оказаться нужным вручную освободить используемые loop-устройства, например, так:
# losetup -a # kpartx -d /dev/loop0 # losetup -d /dev/loop0
Для сборки на "неродной" архитектуре с применением трансляции посредством QEMU установите пакет livecd-qemu-arch и выполните команду register-qemu-armh от имени root (также предоставляется register-qemu-ppc, но как минимум при сборке под ppc32 на x86_64 известны проблемы эмуляции).
Пример запуска:
make ARCH=armh APTCONF=/etc/apt/apt.conf.sisyphus.arm ve/bare.tar
Обратите также внимание на https://bugzilla.altlinux.org/34638
Достаточно воспользоваться ifeq/ifneq, сравнивая $(ARCH) с нужным:
ifeq (x86_64,$(ARCH)) EFI_LISTS := $(call tags,base efi) endif
При необходимости сравнить со списком ("любой x86") можно сделать так:
ifeq (,$(filter-out i586 x86_64,$(ARCH))) use/x11/xorg: use/x11 use/x11/intel use/firmware else use/x11/xorg: use/x11 endif
В рецептах (shell-часть Makefile) используйте $(ARCH) или $$ARCH.
Бывает так, что в списке пакетов есть смысл упоминать какой-либо из них только для определённой архитектуры (например, wine или steam); в таких случаях можно воспользоваться механизмом подстановки, который пословно обрабатывает списки и в случае наличия суффикса @ARCH оставляет только слова, в которых этот суффикс соответствует заданной архитектуре сборки.
Например, для Simply Linux в mkimage-profiles-desktop есть строчки:
@I586_ONLY@haspd @X86_64_ONLY@i586-haspd
В случае mkimage-profiles они должны выглядеть так:
haspd@i586 i586-haspd@x86_64
или упрощённо (с версии 1.2.12):
haspd@IA32
С версии 1.3.15 поддерживается макрос E2K ("любое поколение e2k*") и ARM (armh или aarch64), а также выборка "для любой архитектуры, кроме" (например, @!E2K, или "@!ARM).
С версии 1.4.21 поддерживается перечисление архитектур через запятую после "@" или "@!":
LibreOffice-still@X86,aarch64,ppc64le,mipsel java-11-openjdk@!E2K,mipsel
Для преобразования можно воспользоваться следующей командой:
sed -r -e 's/@I586_ONLY@([^\t ]+)/\1@i586/g' \ -e 's/@X86_64_ONLY@([^\t ]+)/\1@x86_64/g'
При необходимости добавить пакет только на x86-архитектурах (неважно, i586 или x86_64) можно воспользоваться макросом X86 (с версии 1.2.12):
xorg-drv-intel@X86
Аналогичная функциональность реализована для профилей установки.
Для раскрытия метапакета в список используется суффикс @META:
engineering-2D-CAD@META
apt запрашивает зависимости такого пакета и добавляет их в список пакетов после этого метапакета.
Обратите внимание, что игнорируются нечёткие зависимости, т.е. предоставляемые несколькими пакетами.
Возможности совмещать с суффиксом @ARCH нет. Так что имейте в виду, что метапакет должен быть доступен для всех целевых архитектур.
Для лучшего понимания работы механизма раскрытия списка нужно смотреть bin/metadep-expander. metadep-expander выполняется до archdep-filter.