マルチアーキテクチャを使用しても、APTバージョンは異なるアーキテクチャ間で競合します。同じですか?

マルチアーキテクチャを使用しても、APTバージョンは異なるアーキテクチャ間で競合します。同じですか?

Raspbianと64ビットカーネルを使用して、以下からパッケージをインポートします。

deb [arch=armhf] http://raspbian.raspberrypi.org/raspbian/ stretch main contrib non-free rpi
deb http://deb.debian.org/debian stretch main contrib non-free
deb http://deb.debian.org/debian stretch-updates main contrib non-free

gzip:arm64などのプログラムを実行するために最小依存関係をインストールしようとすると、競合が報告されます。例:

libgcc1 : Breaks: libgcc1:arm64 (!= 1:6.3.0-18+rpi1+deb9u1) but 1:6.3.0-18+deb9u1 is to be installed
gcc-6-base:arm64 : Breaks: gcc-6-base (!= 6.3.0-18+deb9u1) but 6.3.0-18+rpi1+deb9u1 is to be installed

「+rpi1」のように見えます。腕水素夫非rpi1とパッケージがクラッシュします。ARM64バッグ。しかし、これはパッケージを比較していることを意味します。バージョン2つの異なるアーキテクチャにわたって!

とにかく、apt-getのエラーメッセージは誤解を招く可能性があるため、私のシステムをbamarniのDebian Pi64(マルチアーキテクチャタスク)に似た状態にするために、次のリンクからrpi1以外のarmhfパッケージをダウンロードしてみることができます。https://packages.debian.org/stretch/armhf/libgcc1/downloadlibgcc1:armhf、gcc-6-base:armhf、libc6:armhf、libatomic1:armhfなどを置き換えると、デフォルトの競合がなくなり、aptを介してlibgcc1:arm64 gcc-6-base:arm64 libc6:arm64をインストールできます。ただし、プロセスでARMv6互換性やその他のRaspbian関連の修正が失われる可能性があるため、これは良いソリューションではありません。

上記のシナリオは、まだRaspbianパッケージに何か怪しいことが隠れていることを意味するかもしれません。次のテストは、+rpi1各制御ファイルのバージョンテキストセクションを削除するスクリプトを使用して再パッケージ化することを除いて、Raspbian * .debファイルを使用することでした。これを行い、そのパッケージを再インストールすると、arm64パッケージとの競合がなくなりました。これは、APT が 2 つの異なるアーキテクチャのパッケージバージョンを比較していることを示します。

apt-cache showこれらのいずれかを実行すると、Multi-Arch: same適切なArchitecture:行で表示されます。私が理解している限り、Multi-Arch: foreignまたはその場合は、他のアーキテクチャのバージョンにのみ興味がありますMulti-Arch: allowed

ここで何が起こっているのでしょうか? APTは異なるアーキテクチャ間のパッケージバージョンを比較しているように見えますが、これを行わないでください。 bamarniのPi64またはUbuntu MATE(またはほとんどのi386 + x86_64システム)でマルチアーキテクチャが正しく機能しているかどうか疑問に思います。その理由の1つは、システムが32ビットと64ビットでほぼ一貫したパッケージバージョンを持っているためです。

ベストアンサー1

これはマルチアーキテクチャ仕様の義務:

マルチアーキテクチャパッケージは暗黙的に同期状態を維持する必要がありますBreaks: ${self}:other (!= ${binary:Version})

その理由は、パッケージが常に共有ディレクトリ(/usr/share/doc)にいくつかのアーキテクチャに依存しないファイルを提供するため、パッケージ管理システムはそのファイルがアーキテクチャ全体で同じであることを確認する必要があるためです。 binNMUを使用している場合でも、アーキテクチャ全体に同じバージョンを適用してこれを行います。

これは単一のディストリビューション内では大きな問題ではありませんが、ディストリビューション全体ではそうです。

具体的には、あなたのケースを考えてみましょうgcc-6-base(文書がある場所なので)。 Debian Stretchのバージョンは/usr/share/doc/gcc-6-base/changelog.Debian.gz。ただし、Raspbian バージョンには次の項目が追加されます。

gcc-6 (6.3.0-18+rpi1+deb9u1) stretch-staging; urgency=medium

  [changes brought forward from 6.1.1-1+rpi1 by Peter Michael Green <[email protected]> at Wed, 11 May 2016 20:
  * Disable testsuite.

 -- Raspbian forward porter <[email protected]>  Thu, 01 Mar 2018 00:03:02 +0000

もう/usr/share/doc/gcc-6-base/changelog.Debian.gz同じではありません。 Debian StretchとRaspbian Stretchバージョンのパッケージを並べてインストールするには、どのバージョンのファイルを保持する必要がありますか?決定する方法がないため、包装システムはこれを全面的に禁止します。

おすすめ記事