Linux
 Computer >> コンピューター >  >> トラブルシューティング >> Linux

【Ubuntu】「未解決の依存関係」エラーを解決する6つの方法|ステップバイステップガイド

Ubuntuユーザーを長年悩ませてきたのが、「The following packages have unmet dependencies(以下のパッケージには未解決の依存関係があります)」というエラーです。近年では、さまざまなバージョンのUbuntuでこのエラーを目にする機会がさらに増えています。APTパッケージ管理システムは非常に使いやすい反面、サードパーティ製の依存関係が混在するような状況では、apt-getからこのエラーが出力されることがあります。

この問題は、ターミナルからAPT経由でパッケージをインストールしようとした際に、明確な原因も示されないままインストールが失敗する形で現れます。特定のプログラムだけに限らず、多数のパッケージで発生し得るのも特徴です。これは、原因がインストール対象のプログラム側ではなく、APTシステム自体にあるためです。

幸い、このエラーには複数の解決策があり、簡単なものからやや高度なものまで揃っています。以下の手順に従えば、短時間でエラーを解消できるでしょう。

作業前の準備:バックアップを取っておく

注意:作業を始める前に、設定ファイルなどのバックアップを取っておくことをおすすめします。万一問題が発生しても元の状態に戻せるようにするためです。以下の手順でバックアップできます。

  1. キーボードで Alt + Ctrl + T を同時に押してターミナルを開きます。
  2. 次のコマンドを入力して Enter を押します。
    sudo cp /var/lib/dpkg/status /var/lib/dpkg/status.original

方法1:「-f」オプションを使用する

最も手軽な方法です。コマンドに数文字追加するだけで試せます。通常どおり sudo apt-get install パッケージ名 と入力する代わりに、sudo apt-get install -f を実行してください。-f(fix-broken)オプションは、壊れた依存関係を持つシステムを自動的に修復しようとします。修復後は、目的のパッケージをインストールできるようになります。

  1. Ctrl + Alt + T を同時に押してターミナルを開きます。
  2. sudo apt-get install -f と入力して Enter を押します。
  3. 完了したら sudo dpkg --configure -a を実行し、その後もう一度手順2のコマンドを実行します。

方法2:Aptitudeを使う

Aptitudeapt-get の代替となる高機能なパッケージマネージャーです。依存関係の解決アルゴリズムが異なるため、apt-getで失敗していたパッケージもAptitudeならインストールできる場合があります。まずはAptitude自体をインストールしましょう。

  1. Ctrl + Alt + T を同時に押してターミナルを開きます。
  2. sudo apt-get install aptitude と入力して Enter を押します。
  3. sudo aptitude install パッケージ名(パッケージ名はインストールしたいもの)と入力して Enter を押します。apt-getの代わりにAptitude経由でインストールが試みられ、依存関係の競合をより柔軟に解決できる可能性があります。

方法3:リポジトリの有効化とミラーサーバーの変更

restricted や universe など一部のリポジトリが無効になっていると、依存関係の解決に必要なパッケージが見つからず、エラーの原因になります。また、接続先サーバーの不調も同様のトラブルを引き起こすため、最適なサーバーを選び直しましょう。

  1. Alt + F2 を同時に押し、software-properties-gtk と入力して Enter を押します(「ソフトウェアとアップデート」の設定画面が開きます)。
  2. 「Ubuntuのソフトウェア」タブで、すべてのリポジトリ(main、universe、restricted、multiverse)が有効になっていることを確認します。
  3. 「ダウンロード元」のリストをクリックし、サーバー選択画面を開きます。
  4. 「最適なサーバーを選択」ボタンをクリックします。
  5. Ctrl + Alt + T でターミナルを開き、sudo apt-get update を実行します。完了したら、再度ソフトウェアのインストールを試みてください。

方法4:パッケージデータベースをクリーンアップする

パッケージデータベースの破損も、未解決の依存関係やインストール不良の一因となります。以下の2つのコマンドでキャッシュを掃除すれば、改善が期待できます。まず Ctrl + Alt + T でターミナルを開き、各コマンド入力後に必ず Enter を押してください。

  • sudo apt-get clean:取得済みのパッケージファイル(.deb)をローカルリポジトリからすべて削除します。/var/cache/apt/archives および /var/cache/apt/archives/partial/ 内のロックファイル以外が消去されます。
  • sudo apt-get autoclean:こちらも取得済みファイルを削除しますが、再ダウンロードが不可能で実質不要となった古いパッケージのみを対象にします。

方法5:保留中のパッケージを取り除く

