Sub-process /usr/bin/dpkg returned an error code を解決する手順

はじめに
Ubuntuでapt upgradeしたところSub-process /usr/bin/dpkg returned an error code (1)というエラーがでました。この記事では、このエラーの解決策をまとめます。
前提と環境
以下の通りとなります。
- OS : Ubuntu18.04
エラーが発生するまでの経緯
はじめに、Sub-process /usr/bin/dpkg returned an error code (1)が出るまでの経緯をメモしておきます。解決策だけ必要な方はとばしてください。
まずapt upgradeをいつも通りに実行したところ、以下のようなエラーが表示されました。
$ sudo apt upgrade
E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.
上記の指示通りにsudo dpkg --configure -aを実行したところ、以下のようなエラーが表示されました。
$ sudo dpkg --configure -a
Setting up btrfs-tools (4.4-1ubuntu1.1) ...
update-initramfs: deferring update (trigger activated)
Setting up mysql-server-5.7 (5.7.27-0ubuntu0.16.04.1) ...
debconf: DbDriver "config": /var/cache/debconf/config.dat is locked by another process: Resource temporarily unavailable
dpkg: error processing package mysql-server-5.7 (--configure):
subprocess installed post-installation script returned error exit status 1
Setting up libcups2:amd64 (2.1.3-4ubuntu0.10) ...
dpkg: dependency problems prevent configuration of mysql-server:
mysql-server depends on mysql-server-5.7; however:
Package mysql-server-5.7 is not configured yet.
dpkg: error processing package mysql-server (--configure):
dependency problems - leaving unconfigured
Setting up libcupsimage2:amd64 (2.1.3-4ubuntu0.10) ...
Processing triggers for libc-bin (2.23-0ubuntu11) ...
Processing triggers for initramfs-tools (0.122ubuntu8.14) ...
Errors were encountered while processing:
mysql-server-5.7
mysql-server
どうやらmysql-server-5.7関連でエラーが出ていることが分かります。
そして適当に改めてapt upgradeを実行してみたところ、問題のSub-process /usr/bin/dpkg returned an error code (1)が出ました。
$ sudo apt upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
golang-go
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
2 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] Y
debconf: DbDriver "config": /var/cache/debconf/config.dat is locked by another process: Resource temporarily unavailable
Setting up mysql-server-5.7 (5.7.27-0ubuntu0.16.04.1) ...
debconf: DbDriver "config": /var/cache/debconf/config.dat is locked by another process: Resource temporarily unavailable
dpkg: error processing package mysql-server-5.7 (--configure):
subprocess installed post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of mysql-server:
mysql-server depends on mysql-server-5.7; however:
Package mysql-server-5.7 is not configured yet.
dpkg: error processing package mysql-server (--configure):
dependency problems - leaving unconfigured
No apport report written because the error message indicates its a followup error from a previous failure.
Errors were encountered while
processing:
mysql-server-5.7
E: Sub-process /usr/bin/dpkg returned an error code (1)
このエラーは、以上の作業を行った場合だけでなく、apt updateの実行時やapt installで新しくパッケージをインストールしようとした場合にも発生することがあります。
原因と解決策
原因は、何かしらの理由でインストール、またはアップデートしようとしたパッケージが壊れてしまったためです。壊れているというのは、例えばパッケージが使用するライブラリの依存関係が干渉してしまったり、整合性が取れなくなったりする場合です。今回の私のケースでは、おそらくアップデート中にインターネット接続が切断されてさらにフリーズしてしまい、パッケージの操作が意図せず中断しまったことで壊れてしまったと考えられます。考えられる解決策としては以下があります。
- 該当パッケージを完全にインストールし直す
- 該当パッケージを再構成する
- 該当パッケージに関する一時ファイルを削除して再インストール、アップデートする
それぞれについて以降で説明します。
該当パッケージを完全にインストールし直す
もしすでに使っているアプリやパッケージではなく、新しくインストールしようとしていたものならば、一度全て削除して再度インストールし直すことで修復できる可能性があります。
例えば、mysql-server-5.7を入れ直す場合ならば、以下のコマンドを実行します。
$ sudo apt remove mysql-server-5.7
$ sudo apt autoremove
$ sudo apt install mysql-server-5.7
該当パッケージを再構成する
以下のコマンドで、壊れたパッケージとその依存関係を解決します。
$ sudo dpkg --configure -a
該当パッケージに関する一時ファイルを削除して再インストール、アップデートする
このパートに記載していた方法は高いリスクがあるとのご指摘を受けましたので削除致しました。ご指摘いただいた方に感謝申し上げます。
まとめ
備忘録のためにまとめました。同様のエラーに遭遇している方の助けに少しでもなれば幸いです。
関連記事
公開日:2020/02/16 更新日:2020/02/16圧縮、暗号化、リモート対応の差分バックアップを作成できる「Borg Backup」の使い方
圧縮、暗号化に対応し差分バックアップを作成できるソフトウェアである「Borg Backup」をUbuntuにインストールして使ってみたのでその手順をまとめます。「Borg Backup」はLinux、macOSに対応しています。
公開日:2020/02/14 更新日:2020/02/14自分専用の後で読むサービスを構築できる「Wallabag」をUbuntu + Nginxで構築する手順
後で読むサービスのPocketにかなり近く、機能豊富なオープンソースのWallabagをUbuntuにインストールしたのでその手順をまとめます。
公開日:2020/02/12 更新日:2020/02/12ファイル単位で暗号化して保存できるCryptomatorをインストールして使う手順
Cryptomatorは、ファイル単位での暗号化が可能なソフトウェアです。この記事では、UbuntuにCryptomatorをインストールする手順と使い方をまとめます。
公開日:2020/01/22 更新日:2020/01/22WireGuardでVPNサーバーを構築してスマホやPCから接続する手順
WireGuardはOpenVPNよりもシンプルで高速、より安全なVPNとして開発が進められており、OpenVPNに代わるVPNとして期待されています。この記事ではWireGuardを使ってVPNサーバーを構築し、そのVPNサーバーにUbuntuやiPhoneから実際に接続してみるまでの手順をまとめます。
公開日:2020/01/17 更新日:2020/01/17ディレクトリ表示や移動をインタラクティブに実行できるコマンドツール「Broot」
Linuxで端末を使っている時にディレクトリ構造をざっくり確認したり各ディレクトリにどのようなファイルが入っているかを確認したりしたい場合があると思います。Brootはディレクトリ構造を表示しつつさらにそこから各ディレクトリに移動したりファイルを検索したりできるコマンドラインツールです。