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, а не только на имена настоящих пакетов. В любом случае, как правило, не следует паковать один и тот же файл в несколько подпакетов.