По результатам переписки разработчиков ALT Linux Team составлены советы по упаковке программ GTK, GNOME и KDE.
Они должны войти в книжку «ALT Linux Team и проект Sysiphus» проекта alt-docs.
Рекурсивный сбор libs в принципе не нужен, более того — вреден, хотя бы потому что является источником огромного числа лишних
зависимостей, которые потом должен обрабатывать apt и rpm.
Если программа не линкуется с какой-либо библиотекой, то весьма вероятно, что это ошибка в сборке библиотеки – библиотека
использует функции из других библиотек, но с ними не слинкована. Ошибка эта практически везде, кроме как в ALT Linux прикрыта стандартным поведением pkg-config.
В качестве заглушки можно вписать
перед %configure, но лучше добиться исправления проблемной библиотеки (приложения). Пример исправления можно увидеть в спеке к libgtkmm2
В этих файлах хранится описание форматов файлов (их mime-type, комментарием, способом определения принадлежности к формату по MAGIC value и шаблону...)
См. подробнее
http://www.freedesktop.org/Standards/shared-mime-info-spec
http://www.freedesktop.org/Software/shared-mime-info
1. Если в пакете есть файлы /usr/share/mime/packages/*.xml, то при его установке, удалении, обновлении необходимо обновить и кеш базы mime-типов с использованием в spec-файле макросов
То есть в спеке должны быть секции:
И указаны зависимости:
2. Файлы из каталога %_datadir/mime-info/* не используется GNOME-программами, которые получают mime-информацию из пакета shared-mime-info.
Тем не менее эти файлы используются рядом других программ (например, KDE), так что их тоже надо паковать. При этом пакет не получает никаких дополнительных зависимостей.
При сборке в пакете установку schemas надо отключать:
так как эта процедура должна быть выполнена при установке пакета; под пользователем при сборке пакета это невозможно.
это рекомендуется вместо конструкции
при установке
В спеке должны быть секции:
в качестве параметров к %gconf2-(un)unstall может быть указано несколько названий.
Образец оформления секции %files:
В зависимостях пакета должно быть:
Нельзя упаковывать каталог и файлы из %_localstatedir/scrollkeeper, если они получаются при сборке, их надо удалить командой
в конце секции %install
В спеке должны быть секции:
В зависимостях пакета должно быть:
Если %make_install вызывает scrollkeeper-update и сборка прерывается по ошибке – перед %make_install
нужно сделать export OMF_DIR=%buildroot%_var/lib/scrollkeeper
%find_lang вызывается в секции %install
Для программ GNOME указывается:
При этом find-lang кроме файлов переводов в %_datadir/locale ищет файлы справки Гном в %_datadir/gnome/help и .omf файлы в %_datadir/omf
Поэтому не нужно указывать в секции %files каталоги с locale (переводами), а также
Для программ KDE указывается:
При этом find-lang ищет файлы справки KDE в %_docdir/HTML
Далее секция %files оформляется следующим образом:
%find_lang, являющийся скриптом, имеет и другие параметры, делающие его более гибким.
После перемещения в alt-docs необходимо совместить данный раздел с файлом ftp://ftp.altlinux.org/pub/people/zerg/menu/menu-packaging-howto-current.txt
Файл меню либо создаётся непосредственно заданием его содержимого, либо формируется. Перевод строк, содержащихся в меню, содержится в пакете menu. На основе файла меню, устанавливающегося в /usr/lib/menu, генерируются меню для всех оконных менеджеров, установленных
в системе.
Пример того, как обычно в спеке создают файл меню:
*РЕКОМЕНДУЕМЫЙ СПОСОБ:*
Как правило к программе прилагается файл .desktop, который уже содержит эту информацию, из него можно получить файл меню следующей командой в разделе %install:
При использовании этого скрипта в пакете
должна быть указана зависимость:
Каталог для файлов меню обычно создают командой:
Созданный файл меню устанавливается в каталог %_menudir. При установке или удалении пакета меню должно переформироваться,
для этого в спеке должны быть секции:
Они предназначены для переформирования меню при каждой установке/удалении пакета.
В секции %files:
Пережиток KDE-шного прошлого %_datadir/applnk тоже надо паковать, если имеется. При этом не появляется дополнительных зависимостей.
Сейчас *.desktop и menu-файлы существуют параллельно. %_menudir обязательно, а %_datadir/applications/*.desktop – нет. Когда-нибудь в далеком будущем бОльшая часть оконных менеджеров будет уметь самостоятельно читать %_datadir/applications. Тогда пакет menu станет не нужен.
Статичный вариант меню хранится в %_datadir/applications, а генерируемый из menu-файлов в – %_datadir/application-alt
KDE не особо при чем, %_datadir/applications и %_menudir – это общее для всех.
После сборки нового пакета и его установке обязательно проверяйте, что программа появилась в меню на своём месте и имеет нужную пиктограмму.
В файлах desktop кроме названия программы, способа её запуска и комментария, обычно также указаны сведения о том, какие
форматы способна обрабатывать та или иная программа.
Подробнее см. http://www.freedesktop.org/Standards/desktop-entry-spec
Нижеописанное нужно только в случае если в %_datadir/applications/*.desktop есть
В спеке должны быть секции:
В пакете должна быть указана зависимость:
Используется вне зависимости от типа программы в пакете, и всегда должно быть указано.
Пока ничего не знаю кроме того, что в %files пишется %_libdir/bonobo/servers/*
Общей тенденцией является условная упаковка статических библиотек. Упаковываются они в пакет с суффиксом -devel-static.
Как правило, статические библиотеки не требуются, и поэтому в начале спеке ставится
При конфигурировании указывается
которое управляет сборкой статических библиотек.
При указании пакетов на упаковку
Тогда чтобы получить lib%name-devel-static, нужно пересобрать пакет с `enable static'. Установка lib%name-devel-static автоматически ставит
на hold lib%name-devel и, следовательно, lib%name (если между пакетами правильные зависимости).
В секции %install для установки файлов используется несколько способов
1.
(в случае если используется схема Makefile с DESTDIR)
2.
(она задаёт prefix и остальные пути по типу
prefix=/home/lav/tmp/%{name}-buildroot/usr)
Это для программ, которые не пытаются запоминать пути, куда их устанавливают, при установке, а делают это при configure.
3. Иной способ. Возможно, ручная установка с помощью %__install
Будьте особенны внимательны при написании скриптов pre/post и прочих – используемые там пакеты должны быть прописаны в Requires.
Желательно не использовать перенаправление вывода в /dev/null
Смотрите в Сизифе пакеты ggv2, rythmbox, eog2, gthumb, totem, conglomerate, inkscape
Yuri N. Sedunov <aris@altlinux.ru>, 2004
Vitaly Lipatov <lav@altlinux.ru>, 2004–2005
Sergey Turchin <zerg@altlinux.ru>, 2004
Alexey Tourbin <at@altlinux.ru>, 2005
09.11.2004, 21.01.2005