.deb パッケージをビルドするときに、アーキテクチャ固有の競合タグを追加するにはどうすればよいでしょうか?

.deb パッケージをビルドするときに、アーキテクチャ固有の競合タグを追加するにはどうすればよいでしょうか?

マルチアーキテクチャ対応の i386 .deb パッケージをビルドしようとしています。i386 X1 と X2 でビルドされた 2 つの .deb パッケージがあります (X2 は X1 バイナリのサブセットです)。インストール時に X1 <-> X2 が競合します。どのインスタンスでも 1 つの .deb パッケージのみインストールできます。

同様に、xa64 アーキテクチャにもバイナリがあります。また、xa64 には、2 つの .deb パッケージ X1 と X2 があります (X2 は X1 バイナリのサブセットです)。インストール時に、X1 <-> X2 は互いに競合します。どのインスタンスでも、1 つの .deb パッケージのみをインストールできます。

マルチアーキテクチャ i386 .deb パッケージの場合、i386 .deb パッケージ (X1 および X2) は 64 ビット (X1 および X2) と並行して xa64 にインストールできます。

しかし、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

関係は、特定のアーキテクチャ セットに制限される場合があります。これは、各パッケージ名とオプションのバージョン指定の後に括弧で示されます。括弧は、セクション 11.1 のアーキテクチャ指定文字列で説明されている形式で、空白で区切られた Debian アーキテクチャ名の空でないリストを囲みます。各名前の先頭に感嘆符を付けることができます。(一部の名前に感嘆符を付け、他の名前に付けないことは許可されていません。)

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]

同じ名前でアーキテクチャが異なる 2 つのパッケージを作成できるかどうかはわかりません。それでも、これは実験の出発点となります。ポリシー マニュアルを必ずお読みください。第 7 章では、関係がどのように機能するかについて詳細に説明しています。

関連情報