[devel] %post-script prerequisites

Alexey Tourbin =?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Ср Сен 24 19:43:54 MSD 2008


On Wed, Sep 24, 2008 at 05:16:13PM +0400, Dmitry V. Levin wrote:
> On Wed, Sep 24, 2008 at 12:37:26PM +0000, Alexey M. Tourbin wrote:
> > Когда в %post-скрипте пакета запускается программа, запакованная
> > в сам этот пакет, тогда некоторые зависимости Requires пакета нужно
> > продублировать в Requires(post).  Например, если в пакете libgtk+2
> > запускается программа gkt-update-icon-cache, то должна появиться
> > зависимость на новый пакет glib2 вида
> > Requires(post): libglib-2.0.so.0(GLIB_2.18).
> 
> Зачем должна появляться такая зависимость?

1) пакет foo содержит программу /usr/bin/update-foo.
2) /usr/bin/update-foo запускается в %post-срипте пакета foo.
3) зависимость Requires(post): /usr/bin/update-foo естественным
образом оптимизируется (*), потому что на стадии выполнения %post-скрипта
файл /usr/bin/update-foo уже распакован (в любом случае, эта зависимость
ничего не дала бы).
4) файл /usr/bin/update-foo слинкован с libglib-2.0.so.0(GLIB_2.18).

Тогда rpm имеет право установить/обновить пакет glib2 после пакета foo.
Остается полагаться на топологическую сортировку пакетов при установке
или обновлении, но она может не сработать (rpm всё ещё имеет право
переупорядочить пакеты невыгодным нам образом), и тогда %post-скрипт
обломится.

Единственное решение состоит в том, что подмножество зависимостей
пакета foo, необходимых для запуска /usr/bin/update-foo (то есть,
в частности, libglib-2.0.so.0(GLIB_2.18)) необходимо дополнительно
указать в Requires(post).

[*] Правда есть ещё одно решение, которое только что мне пришло в
голову.  В пункте 3 можно не оптимизировать зависимость "Requires(post):
/usr/bin/update-foo"; тогда нужно модифицировать алгоритм топологической
сортировки пакетов следующим образом: если в пакете есть зависимость
Requires(post), которая разрешается в сам этот пакет, то все зависимости
Requires *должны* быть установлены до выполнения %post-скрипта (то есть
это неявная полная трансляция зависимостей Requires -> Requires(post),
вместо частичной и явной).
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 197 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20080924/2de3734e/attachment-0002.bin>


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