[devel-distro] RFC: package list tags
Michael Shigorin
mike at osdn.org.ua
Thu Aug 13 21:37:49 MSK 2009
Здравствуйте.
Заранее прошу прощения за объём текста, но такова уж задача.
Спасибо тем, у кого хватит терпения не только прочитать и
обдумать, но и посмотреть и высказаться, а то и применить.
о чём речь
~~~~~~~~~~
Мысли о том, что mkimage-profiles-desktop::profiles/pkg/lists/
достаточно густо населено, чтоб напоминать уже толкучку,
возникали ещё весной[1,2].
Дело отчасти в том, что списки не могут включать другие списки
и сейчас требуется явное указание имён списков пакетов на том
или ином этапе (благодаря use-% количество таких указаний уже
сократилось, но всё равно их ещё надо слишком много, чтобы делать
порезку более мелкой и не угробиться при обновлении makefiles).
Возможно, этот подход будет когда-нибудь реализован в mkimage
и будет полезен сам по себе, но имеется ещё один вариант:
тегирование списков пакетов и их подтягивание по набору тегов.
В бранче tags моего репозитория m-p-d это в некотором виде уже
реализовано, но остаётся ряд вопросов по тому, как лучше будет
пользоваться этой возможностью. Потому и хочу посоветоваться.
что сделано
~~~~~~~~~~~
Созданы два скриптика:
* bin/lists2tags, который выковыривает из списков комментарии вида
"# tags: tag1, tag2..." и строит плоское дерево каталогов с
именами найденных тегов под pkg/tags/, заполняя его симлинками
на сами списки; запускается из pkg/lists/Makefile или руками:
pkg/lists $ PKGDIR=.. ../../../bin/lists2tags *
(сейчас просто make tags не сработает, GLOBAL_PKGDIRS нет);
* bin/tags2lists, который выдаёт имена тех списков, которые
содержат все перечисленные в командной строке теги; обёрнут
функцией tagged в profiles/functions.mk, пример использования
можно посмотреть в profiles/main/Makefile.in -- там есть
тестовая цель и добавка к IMAGE_PACKAGES, которая ссылается
на GLOBAL_BASE_TAGS и GLOBAL_DISK_TAGS, пока нигде не
определяемые.
Была мысль переделать с изначальных каталогов с симлинками на
файлы со списками имён пакаджлистов, но это чуточку удобней в
tags2lists и сильно неудобней в lists2tags -- в т.ч. пришлось
бы вручную обеспечивать уникальность вхождений -- а также при
просмотре tags/ глазами (плюс симлинки могут пойти в ход и не
так, как я предполагал). Также вариант с каталогами включает
возможность иерархических тегов, в отличие от файлового.
Ещё изначальная реализация подразумевала игнорирование тегов,
для которых не существует каталога под tags/ (без автосоздания)
-- но посоветовавшись с led@, решил сделать не так строго.
Также сделаны необходимые мелкие правки в нужных makefiles
и добавлено заполнение @TOPDIR@ в configure.ac.
Раскиданы изначальные теги по _группам_ списков пакетов.
Они заведомо несовершенны и, возможно, ещё непригодны к
использованию как есть, и это ещё один из вопросов.
Всё это кратко добавлено в README.
что ясно
~~~~~~~~
Как тегировать списки? Тут пока ясно одно: разводить ещё один
уровень опосредованности, тегируя как "icewm" список пакетов под
именем "icewm", содержащий одну строчку "icewm" -- излишне.
Надо:
* выработать пригодную для выборок и по возможности
ортогональную категоризацию;
* добавить/поправить теги в списках, которые имеют общее;
* выделить в отдельные файлы и протегировать общие "кластеры"
пакетов, ходящие по куче разных списков (тж. bin/pkgdups.sh).
Пока в качестве свойств и возможных значений могу предложить такие:
компонент: base, disk(?), addon, contrib, live(?)
возможно, live стоит выделить в отдельный класс, не знаю
направленность(?): desktop, server
эта категоризация может быть слишком грубой и притом
слишком накладывающейся со следующим пунктом
разновидность: gnome, kde, xfce, [office, backup]
вот здесь не особо понятно, см. тж. ниже
носитель: cd, dvd
текущие списки *-lite тегируются как cd, полные -- как dvd,
базовые -- как cd, dvd
архитектура: i586only, x86_64only
слегка хотелось бы избавиться от @I586_ONLY@ в списках,
потому как каждое такое вхождение приходится отмечать и в
configure и вообще это всё как-то некрасиво; если вводить
теги i586, x86_64, то придётся или совать их вместе в каждый
список, который работает для всех наших платформ, или сперва
наворачивать логику выборки от текущего простого AND по всем
что неясно
~~~~~~~~~~
Стоит ли думать в сторону иерархии тегов -- как-то:
desktop desktop/kde desktop/gnome
server server/office server/backup
или помимо необходимости продумывания и реализации видны иные
противопоказания?
Стоит ли делать полноценный язык выборки? Особенно над этим
задумывался, расставляя "cd" и "dvd". (если да -- скорее всего,
придётся использовать sqlite)
Как этим всем пользоваться? В принципе, сейчас можно попробовать
расставить и задействовать теги таким образом, чтоб заменить ими
GLOBAL_BASE_PACKAGE_LISTS сотоварищи, но практически я этого ещё
не доказал. Пока кажется разумным использование в качестве
дополнения и плавное дробление сильно задублированных списков[3].
Возможно, когда-то получится нечто вроде такого:
- выбранный тип дистрибутива определяет базовый набор тегов
(например, "desktop" -> kde);
- выбранный подвид -- дополняет или корректирует его
(например, "gnome desktop" убирает kde, добавляет gnome);
- выбранный тип носителя определяет набор списков
(например, для "cd" включаются только тегированные так);
- и уже где-то ближе к завершающему этапу располагаются ручки
для точечной коррекции попакетно, поскольку понятно, что перед
каждым выпуском утряхивать состав приходится оперативно и лучше
иметь "последний довод релиз-менеджера" (tm), чем вылавливать,
откуда что вдруг вылезло по зависимостям или тегам;
- см. тж. [4].
Пока не совсем понятно, где именно тут branding, но его возможно
и не засовывать именно сюда -- пусть себе наследуется от указания
дистрибутива или задаётся через --with-branding и дальше.
Ещё неясно, куда именно относятся вариации вроде школьности.
Поскольку дистрибутив из списков с практически любым набором
других тегов может иметь ещё и такое свойство _в дополнение_,
разве по части дизайна и документации -- возможно, в замену.
Открыт вопрос с тегом docs -- а нужен ли?
как пробовать
~~~~~~~~~~~~~
Втянув бранч tags из m-p-d у меня в git.alt[5], можно выполнить:
autoconf
configure
cd profiles
make test-tags
-- предпоследней строчкой должно быть нечто вроде
.../pkg/lists/base .../pkg/lists/kde
согласно тестовому списку в profiles/main/Makefile.in::test-tags.
При этом также будет выполнено построение симлинков под tags/,
можно сходить туда и полюбоваться.
Для каких-либо реальных действий, насколько пока думаю,
можно заполнять GLOBAL_BASE_TAGS и GLOBAL_DISK_TAGS в use.mk
или дёргать tagged() прямо из profiles/*/Makefile.in
ссылки
~~~~~~
[1] http://lists.altlinux.org/pipermail/devel-distro/2009-April/000280.html
[2] http://lists.altlinux.org/pipermail/devel-distro/2009-May/000337.html
[3] http://fly.osdn.org.ua/~mike/ALT/docs/whitelabel/reports/dups-20090813-uniq
[4] http://fly.osdn.org.ua/~mike/ALT/docs/whitelabel/whitelabel.PNG
[5] http://tinyurl.com/m-p-d-mike-tags
благодарности
~~~~~~~~~~~~~
Спасибо Вите Советову, а также eostapets@, led@ и boyarsh@,
принявшим участие в обдумывании этого безобразия и снимавшим
меня с разнообразных ручников в процессе; также и всем дочитавшим
до сих пор -- за терпение :-)
--
---- WBR, Michael Shigorin <mike at altlinux.ru>
------ Linux.Kiev http://www.linux.kiev.ua/
More information about the devel-distro
mailing list