Вход:  Пароль:  
FreeSource: AltLinux/Sisyphus/devel/ОсобенностиСборкиПакетов ...
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |
Это старая версия AltLinux/Sisyphus/devel/ОсобенностиСборкиПакетов за 2005-02-26 20:04:53..

Особенности сборки пакетов


Оглавление документа


По результатам переписки разработчиков ALT Linux Team
составлены советы по упаковке программ GTK, GNOME и KDE.
Они должны войти в книжку «ALT Linux Team и проект Sysiphus»
проекта alt-docs.

Почему в pkg-config отключена рекурсия (особенность сборки в ALT)


Рекурсивный сбор --libs в принципе не нужен, более того — вреден,
хотя бы потому что является источником огромного числа лишних
зависимостей, которые потом должен обрабатывать apt и rpm


Если программа не линкуется с какой-либо библиотекой, то весьма
вероятно, что это ошибка в сборке библиотеки – библиотека
использует функции из других библиотек, но с ними не слинкована.
Ошибка эта практически везде, кроме как 
в ALT Linux прикрыта стандартным поведением pkg-config.


В качестве заглушки можно вписать
export ac_cv_path_PKG_CONFIG="%_bindir/pkg-config --recursive"
перед %configure, но лучше добиться исправления проблемной библиотеки (приложения).


Файлы информации о mime-типах


В этих файлах хранится описание форматов файлов
(их 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-файле макросов
%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),
так что их тоже надо паковать.
При этом пакет не получает никаких дополнительных зависимостей.


Файлы 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
Build Pre Req?: GConf2


Файлы 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%_var/lib/scrollkeeper


Поиск файлов локализации с помощью %find_lang


%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 в %_docdir/HTML


Далее секция %files оформляется следующим образом:
%files -f %name.lang


%find_lang, являющийся скриптом, имеет и другие
параметры, делающие его более гибким.


Файлы меню


После перемещения в alt-docs необходимо совместить данный
раздел с файлом
ftp://ftp.altlinux.org/pub/people/zerg/menu/menu-packaging-howto-current.txt


Файл меню либо создаётся непосредственно заданием
его содержимого, либо формируется. Перевод строк,
содержащихся в меню, содержится в пакете menu.
На основе файла меню, устанавливающегося в /usr/lib/menu,
генерируются меню для всех оконных менеджеров, установленных
в системе.


Пример того, как обычно в спеке создают файл меню:
%__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


РЕКОМЕНДУЕМЫЙ СПОСОБ:
Как правило к программе прилагается файл .desktop, который
уже содержит эту информацию, из него можно получить
файл меню следующей командой в разделе %install:


freedesktop2menu.pl %name "Applications / Communications?" \

%buildroot%_datadir/applications/%name.desktop \
%buildroot%_menudir/%name

При использовании этого скрипта в пакете
должна быть указана зависимость:
Build Pre Req?: menu-devel


Каталог для файлов меню обычно создают командой:
%__mkdir_p %buildroot%_menudir


Созданный файл меню устанавливается в каталог %_menudir.
При установке или удалении пакета меню должно переформироваться,
для этого в спеке должны быть секции:


%post
%update_menus


%postun
%clean_menus


Они предназначены для переформирования меню при каждой установке/удалении
пакета.


В секции %files:


%_menudir/*
%_datadir/applications/*
и возможно
%_datadir/application-registry/*


Пережиток 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 есть
$ grep -i mime //usr/share/applications/*.desktop
Mime Type?=.....;


В спеке должны быть секции:
%post
%update_desktopdb


%postun
%clean_desktopdb


В пакете должна быть указана зависимость:
Requires(post,postun): desktop-file-utils
Build Pre Req?: desktop-file-utils


Используется вне зависимости от типа программы в пакете,
и всегда должно быть указано.


Файлы bonobo


Пока ничего не знаю кроме того, что в %files пишется
%_libdir/bonobo/servers/*

Статические библиотеки


Упаковываются в пакет с суффиксом -devel-static
Как правило, статические библиотеки не требуются,
и поэтому в начале спеке ставится
%def_disable static


При конфигурировании указывается
%configure %{subst_enable static}


При указании пакетов на упаковку
%if_enabled static
%files devel-static
[...]
%endif


Установка файлов


В секции %install для установки файлов используется несколько способов


1.
%make_install install DESTDIR=%buildroot
(в случае если используется схема Makefile с DESTDIR)


2.
%makeinstall
(она задаёт 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


09.11.2004, 21.01.2005


Страницы, ссылающиеся на данную: AltLinux/Sisyphus/devel/СборкаПакетов


 
Файлов нет. [Показать файлы/форму]
Комментариев нет. [Показать комментарии/форму]