[devel] %post-script prerequisites

Alexey Tourbin =?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Сб Сен 27 20:51:50 MSD 2008


On Wed, Sep 24, 2008 at 11:28:41PM +0400, Dmitry V. Levin wrote:
> On Wed, Sep 24, 2008 at 03:43:54PM +0000, Alexey Tourbin wrote:
> > Тогда rpm имеет право установить/обновить пакет glib2 после пакета foo.
> > Остается полагаться на топологическую сортировку пакетов при установке
> > или обновлении, но она может не сработать (rpm всё ещё имеет право
> > переупорядочить пакеты невыгодным нам образом), и тогда %post-скрипт
> > обломится.
> 
> rpm пытается упорядочить установку пакетов согласно зависимостям.
> Невыгодное упорядочение может возникнуть только в случае, если имеет
> место цикл зависимостей, который был разорван неудачно.  Насколько
> это реально, в применении к описываемой ситуации с %post-скриптом?

Между прочим, я обратил внимание на эту проблему, когда взялся готовить
новую версию libgtk+2.

[at на people ~]$ rpmpeek /ALT/Sisyphus/files/SRPMS/libgtk+2-2.12.11-alt2.src.rpm cat -n libgtk2.spec |grep -C1 glib
    61
    62  %define glib_ver 2.13.5
    63  %define cairo_ver 1.%api_ver
--  
    71  # We need to prereq these so we can run gtk-query-immodules-%api_ver in post
    72  PreReq: glib2 >= %glib_ver
    73  PreReq: libpango >= %pango_ver
--  
    78
    79  BuildPreReq: glib2-devel >= %glib_ver
    80  BuildPreReq: libcairo-devel >= %cairo_ver
[at на people ~]$ 

Комментарий насчёт "We need to prereq" по сути правильный -- это именно
тот класс проблем, который следовало бы разрешать автоматически, а не
вручную.

С другой стороны, обращает на себя внимание различие между минимальной
версией glib2, необходимой для сборки, и минимальной версией glib2,
необходимой впоследствии для установки.

Для сборки требуется далеко не самая свежая версия glib2, так что
сборочную зависимость с версией можно было бы вообще не указывать (в
configure.in, действительно, указана версия 2.13.5, а в branch 4.0
сейчас лежит версия 2.14.1, так что сборочная зависимость с версией
просто не актуальна).

Но установочная зависимость может быть гораздо больше минимальной
сборочной зависимости, потому что при сборке с более свежей версией будут
использоваться новые функции glib2 -- так, при сборке со свежей версией
glib2 должна появиться зависимость на libglib-2.0.so.0(GLIB_2.18).

Значит, зависимость вида "PreReq: glib2 >= %glib_ver" симптоматична:
она добавлена из правильного соображения, но по сути оказывается
недостаточной.  На самом деле вместо "топорной" PreReq зависимости
на уровне версии нужна "бинарная" зависимость вида Requires(post)
на уровне ABI.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?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/20080927/1ef14250/attachment-0002.bin>


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