web-dev-qa-db-ja.com

問題を修正できません。壊れたパッケージを保持しています

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.
210
trond

この特定のエラーメッセージは、パッケージを保持していることを示している場合がありますが、別の問題を示している場合もあります。

実際の保留パッケージのリストを取得するには:

dpkg --get-selections | grep hold

存在しない、または関連する外観がない場合、それはおそらく他の何かです。エラーメッセージの他に、そのコマンドからの完全な出力に他の手がかりがある可能性があるため、エラーメッセージを取得したときに試行していたコマンドの出力を慎重に確認してください。

トラブルシューティングの別の方法は、apt-getではなくaptitudeを使用してパッケージをインストールすることです。

Sudo aptitude install <packagename>

Aptitudeは簡単にgiveめなくなり、他のパッケージの変更を伴う可能性のある解決策を見つけようとします。問題の詳細とそれを修正するためのオプションが提供される場合があります。

時々aptitudeは、あなたの要求を満たすために多数のパッケージを削除またはダウングレードすることを切望します。その場合、-fで再試行すると、優先順位が変更され、要求したすべての変更が先に進むことはできません。

Sudo aptitude -f install <packagename>
230
thomasrutter

それは私にも起こりました。私がしたことはSudo apt-get updateだけで、これで問題が解決しました。幸運を。

31
user2292711

依存関係の欠落に関する同様のシナリオに遭遇しました。私の場合、ubuntu saucy salamander 13.10にcurlをインストールしようとしました...

エラーは、依存関係がcurl3ライブラリの以前のバージョンを必要とすることを述べました。

Aptitudeを使用してcurlをインストールしようとすることで、以前のバージョンに低下させることができました。

不足している依存関係と理由(以前のバージョンのライブラリファイルが必要)に気付いたとき、応答方法にいくつかのオプションがありました... y//n/q

Y インストールを中止します N 別のオプションを探します Q 単に終了し、それ以上何もせず、壊れたパッケージを残します。

私が選んだ N、ライブラリファイルを以前のバージョンにダウングレードするオプションを提供しました。それが私がやったことであり、curlはエラーなしでインストールを完了しました。

  • インストール後にライブラリファイルを再度アップグレードすることを検討することもできますが、これまでのところこれで問題ありません。
9
Peopleunit

14.04の新規インストールでも、dpkg --get-selections | grep holdにファイルがリストされておらず、Sudo apt-get updateの後に喜びがありませんでした。

did修正するのは簡単だった

Sudo apt-get autoremove

失敗したパッケージを再インストールしようとすると、うまくいきました。わーい!

8
yochannah

同じ問題があった場合、他の回答(dpkg --get-selections | grep hold)からそのパッケージチェックコマンドを実行し、

Tomcat7                                         deinstall
Tomcat7-common                                  install

だから私は「apt-get remove Tomcat7-common」を使用しました

その後、Tomcat 6をインストールできました(Tomcat 7を削除し、Tomcat 6をインストールしていました)。

4
Nollaig

これらは、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を選択します。中央のペインには、修復が必要な破損したパッケージがリストされます。

    show broken packages in Synaptic

    壊れたパッケージを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   
    
  • 破損したパッケージを手動で削除します。

    1. /var/lib/dpkg/infoでパッケージを見つけます

      ls -l /var/lib/dpkg/info | grep <package>
      
    2. パッケージフォルダーを別の場所に移動します。

      cd /tmp && Sudo mkdir new-package-location  
      Sudo mv /var/lib/dpkg/info/<package>.* /tmp/new-package-location/    
      
    3. 次のコマンドを実行します。

      Sudo dpkg --remove --force-remove-reinstreq <package>  
      

これらのすべての方法が機能しない場合、壊れたパッケージはオペレーティングシステムに深く埋め込まれているためにこれらの方法のいずれも効果を持たないことが原因である可能性があります。この深く埋め込まれた「何か」を探す最初の明白な場所は、/etc/apt/sources.listのソフトウェアソースです。 sources.listファイルを調べて、壊れたパッケージエラーの原因となっている可能性のある非標準の行が含まれているかどうかを確認します。標準のUbuntuのsources.listファイルは、 この回答 のsources.listファイルのように見えます。

Sources.listから疑わしい行を削除する正しい方法は、#文字を前に付けてコメントアウトすることです。次に、Sudo apt updateを実行して、使用可能なソフトウェアのリストを更新します。

3
karel

私にとっては、システムが更新されなかったため、上記のいずれも機能しませんでした。やった

Home Key > Software Updater > Install

システムを更新しました。その後、aptを使用して通常どおりパッケージをインストールできました。

0
nathangeorge1