[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