システムを更新しようとすると、「トランザクションの準備に失敗しました (依存関係を満たすことができませんでした)」というエラーが発生します。
私が得たものは次のとおりです:
~> sudo pacman -Syu
:: Synchronising package databases...
gremlins is up to date
system is up to date
world is up to date
galaxy-gremlins is up to date
galaxy is up to date
lib32 is up to date
extra is up to date
community is up to date
multilib is up to date
:: Starting full system upgrade...
:: Replace libcanberra-pulse with gremlins/libcanberra? [Y/n] n
resolving dependencies...
looking for conflicting packages...
error: failed to prepare transaction (could not satisfy dependencies)
:: installing expat (2.4.1-1) breaks dependency 'expat=2.3.0' required by lib32-expat
:: installing libcap (2.50-1) breaks dependency 'libcap=2.49' required by lib32-libcap
:: installing libelf (0.185-1) breaks dependency 'libelf=0.184' required by lib32-libelf
:: installing libcanberra (0.30+2+gc0620e4-4) breaks dependency 'libcanberra=0.30+2+gc0620e4-3' required by libcanberra-pulse
その後、パッケージを削除しようとするexpat
と、「注意: 削除リストに禁止されているパッケージがあります!」というメッセージが表示されます。
私はこれを見てウェブページただし、ここでは問題のあるパッケージをアンインストールできますが、expat
コアの一部であるためアンインストールできません。
この時点で何をすべきでしょうか?
答え1
リポジトリ内のパッケージはlib32
、さまざまなライブラリなどの 32 ビット バージョンであり、同じバージョンの 64 ビット バージョンに依存します。
gremlins
やなどの不安定なテスト リポジトリがありgalaxy-gremlins
、 などのパッケージの新しいバージョンが提供されていますexpat
。ただし、 リポジトリがないlib32-gremlins
ため、それらのパッケージの 32 ビット版には同じ更新が適用されません。つまり、古い (安定した) パッケージがそのまま残ります。また、 などの安定した 32 ビット パッケージは、lib32-expat
安定したリポジトリの 64 ビット版パッケージに依存しているため、システムを古いままにしておく (古い 32 ビット パッケージの依存関係を満たすため) か、新しい 64 ビット パッケージをインストールする (これにより、32 ビット パッケージの依存関係が壊れるため、そのようなパッケージをアンインストールすることによってのみ実行可能) かという競合が発生します。
あるいは、lib32-gremlins
リポジトリを有効にして、64 ビット テスト リポジトリ内のパッケージの 32 ビット バージョンを提供するか、すべてのテスト リポジトリを無効にすることができます。これらの 2 つのアクションのいずれかを実行すると、64 ビット リポジトリと 32 ビット リポジトリが同期され、利用可能な最新のパッケージで依存関係を解決できるようになります。