パッケージが「保留(held)」状態になっているのは、APTが解決できない依存関係の問題や競合が存在するためです。こうしたパッケージを取り除けば競合がなくなり、問題が解決することがあります。

  1. Ctrl + Alt + T を押してターミナルを開きます。
  2. sudo apt-get -u dist-upgrade と入力して Enter を押します。保留中のパッケージがあれば一覧表示されるので、それらを取り除いていきます。
  3. まずは次のコマンドを試してみましょう。
    sudo apt-get -o Debug::pkgProblemResolver=yes dist-upgrade
    これで問題が解決するか確認します。出力の末尾が「X not upgraded(X個が保留)」という形式で終わる場合(Xは保留パッケージの数)、それらを1つずつ削除する必要があります。
  4. 保留パッケージを削除するには sudo apt-get remove --dry-run パッケージ名 を使用します。--dry-run は実際には変更を加えず、実行結果を事前確認できる安全なオプションです。内容を確認したうえで、--dry-run を外して実際に削除を実行しましょう。すべて削除できたら、最初に問題を起こしていたパッケージのインストールを再試行してください。

方法6:PPAを無効化・削除・パージする

Personal Package Archive(PPA)は Launchpad 上でホストされているリポジトリで、公式リポジトリに存在しないパッケージのインストールやアップグレードに利用されます。しかし、特に既存パッケージのアップグレード目的で使った場合、未解決の依存関係エラーの最大の原因となりがちです。PPAへの対処は「無効化」「パージ」「削除」の3通りあります。

PPAを無効化する

無効化すると、そのPPAからインストール済みのパッケージは更新を受け取らなくなります。

  1. Alt + F2 を押し、software-properties-gtk を実行します。
  2. 「他のソフトウェア」タブを開くと、PPAごとに2行(ソース用とコンパイル済みパッケージ用)が表示されます。無効化するには、両方のチェックを外します

PPAをパージする

パージすると、選択したPPAのパッケージがすべて公式リポジトリのバージョンへダウングレードされ、PPA自体も無効化されます。通常は sudo apt-get install ppa-purge でインストールできますが、APTが壊れている状態では、ターミナル(Ctrl + Alt + T)で以下のコマンドを実行してください:

mkdir ppa-purge && cd ppa-purge && wget https://old-releases.ubuntu.com/ubuntu/pool/universe/p/ppa-purge/ppa-purge_0.2.8+bzr56_all.deb && wget https://ftp.u-picardie.fr/mirror/ubuntu/ubuntu/pool/main/a/aptitude/aptitude_0.8.10-6ubuntu1_i386.deb && sudo dpkg -i ./*.deb

その後、sudo ppa-purge ppa:someppa/ppa を実行すれば、指定したPPAをパージできます。ただし、ppa-purgeはPPAの登録情報までは削除しないため、PPAを完全に取り除きたい場合は以下のコマンドを使用します(インストール済みパッケージを残したい場合は最初のコマンドをスキップしてください)。

  1. sudo apt-get autoremove --purge パッケージ名
  2. sudo add-apt-repository --remove ppa:someppa/ppa
  3. sudo apt-get autoclean

これらの作業後には、目的のパッケージをインストールできるようになっているはずです。

まとめ:トラブルを未然に防ぐために

以上のように複数の解決策を紹介しましたが、そもそもトラブルを予防することの方が重要です。システムを常に最新の状態に保ち、信頼できるPPAのみを使用し、正常に動作しているうちにバックアップを取っておきましょう。万が一予防を怠っていた場合でも、本記事の方法でエラーを解消し、今後は予防策を徹底することをおすすめします。


著者について

Kevin Arrows(ケビン・アローズ)

Kevin Arrowsは、10年以上の業界経験を持つテクノロジースペシャリストです。Microsoft Certified Technology Specialist(MCTS)の資格を保有し、最新の技術動向を追い続けることに深い情熱を注いでいます。ソフトウェア開発、サイバーセキュリティ、クラウドコンピューティングなど幅広い技術分野について執筆しており、その専門性と知識は高く評価されています。複雑な技術的概念を明快かつ簡潔に説明する能力で、同業者からも広く認知され、信頼を集めています。

  1. Ubuntuサーバーのアップグレード後にNginxで404エラーが発生する場合の解決方法

    現在、最も広く利用されているWebサーバー構成の一つが、Ubuntu Server上でNginxを稼働させる組み合わせです。このシステムは非常に効率的で、両方のパッケージが継続的にアップデート提供されているため、保守も容易です。システム管理者は通常、aptパッケージマネージャー経由でアップデートを行います。Ubuntu Serverにはデフォルトでグラフィカルインターフェースが搭載されていないためです。ただし、Ubuntu Serverのアップグレードでは予期しないエラーが発生することがあり、GUIがない環境では初心者にとってトラブルシューティングが難しくなる場合があります。幸い、いくつかの簡

  2. 【保存版】シンボリックリンクを削除する2つの方法|rm・unlinkコマンドの使い方を徹底解説

    シンボリックリンク(ソフトリンク、symlinkとも呼ばれます)とは、別のファイルへの参照情報だけを持つ特殊なファイルのことです。これにより、元のファイルのフルパスを毎回入力しなくても、あたかもその場所に実体があるかのようにアクセスできます。通常のファイルにもディレクトリにもリンクを張ることができ、多くのOSやパッケージがこの仕組みを活用しています。たとえば、LinuxやFreeBSDでWineを使用している方なら、dosdevices というディレクトリを目にしたことがあるかもしれません。ここには、Windowsアプリを動作させるために作られた仮想MS-DOSドライブへのシンボリックリンクが