[devel] Установка *.schemes

Alexey Rusakov =?iso-8859-1?q?ktirf_=CE=C1_altlinux=2Eru?=
Сб Мар 1 15:02:54 MSK 2008


On Sat, 01 Mar 2008 13:59:19 +0300
Yury Aliaev wrote:

> Я занимаюсь исправлением пакета gnucash. У него есть некоторое 
> количество файлов типа /etc/gconf/schemas/*gnucash*.schemas, которые не 
> устанавливаются корректным образом. В его багзилле предлагают после 
> установки программы от рута сказать "for ff in 
> /usr/share/gconf/schemas/*gnucash* ; do gconftool-2
> --config-source=xml::/etc/gconf/gconf.xml.defaults --install-schema-file 
> $ff ;
> done
> pkill gconfd"
> 
> (И, действительно, после этого всё начинает работать)
Всё правильно, но у нас это забрано в скрипты-макросы.

> Это можно, конечно, вынести, в %post секцию спека, чтобы эти действия 
> выполнялись при установке пакета. Но вроде как у нас достаточно добавить 
> в спек следующее:
> 
> %post
> %gconf2_install %name
> 
> %preun
> if [ $1 = 0 ]; then
> %gconf2_uninstall %name
> fi
Почти правда. С одной оговоркой, ниже.

> Так вот, если сделать так, то при установке пакета вылезает следующее:
> 
> [root на testing i586]#  rpm -ivh gnucash-2.2.3-alt2.i586.rpm 
> libgnucash-2.2.3-alt2.i586.rpm
> Preparing... 
> #################################################################################
> libgnucash 
> #################################################################################
> gnucash 
> #################################################################################
> I/O warning : failed to load external entity 
> "/etc/gconf/schemas/gnucash.schemas"
> Failed to open `/etc/gconf/schemas/gnucash.schemas': No such file or 
> directory
> error: execution of %post scriptlet from gnucash-2.2.3-alt2 failed, exit 
> status 1
> 
> Вопрос: что должен содержать файл /etc/gconf/schemas/gnucash.schemas 
> (которого действительно нет),
Если кратко и лень читать то, что ниже - посмотрите, как на самом деле
называется файл со схемой

> или всё же следует поступать так, как написано в багзилле гнукэша?
Не следует.
Я немного с другой стороны пойду, но зато укажу точный алгоритм, по
которому нужно идти в таких случаях. Даже странно, на fs.i его до сих пор
нет... Я хотел это вообще в какие-нибудь хитрые макросы завернуть, которые
бы сами генерили нужные %post/%postun скрипты, но в итоге дело кончилось
ничем...
Короче говоря:
1. Собираем пакет и находим все файлы вида
/etc/gconf/schemas/<название cхемы>.schemas.
2. (опционально) Раскладываем эти файлы по подпакетам так, как нам
нравится.
3. Для каждого из этих файлов пишем (в подходящем подпакете, если он в
подпакете) упоминавшуюся связку:

%post
%gconf2_install <название схемы>

%preun
if [ $1 = 0 ]; then
%gconf2_uninstall <название схемы>
fi

Обратите внимание,что указывать нужно не %name, а <название схемы> -
нередко оно совпадает с %name, но не всегда.
По теме подпакетов добавлю, что файлы schemas редко попадают в lib-пакеты
(хотя и такое бывает); как правило, они относятся всё же к конкретным
программам.
Для примера можете обратиться к пакету seahorse. Обратите внимание, что
там _две_ схемы, а не одна, и они лежат в разных подпакетах.

-- 
  Alexey "Ktirf" Rusakov
  Head of System development dept.
  ALT Linux Ltd.



Подробная информация о списке рассылки Devel