我们如何在构建 .deb 包时添加特定于 arch 的冲突标签?

我们如何在构建 .deb 包时添加特定于 arch 的冲突标签?

我们正在尝试构建支持多架构的 i386 .deb 包。有两个 .deb 包基于 i386 X1 和 X2 构建(X2 是 X1 二进制文件的子集)。安装时 X1 <-> X2 相互冲突。任何情况下只能安装一个 .deb 包。

同样,我们在 xa64 arch 上有二进制文件。同样在 xa64 上,有两个 .deb 包 X1 和 X2(X2 是 X1 二进制文件的子集)。安装时 X1 <-> X2 相互冲突。任何情况下只能安装一个 .deb 包。

对于多架构 i386 .deb 包,i386 .deb 包(X1 和 X2)可与 64 位(X1 和 X2)一起安装在 xa64 上

但是我发现安装 X1:i386 和 X1:amd64 时可以共存,但是尝试安装 X1:i386 和 X2:amd64 时会引发冲突错误

简而言之,我们可以根据 arch 冲突将包标记为冲突: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 章详细介绍了关系的工作原理。

相关内容