
Мы пытаемся собрать пакет .deb i386 с поддержкой нескольких архитектур. Есть два пакета .deb, созданных на базе i386 X1 и X2 (X2 — это подмножество двоичных файлов X1). X1 <-> X2 конфликтуют друг с другом при установке. В любой момент времени можно установить только один пакет .deb.
Аналогично у нас есть двоичные файлы на архитектуре xa64. Опять же на xa64 есть два .deb-пакета X1 и X2 (X2 — это подмножество двоичных файлов X1). X1 <-> X2 конфликтуют друг с другом при установке. В любой момент времени можно установить только один .deb-пакет.
В случае многоархитектурного пакета i386 .deb, пакеты i386 .deb (X1 и X2) могут быть установлены на xa64 вместе с 64-битными (X1 и X2)
Однако я вижу, что при установке X1:i386 и X1:amd64 могут сосуществовать. Однако при попытке установки X1:i386 и X2:amd64 возникает ошибка конфликта.
Короче говоря, можем ли мы пометить пакет как конфликтующий на основе конфликта архитектуры: X2:i386
Пакет X1:i386 должен конфликтовать только с X2:i386 и разрешать сосуществование других пакетов. Пакет X1:amd64 должен конфликтовать только с X2:amd64 и разрешать сосуществование других пакетов.
X1:i386 может сосуществовать с X1:amd64 ИЛИ X2:amd64 X2:i386 может сосуществовать с X1:amd64 ИЛИ X2:amd64
Спасибо за ваш ответ
решение1
Отношения могут быть ограничены определенным набором архитектур. Это указано в скобках после каждого имени отдельного пакета и необязательной спецификации версии. Скобки заключают в себе непустой список имен архитектур Debian в формате, описанном в Строках спецификации архитектуры, Раздел 11.1, разделенных пробелами. К каждому имени могут быть добавлены восклицательные знаки. (Не допускается, чтобы некоторые имена были дополнены восклицательными знаками, а другие — нет.)
https://www.debian.org/doc/debian-policy/ch-relationships.html
В данном руководстве представлен ряд примеров, см., например:
Depends: foo [i386], bar [amd64]
Вы можете использовать архитектурно-специфичные Conflicts:
и Replaces:
с этим синтаксисом. Я не уверен, как сказать "X1 конфликтует/заменяет X2 той же архитектуры", это вам исследовать/пробовать. Я не уверен, что что-то вроде этого сработает:
package: X1
Architecture: i386
Conflicts: X2 [i386]
Replaces: X2 [i386]
package: X1
Architecture: amd64
Conflicts: X2 [amd64]
Replaces: X2 [amd64]
package: X2
Architecture: i386
Conflicts: X1 [i386]
Replaces: X1 [i386]
package: X2
Architecture: amd64
Conflicts: X1 [amd64]
Replaces: X1 [amd64]
Я не уверен, можно ли иметь два пакета с одинаковым именем, но разной архитектурой. Тем не менее, это отправная точка для экспериментов. Обязательно прочтите руководство по политике, глава 7 описывает, как работают отношения, очень подробно.