10.04から12.04にアップグレードした後、別のパッケージをインストールしようとしています。たとえば、ia32-libsおよびskype(4.0)。
これらをインストールしようとすると、「問題を修正できません。壊れたパッケージを保持しています」というエラーメッセージが表示されます。
コマンドの出力:
Sudo apt-get install -f
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
これを実行した後:
Sudo dpkg --configure -a
foo@foo:~$ Sudo apt-get install -f
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
この特定のエラーメッセージは、パッケージを保持していることを示している場合がありますが、別の問題を示している場合もあります。
実際の保留パッケージのリストを取得するには:
dpkg --get-selections | grep hold
存在しない、または関連する外観がない場合、それはおそらく他の何かです。エラーメッセージの他に、そのコマンドからの完全な出力に他の手がかりがある可能性があるため、エラーメッセージを取得したときに試行していたコマンドの出力を慎重に確認してください。
トラブルシューティングの別の方法は、apt-getではなくaptitudeを使用してパッケージをインストールすることです。
Sudo aptitude install <packagename>
Aptitudeは簡単にgiveめなくなり、他のパッケージの変更を伴う可能性のある解決策を見つけようとします。問題の詳細とそれを修正するためのオプションが提供される場合があります。
時々aptitudeは、あなたの要求を満たすために多数のパッケージを削除またはダウングレードすることを切望します。その場合、-f
で再試行すると、優先順位が変更され、要求したすべての変更が先に進むことはできません。
Sudo aptitude -f install <packagename>
それは私にも起こりました。私がしたことはSudo apt-get update
だけで、これで問題が解決しました。幸運を。
依存関係の欠落に関する同様のシナリオに遭遇しました。私の場合、ubuntu saucy salamander 13.10にcurlをインストールしようとしました...
エラーは、依存関係がcurl3ライブラリの以前のバージョンを必要とすることを述べました。
Aptitudeを使用してcurlをインストールしようとすることで、以前のバージョンに低下させることができました。
不足している依存関係と理由(以前のバージョンのライブラリファイルが必要)に気付いたとき、応答方法にいくつかのオプションがありました... y//n/q
Y インストールを中止します N 別のオプションを探します Q 単に終了し、それ以上何もせず、壊れたパッケージを残します。
私が選んだ N、ライブラリファイルを以前のバージョンにダウングレードするオプションを提供しました。それが私がやったことであり、curlはエラーなしでインストールを完了しました。
14.04の新規インストールでも、dpkg --get-selections | grep hold
にファイルがリストされておらず、Sudo apt-get update
の後に喜びがありませんでした。
did修正するのは簡単だった
Sudo apt-get autoremove
失敗したパッケージを再インストールしようとすると、うまくいきました。わーい!
同じ問題があった場合、他の回答(dpkg --get-selections | grep hold
)からそのパッケージチェックコマンドを実行し、
Tomcat7 deinstall
Tomcat7-common install
だから私は「apt-get remove Tomcat7-common
」を使用しました
その後、Tomcat 6をインストールできました(Tomcat 7を削除し、Tomcat 6をインストールしていました)。
これらは、you have held broken packages
エラーを修正するための高速で簡単な方法です。
/etc/apt/sources.list
のsources.listファイルを開き、現在使用しているUbuntuリリースとは異なるUbuntuリリース用のソフトウェアソースがないことを確認します。 sources.listで誤ったリリース行を見つけた場合は、sudoedit /etc/apt/sources.list
でsources.listファイルを開き、sources.listで#
文字を前に付けてコメントアウトし、ソースを保存します。ファイルをリストし、Sudo apt update
を実行して、使用可能なソフトウェアパッケージのリストを更新します。
SynapticパッケージマネージャーでFix Broken Packagesオプションを選択します。次のコマンドを実行してSynapticをインストールします。
Sudo apt update
Sudo apt upgrade
Sudo apt install synaptic
Synapticを開き、SynapticでEdit->壊れたパッケージを修正そしてEdit->壊れたパッケージの修正をもう一度繰り返します。
左ペインのSynapticで、下のスクリーンショットのマウスカーソルでマークされているCustom Filtersボタンをクリックします。左上隅のリストから、Brokenを選択します。中央のペインには、修復が必要な破損したパッケージがリストされます。
壊れたパッケージを1つずつ選択します。壊れたパッケージを選択し、ターミナルを開いてapt policy <package-name>
を実行します。このコマンドの結果は、壊れたパッケージがデフォルトのUbuntuリポジトリからインストールされたのか、他のソースからインストールされたのかを示します。壊れたパッケージが他のソースからインストールされた場合、そのパッケージはそのソフトウェアソースとともに削除され、デフォルトのUbuntuリポジトリから同じパッケージの異なるバージョンに置き換えられる可能性があります。通常、これは破損したパッケージを古いバージョンにダウングレードすることで修正することを意味します。
このエラーメッセージが表示される場合:
Try 'apt-get -f install' with no packages (or specify a solution)
次のコマンドを実行します。
Sudo apt update
Sudo apt upgrade
Sudo apt-get -f install
破損したパッケージを手動で削除します。
/var/lib/dpkg/info
でパッケージを見つけます
ls -l /var/lib/dpkg/info | grep <package>
パッケージフォルダーを別の場所に移動します。
cd /tmp && Sudo mkdir new-package-location
Sudo mv /var/lib/dpkg/info/<package>.* /tmp/new-package-location/
次のコマンドを実行します。
Sudo dpkg --remove --force-remove-reinstreq <package>
これらのすべての方法が機能しない場合、壊れたパッケージはオペレーティングシステムに深く埋め込まれているためにこれらの方法のいずれも効果を持たないことが原因である可能性があります。この深く埋め込まれた「何か」を探す最初の明白な場所は、/etc/apt/sources.list
のソフトウェアソースです。 sources.listファイルを調べて、壊れたパッケージエラーの原因となっている可能性のある非標準の行が含まれているかどうかを確認します。標準のUbuntuのsources.listファイルは、 この回答 のsources.listファイルのように見えます。
Sources.listから疑わしい行を削除する正しい方法は、#
文字を前に付けてコメントアウトすることです。次に、Sudo apt update
を実行して、使用可能なソフトウェアのリストを更新します。
私にとっては、システムが更新されなかったため、上記のいずれも機能しませんでした。やった
Home Key > Software Updater > Install
システムを更新しました。その後、apt
を使用して通常どおりパッケージをインストールできました。