apt - 外部アーキテクチャに noarch パッケージの依存関係をインストールします。

apt - 外部アーキテクチャに noarch パッケージの依存関係をインストールします。

Debian-11-amd64を実行している低コストのデバイスでは、一部のRAM(と呼ばれるdpkg --add-architecture i386)を節約するために32ビット版のChromeブラウザをインストールすることをお勧めします。

apt install chromium:i386

うまくいきます。さて、アーチに依存しない言語パックもインストールしたいと思います。

$ apt install chromium-l10n
The following additional packages will be installed:
  chromium chromium-common chromium-sandbox
Suggested packages:
  chromium-shell chromium-driver
The following packages will be REMOVED:
  chromium:i386 chromium-common:i386 chromium-driver:i386 chromium-sandbox:i386
The following NEW packages will be installed:
  chromium chromium-common chromium-l10n chromium-sandbox
0 upgraded, 4 newly installed, 4 to remove and 5 not upgraded.

したがって、aptは64ビットパッケージのバージョンをインストールし、32ビットバージョンを削除しようとします。あまり良くない。

頑張った

$ apt install chromium-l10n:i386
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Package chromium-l10n:i386 is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'chromium-l10n:i386' has no installation candidate

いくつかの固定変形/etc/apt/preferences.d/mychrome-i386

Package: chromium-l10n
Pin: release o=security.debian.org_debian-security_dists_bullseye-security_non-free_binary-i386_Packages
Pin-Priority: 900

これらのどれも機能しません。 (合理的な努力で)これはどのように達成できますか?

ありがとう
、太鼓

ベストアンサー1

OPよりも一般的なアプローチを使用して、バージョンを再インストールしないようにするなど、Pin優先順位のあるバリアントの再インストールを防ぐことができますamd64/etc/apt/preferences.d/local-chromium.prefamd64

Package: chromium:amd64
Pin: origin *
Pin-Priority: -1

amd64バリアントがインストールされるのを防ぎ、バリアントのみをオプションとして残すことi386を除いて、インストール可能なコンテンツの優先順位は変更されません。

以下の変更では発生しないため、これはオプションです。新しいバージョンが見つかった場合、標準アップグレードは使用されませんapt upgrade(ただし使用することができますapt full-upgrade)。とにかく、後で実際にDebian nからDebian n + 1にアップグレードすると、これらの設定はどんな方法でもクラッシュします。競合するパッケージを削除し、Debian バージョンの変更後に再インストールすることをお勧めします。


Multi-Arch: foreign

重要な要素は、依存関係システムが他の(外部)アーキテクチャのパッケージを基本パッケージとして扱うことです。明らかに、実際のパッケージの動作またはAPIが許可する場合にのみこれを行う必要があります。

Debian ウィキペディアマルチアーキテクチャHOWTOの説明:

  • パッケージが「Multi-Arch:foreign」と表示されている場合は、さまざまなアーキテクチャのパッケージの依存関係を満たすことができます(たとえば、「debhelper:amd64」は、すべてのアーキテクチャのdebhelperのパッケージの依存関係を満たします)。

Ubuntuの追加参考資料マルチアーキテクチャ仕様(以前のリンクから引用したDebian):

Multi-Arch: foreign

  • パッケージはいいえとともに設置可能しなければならない他のアーキテクチャに対するパッケージの依存関係を満たすことはできますが、独自のアーキテクチャは許可しません。

[...]

私は同じ理由でOPがしたことをFirefoxにしました。つまり、低仕様システムでメモリを節約することでした。変更は、依存パッケージではなく「デフォルト」バイナリパッケージで行う必要があります。また、パッケージが変更されると、依存関係アルゴリズムは同じバージョンを維持するときにインストールされたソースよりもストレージソースを優先しますが、依存関係のためにそうしません。常にパッケージが予約されていると記録され、パッケージが予約されている場合は新しいバージョンを使用できますが、インストールできないか、同じバージョンが可能です。この問題は、パッケージのバージョンを少し上げると解決される可能性があります。

chromiumこのアプローチは一部のパッケージ(、firefox-esrおよび含むthunderbird)ではうまく機能しますが、他のパッケージでは失敗する可能性があります。特に、それ自体が同じタイプの問題がある場合、またはMultiarchのライブラリに正しく適用されていない非ライブラリパッケージに依存している場合(おそらくバグの可能性があります):1)、ランタイムライブラリが一緒にインストールされることを期待する必要がMulti-Arch: sameあります。

目標は次のとおりです。

  • Multi-Arch: foreignそのパッケージに依存する他のパッケージがデフォルトパッケージとして処理され、別のスキーマをインポートしようとする試みがもはや行われないようにパッケージを設定します。

  • オプション:バージョン番号を増やします。

    これは、新しい実際のバージョンがいつリリースされるのかを知るのに役立ちます。これをやり直す必要があります。

  • 前のステップが完了した場合、このステップは必須です。パッケージが独自に提供されるように設定し、以前の(実際の)バージョンにバージョンを指定します。

    ...非アーキテクチャバージョンによって依存関係の問題が繰り返されるのを防ぎます。

これらの変更を行う簡単なツールはありません。/var/lib/dpkg/statusインストールされているすべてのパッケージのデータベースであるこのファイルを個人的に直接編集しました。誤って、システム全体のインストールが損なわれる可能性があります。より長いがより安全な方法は次のとおりです。バイナリパッケージをダウンロードして解凍し、必要に応じて編集し、代替バイナリパッケージに再パッケージしてインストールします。

すべての作業はユーザーとして実行する必要があります。(しかしfakeroot人々が使用方法を理解する限り、部品を再梱包するために使用できます(一度)。

mkdir /tmp/repack
cd /tmp/repack
apt-get download chromium:i386
dpkg-deb --raw-extract chromium_*_i386.deb chromium

ファイルの編集chromium/DEBIAN/control:

  • 項目を追加します(例:Architecture: i386以下の項目)。Multi-Arch:

    Multi-Arch: foreign
    
  • Version:アイテムの修正

    バージョンにを追加してバージョンを変更します.0。たとえば、今日のDebian 12では、次のようになります。

    Version: 119.0.6045.123-1~deb12u1.0
    
  • アイテムを編集しますProvides:(該当するアイテムがないパッケージの場合は追加)。

    最後にACTUALBERSIONを追加すると、追加されていない, chromium (= ACTUALVERSION)実際のバージョンに置き換えられます.0。たとえば、今日のDebian 12では、次の行が表示されます。

    Provides: gnome-www-browser, www-browser, chromium (= 119.0.6045.123-1~deb12u1)
    

変更されたパッケージを新しい.debファイルに再パッケージします。

dpkg-deb --build chromium/ chromium.deb

そして、他のパッケージ(将来のアップグレード時に自動的にインポートする必要があります)と一緒に(実際の)ユーザーrootとして再インストールします。

apt-get install ./chromium.deb chromium-l10n

バージョンがアップグレードされていない場合は--reinstall必要になる場合があります。

Debian が新しいバージョンをリリースするたびに、この操作をやり直す必要があります。これは、将来のapt upgradeコマンドでアップグレードではなくメンテナンスを指示するときに検出するchromium:i386必要があります。


実際のテストはDebian 12で書かれています。

おすすめ記事