amd64システムにqemu-armhf chroot環境があります(主にRaspberry Piコードのコンパイルに使用されます)。したがって、armhfとamd64のバイナリを実行できますが、後者はより高速です。
スピードを上げるために、chrootに特定のパッケージ(makeなど)のamd64バージョンをインストールしました。これは他のarmhfパッケージをapt-getする必要があるまでうまくいき、makeを依存関係としてリストして次のようになりました。
The following packages have unmet dependencies:
build-essential : Depends: make but it is not going to be installed
dpkg-dev : Depends: make but it is not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).
make:armhf
提案されたコマンドを試すと、インストールとアンインストールを求めるメッセージが表示されますmake:amd64
。私はそうしたくありません。 APTを実際にインストールせずにmake:armhf
(依存関係を満たすために)すでにインストールされていることをどのように知ることができますか?make:amd64
試してみましたがインストールapt-mark manual make
されていないと出ますね。
私はこれがおそらく正しいアプローチではないことを知っていますが、パッケージ定義がどのように/var/lib/dpkg/status
機能するのかを理解しようとするファイルを見て、make:とarmhfも満足するmake:amd64に同意するように欺いてみました。
具体的には、libbz2-1.0は、次のように2回インストールされたものとしてリストされているパッケージです。
Architecture: armhf
Multi-Arch: same
Pre-Depends: multiarch-support
そしてかつては次のようになりました。
Architecture: amd64
Multi-Arch: foreign
Pre-Depends: multiarch-support
そこで、「make」の項目を同様にコピーして上記のすべての値を設定してみました。しかし今、APTは「make」と「make:amd64」が衝突すると言います。 makeを実行すると競合が発生しますが、libbz2-1.0を実行すると競合が発生しないのはなぜですか? (これが特別なケースライブラリではないことを願っています。バグのようです。)
すべてこの回答、ダミーパッケージを作成してインストールしようとしましたがequivs
(上記の手動操作を削除した後)、インストールすると次のエラーが発生します。
# dpkg -i /var/cache/apt/archives/make_3.81-8.2_amd64.deb (real amd64 make)
# dpkg -i make_3.81-8.2_armhf.deb (fake armhf depends on the above)
Preparing to replace make 3.81-8.2 (using make_3.81-8.2_armhf.deb) ...
Unpacking replacement make ...
dpkg: dependency problems prevent configuration of make:
make depends on make:amd64 (= 3.81-8.2).
だから問題は、再びmake:armhfが次のようになると思うようです。代替make:amd64の場合、両方のパッケージを共存させる方法がわかりません。 (例えば、2つのlibbz2パッケージが共存するという考えは大丈夫だと思います。)
答え1
私はアーキテクチャシステムをあまり使用していないので、ここで提案するよりも良い方法があるかもしれません。私の提案をテストしておらず、複数のアーキテクチャのいくつかの機能と競合しているかどうかはわかりません。
あなたはそれを使用することができます同等到着仮想パッケージの作成依存関係のみ。
- 制御ファイルの生成
equivs-control make.control
- 制御ファイルの編集:設定
Package: make
、および。 amd64 makeのバージョンと一致するように設定することもできます。Architecture: armhf
Depends: make:amd64
Multi-Arch: foreign
Version
- 仮想パッケージを作成します。
equivs-build make.control
- chrootへの仮想パッケージのインストール
これがdpkgを満たさない場合は、可能ですが、あまり便利ではないもう1つのアプローチは、chroot内にamd64 makeをインストールせずに代わりにchroot内でホストルートを使用できるようにすることです(バインドマウントの使用、参照)。chroot刑務所内で/binと/libを提供するはい)または少なくともmake
バイナリとその依存関係(make
libcのみ)。 PATHにバイナリがインストールされているディレクトリを追加します。上記のようにダミーパッケージを作成しますが、インストールされていると宣言したりヘッダーを入れたりしないでmake
ください。Depends
Multi-Arch
答え2
このメッセージの意味は、「同じ名前を持つ2つの異なるアーキテクチャパッケージがインストールされている場合は、まったく同じバージョンである必要があります」ということです。
これは、どちらも/usr/share/doc/.../changelog.Debian
異なるファイルを提供し、両方とも同じファイルをインストールする場合、ここでファイルの競合が許可されるためです。
しかし、make
両方のパッケージが異なる/usr/bin/make
。
私はdpkgを許可を使用して状態に基づいてパッケージを設定できると思います。--auto-deconfigure
これにより、そのパッケージが再度実行され、サポートのためにアンインストールが許可されます。make
unpacked
installed
postinst
make:amd64
make:armhf