[devel] file %s%s is packaged into both %s and %s

Alexey Tourbin =?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Пн Апр 7 18:27:36 MSD 2008


On Mon, Apr 07, 2008 at 01:52:02PM +0400, Alexey Tourbin wrote:
> Всё для человека!  rpmbuild теперь показывает пересечения по файлам
> между подпакетами.  Как правило, если файл запакован в несколько
> подпакетов, то это является ошибкой.  Если же это так и было задумано,
> то об этом стоит оставить пометку в spec-файле.

Иногда всё же нужно бывает запаковать один и тот же файл в два
подпакета.  В таком случае нужно обеспечить такие зависимости,
которые не позволят одновременно встать двум подпакетам разных версий и,
более того, разных сборок (например, при частичном обновлении).
Требование на самом деле состоит в том, что md5 пересекающихся файлов
должны совпадать.  Также rpm имеет право требовать чтобы и permissions и
даже timestamps пересекающихся файлов совпадали (с ходу не скажу, так это
или нет).  Иначе будет файловый конфликт (обновление вылетит с ошибкой).

Варианты обеспечить такие зависимости:

0) Один из подпакетов должен явно требовать другой.  Но тогда нет
никакого смысла паковывать одни и те же файлы сразу в два пакета.

1) Жесткая зависимость у пакетов на базовый подпакет
%package A
Requires: %name-base = %version-%release
%package B
Requires: %name-base = %version-%release
%files A
/the-same/file
%files B
/the-same/file

2) Если базового пакета нет, тогда остаётся в одном из пакетов
сделать явный конфликт:
%package A
%package B
Conflicts: A < %version-%release, A > %version-%release
%files A
/the-same/file
%files B
/the-same/file

Точнее, нужно делать "попарные" конфликты, а именно, очередной
(последующий) пакет должен конфликтовать с каждым предыдущим.
Поскольку конфликты симметричны, то достаточно указать конфликт
только в одном из пакетов.
%pacakge A
%package B
Conflicts: A
%package C
Conflicts: A
Conflicts: B
%package D
Conflicts: A
Conflicts: B
Conflicts: C
(если мысленно дополнить конфликты по симметрии, то станет ясно, что
каждый пакет конфликтует с каждым другим).

Но конфликт плох тем, что он действует и на виртуальные provides,
а не только на имена настоящих пакетов.

В любом случае, как правило, не следует паковать один и тот же файл
в несколько подпакетов.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?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/20080407/48c0ca4b/attachment-0002.bin>


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