ОсобенностиСборкиПакетов
Особенности сборки пакетов
По результатам переписки разработчиков ALT Linux Team составлены советы по упаковке программ GTK, GNOME и KDE. Они должны войти в книжку "ALT Linux Team и проект Sysiphus" проекта alt-docs. Использование альтернативСоздаём файл с описанием предоставляемой альтернативы в каталог /etc/alternatives/packages.d/ примерно так: install -d %buildroot%_altdir cat <<EOF >%buildroot%_altdir/%name /usr/bin/предоставляем /usr/bin/вариант 40 EOF Не забываем записать %post %register_alternatives %name %postun %unregister_alternatives %name %files %_altdir/%name и Requires: alternatives pkg-configПочему в pkg-config отключена рекурсия (особенность сборки в ALT). Рекурсивный сбор --libs в принципе не нужен, более того -- вреден, хотя бы потому что является источником огромного числа лишних зависимостей, которые потом должен обрабатывать apt и rpm. Если программа не линкуется с какой-либо библиотекой, то весьма вероятно, что это ошибка в сборке библиотеки - библиотека использует функции из других библиотек, но с ними не слинкована. Ошибка эта практически везде, кроме как в ALT Linux прикрыта стандартным поведением pkg-config. В качестве заглушки можно вписать export ac_cv_path_PKG_CONFIG="%_bindir/pkg-config --recursive" перед %configure, но лучше добиться исправления проблемной библиотеки (приложения). Пример исправления можно увидеть в спеке к libgtkmm2
MIME-типыФайлы информации о MIME-типах. В этих файлах хранится описание форматов файлов (их mime-type, комментарием, способом определения принадлежности к формату по MAGIC value и шаблону...) См. подробнее http://www.freedesktop.org/Standards/shared-mime-info-spec http://www.freedesktop.org/Software/shared-mime-info
%update_mimedb и %clean_mimedb. То есть в спеке должны быть секции: %post %update_mimedb %postun %clean_mimedb И указаны зависимости: Requires(post,postun): shared-mime-info >= 0.15-alt2 2. Файлы из каталога %_datadir/mime-info/* не используется GNOME-программами, которые получают mime-информацию из пакета shared-mime-info. Тем не менее эти файлы используются рядом других программ (например, KDE), так что их тоже надо паковать. При этом пакет не получает никаких дополнительных зависимостей. 3. Для KDE определения типа файла задаётся в /usr/share/mimelnk/, например: $ cat /usr/share/mimelnk/application/x-kompas.desktop [Desktop Entry] Encoding=UTF-8 Type=MimeType MimeType=application/x-kompas Icon=wine-kviewer Patterns=*.a3d;*.m3d;*.cdw;*.spw;*.A3D;*.M3D;*.CDW;*.SPW Comment=KOMPAS Comment[ru]=Файлы КОМПАС Файлы schemasПри сборке в пакете установку schemas надо отключать: %configure --disable-schemas-install так как эта процедура должна быть выполнена при установке пакета; под пользователем при сборке пакета это невозможно. это рекомендуется вместо конструкции export GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL=1 %makeinstall unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL при установке. В спеке должны быть секции: %post %gconf2_install %name %preun if [ $1 = 0 ]; then %gconf2_uninstall %name fi в качестве параметров к %gconf2-(un)unstall может быть указано несколько названий. Образец оформления секции %files: %config %_sysconfdir/gconf/schemas/* В зависимостях пакета должно быть: Requires(post): GConf2 BuildPreReq: GConf2 BuildRequires: libGConf-devel (последнее BuildRequires -- так как макросы %gconf2.* содержатся в файле из пакета libGConf-devel) Файлы scrollkeeperНельзя упаковывать каталог и файлы из %_localstatedir/scrollkeeper, если они получаются при сборке, их надо удалить командой rm -rf %buildroot%_localstatedir/scrollkeeper в конце секции %install В спеке должны быть секции: %post %update_scrollkeeper %postun %clean_scrollkeeper В зависимостях пакета должно быть: Requires(post,postun): scrollkeeper Если %make_install вызывает scrollkeeper-update и сборка прерывается по ошибке - перед %make_install нужно сделать export OMF_DIR=%buildroot%_localstatedir/scrollkeeper
Файлы локализации%find_lang вызывается в секции %install Для программ GNOME указывается: %find_lang --with-gnome %name При этом find-lang кроме файлов переводов в %_datadir/locale ищет файлы справки Гном в %_datadir/gnome/help и .omf файлы в %_datadir/omf Поэтому не нужно указывать в секции %files каталоги с locale (переводами), а также %_datadir/omf/%name %_datadir/gnome/help/ Для программ KDE указывается: %find_lang --with-kde %name При этом find-lang ищет файлы справки KDE в %_defaultdocdir/HTML
%files -f %name.lang %find_lang, являющийся скриптом, имеет и другие параметры, делающие его более гибким.
Файлы менюПосле перемещения в alt-docs необходимо совместить данный раздел с файлом ftp://ftp.altlinux.org/pub/people/zerg/menu/menu-packaging-howto-current.txt
Пример того, как обычно в спеке создают файл меню: mkdir -p %buildroot%_menudir cat << EOF > %buildroot%_menudir/%name ?package(%name):command="%name" \ needs="x11" \ section="Applications/Communications" \ title="wxDialer" \ longtitle="A phone dialer written in wxPython" \ genericname="Phone dialer" \ icon="%name.png" EOF Если есть файл в /usr/share/applications, то menu-файл для этого пункта не нужен.
Устарело:
%Md2m %name "Applications/Communications" \ %buildroot%_desktopdir/%name.desktop \ %buildroot%_menudir/%name Это обязательно использовать, если вы хотите, чтобы работало связывания файла с обрабатывающим его приложением
При использовании этого скрипта в пакете должна быть указана зависимость: BuildPreReq: menu-devel Каталог для файлов меню обычно создают командой: mkdir -p %buildroot%_menudir Созданный файл меню устанавливается в каталог %_menudir. При установке или удалении пакета меню должно переформироваться, для этого в спеке должны быть секции: %post %update_menus %postun %clean_menus Они предназначены для переформирования меню при каждой установке/удалении пакета. В секции %files: %_menudir/* %_desktopdir/* и возможно %_datadir/application-registry/* Пережиток KDE-шного прошлого %_datadir/applnk тоже надо паковать, если имеется. При этом не появляется дополнительных зависимостей.
Статичный вариант меню хранится в %_desktopdir, а генерируемый из menu-файлов в - %_datadir/application-alt KDE не особо при чем, %_desktopdir и %_menudir - это общее для всех. После сборки нового пакета и его установке обязательно проверяйте, что программа появилась в меню на своём месте и имеет нужную пиктограмму.
Обновление базы обрабатываемых форматовВ файлах desktop кроме названия программы, способа её запуска и комментария, обычно также указаны сведения о том, какие форматы способна обрабатывать та или иная программа. Подробнее см. http://www.freedesktop.org/Standards/desktop-entry-spec
$ grep -i mime /usr/share/applications/*.desktop MimeType=.....; В спеке должны быть секции: %post %update_desktopdb %postun %clean_desktopdb В пакете должна быть указана зависимость: Requires(post,postun): desktop-file-utils BuildPreReq: desktop-file-utils Используется вне зависимости от типа программы в пакете, и всегда должно быть указано.
Файлы bonoboПока ничего не знаю кроме того, что в %files пишется %_libdir/bonobo/servers/* Статические библиотекиОбщей тенденцией является условная упаковка статических библиотек. Упаковываются они в пакет с суффиксом -devel-static. Как правило, статические библиотеки не требуются, и поэтому в начале спеке ставится %def_disable static При конфигурировании указывается %configure %{subst_enable static} которое управляет сборкой статических библиотек. При указании пакетов на упаковку %if_enabled static %files -n lib%name-devel-static %_libdir/lib%name.a %endif Тогда чтобы получить lib%name-devel-static, нужно пересобрать пакет с `--enable static'. Установка lib%name-devel-static автоматически ставит на hold lib%name-devel и, следовательно, lib%name (если между пакетами правильные зависимости). Исключение: Если в пакете собирается только статическая библиотека, без динамической, то пакет должен называться -devel. devel@ Установка файловВ секции %install для установки файлов используется несколько способов 1. %make_install install DESTDIR=%buildroot (в случае если используется схема Makefile с DESTDIR) 2. %makeinstall (она задаёт prefix и остальные пути по типу prefix=/home/lav/tmp/%{name}-buildroot/usr) Это для программ, которые не пытаются запоминать пути, куда их устанавливают, при установке, а делают это при configure. 3. Иной способ. Возможно, ручная установка с помощью install
ДополнительноБудьте внимательны при написании скриптов pre/post и прочих - Примеры использованияСмотрите в Сизифе пакеты 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-2005 Alexey Tourbin <at@altlinux.ru>, 2005 09.11.2004, 21.01.2005 |