何が起きたのか?dpkg was interrupted エラーが表示される場合、通常は Linux システムのタスクが途中で中断されたことを意味します。これは、500MBのアップデート中にノートPCのバッテリーが切れたり、新しいカーネルのインストール中に誤ってターミナルを閉じたりした場合によく発生します。プロセスが突然停止したため、システムファイルの破損を防ぐためにパッケージマネージャーが自身を「ロック」している状態です。
すべての apt コマンドが以下の特定のテキストブロックを返すようになったら、この問題に陥っていると判断できます。
E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.
ステップ1:標準の修正方法エラーメッセージには、実は対処法が明記されています。--configure -a フラグは、展開されたもののセットアップが完了していないパッケージを探すよう dpkg に指示します。その後、保留されている設定の完了を試みます。
ターミナルを開き、次のコマンドを実行してください。
sudo dpkg --configure -a
軽微な中断であれば、30秒ほどで完了します。コマンドは設定中のパッケージをリスト表示します。エラーメッセージが出ずに終了すれば、システムは正常に戻っているはずです。失敗した場合は、次のステップに進んでください。
ステップ2:解消されないロックファイルの削除上記のコマンドが Could not get lock /var/lib/dpkg/lock-frontend という新しいエラーで失敗することがあります。これは通常、自動ソフトウェアアップデーターなどのバックグラウンドプロセスが、すでにシステムの修復を試みていることを意味します。あるいは、クラッシュ後に「古い」ロックファイルが残されたままになっている可能性もあります。
まず、現在アクティブな apt プロセスがあるか確認します。
ps aux | grep -i apt
unattended-upgrades プロセスが動いている場合は、1〜2分待ってください。プロセスが実行されていないのにロックエラーが出る場合は、手動でロックファイルを削除して処理を進める必要があります。以下のコマンドを一つずつ実行してください。
sudo rm /var/lib/dpkg/lock-frontend
sudo rm /var/lib/dpkg/lock
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
これらのファイルを削除したら、再度設定コマンドを試します。
sudo dpkg --configure -a
ステップ3:破損した依存関係の修復パッケージの設定後も、ソフトウェアが必要とするライブラリのダウンロードが完了していないなど、「破損した」リンクがシステムに残っている場合があります。Advanced Package Tool(APT)を使用して、これらの不足している要素をスキャンし、修復することができます。
fix-brokenコマンドを実行します。
sudo apt install -f
このコマンドは非常に強力です。不完全にインストールされたパッケージを特定し、完了させるか削除することで、安定性を回復させます。作業を完了するために、数メガバイトの追加データのダウンロードを求められる場合があります。
ステップ4:システムの更新データベースを修復した後、ローカルのパッケージリストをリモートサーバーと同期させます。これにより、システムが利用可能なバージョンを正確に把握し、残っている不整合を解消できます。
sudo apt update
sudo apt upgrade
高度な修正:キャッシュのクリーンアップそれでもエラーが発生する場合は、ダウンロードされた .deb ファイルが破損している可能性があります。ローカルキャッシュを消去して、システムにソフトウェアの新しいコピーを強制的にダウンロードさせることができます。
sudo apt clean
sudo apt autoclean
これにより /var/cache/apt/archives/ フォルダが空になります。アプリがアンインストールされることはありません。一時的なセットアップファイルが削除されるだけです。
確認:修正されましたか?簡単なアップデートを実行して、作業内容を再確認します。以下のコマンドが「dpkg」や「locks」に言及せずに終了すれば、システムの復旧は成功です。
sudo apt update
「All packages are up to date.(すべてのパッケージが最新です)」のようなメッセージで終わる、クリーンな出力が表示されるはずです。
今後のトラブルを防ぐにはパッケージマネージャーを健全な状態に保つために、以下のよくある落とし穴を避けてください。
- プロンプトを確認する: コマンドプロンプト(例:
user@linux:~$)が再表示されるまで、ターミナルウィンドウを絶対に閉じないでください。- 電源を接続する: 大規模なdist-upgradeを実行する前には、必ずノートPCを充電器に接続してください。- 辛抱強く待つ: パッケージが99%で止まっているように見えても、少なくとも5分は待ってください。ハードウェアのトリガーを実行するのに時間がかかるスクリプトもあります。どうしてもプロセスを停止する必要がある場合は、ウィンドウを強制終了するのではなく、Ctrl+Cを使用してください。

