[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