【エラー解決】dpkgのロックエラーの解決法

# 環境

- Kali Linux 2021

# dpkgのロックエラーが出た

`apt upgrade`を実行後、放置してたらいつの間にか再起動処理があった。
再度`apt upgrade`を実行すると`Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process <PID>`という文言が出力され実行できなかった。

```
$ sudo apt upgrade               
Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 3822
Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 3822
Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 3822
Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 3822
Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 3822
Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 3822
```

# 対処法

[様々な対処法](https://phoenixnap.com/kb/fix-could-not-get-lock-error-ubuntu)があるみたいですが、今回はロックファイルを削除する方法で対処しました。

`/var/lib/dpkg/lock`と`/var/lib/dpkg/lock-frontend`ファイルを削除します。

```
$ sudo rm -rf /var/lib/dpkg/lock /var/lib/dpkg/lock-frontend 
```

# その後

削除後、再度`apt upgrade`コマンドを実行しました。
しかし、まだアップグレード出来ません。

```
$ sudo apt upgrade                                          
E: dpkg は中断されました。問題を修正するには 'sudo dpkg --configure -a' を手動で実行する必要があります。
```

とりあえず、出力の指示通りのコマンドを実行します。

```
$ sudo dpkg --configure -a
```

すると処理は進みましたが、最終的にエラーが出力され完了できませんでした。

```
(省略)
処理中にエラーが発生しました:
 llvm-14
 llvm-14-runtime
```

もう一度`apt upgrade`を実行したところ先ほどのエラーで出力されたパッケージに関係するエラーが出力されました。

```
$ sudo apt upgrade                                                                           1 ⨯
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
これらを直すためには 'apt --fix-broken install' を実行する必要があるかもしれません。
以下のパッケージには満たせない依存関係があります:
 llvm-14 : 依存: llvm-14-runtime (= 1:14.0.6-16) しかし、1:14.0.6-13 はインストールされています
           依存: llvm-14-linker-tools (= 1:14.0.6-16) しかし、1:14.0.6-13 はインストールされています
           推奨: llvm-14-dev しかし、インストールされていません
E: 未解決の依存関係です。'apt --fix-broken install' を実行してみてください (または解法を明示してください)。
```

すると、`apt --fix-broken install`を実行してみろと指示が出たので実行してみます。

```
$ sudo apt --fix-broken install                                                            100 ⨯
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
依存関係を解決しています ... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  avahi-utils coreboot-utils coreboot-utils-doc cryptsetup-run debtags dsniff espeak-ng-data
  fastjar gir1.2-atspi-2.0 gir1.2-handy-1 gir1.2-notify-0.7 gir1.2-polkit-1.0 gir1.2-secret-1
  icu-devtools jarwrapper kali-debtags libadwaita-1-0 libao-common libao4 libatk1.0-data
  libavresample4 libblockdev-crypto2 libblockdev-fs2 libblockdev-loop2 libblockdev-part-err2
  libblockdev-part2 libblockdev-swap2 libblockdev-utils2 libblockdev2 libboost-filesystem1.74.0
  libboost-iostreams1.74.0 libboost-locale1.74.0 libboost-thread1.74.0 libbrlapi0.8 libcbor0
  libconfig++9v5 libdotconf0 libdumbnet1 libespeak-ng1 libev4 libexporter-tiny-perl libffado2
  libflac8 libflashrom1 libfluidsynth2 libfmt7 libgeos3.12.0 libgssdp-1.2-0 libgupnp-1.2-0
  libgupnp-igd-1.0-4 libhandy-1-0 libhiredis1.1.0 libhttp-server-simple-perl libicu-dev
  libigdgmm11 libilmbase25 liblist-moreutils-perl liblist-moreutils-xs-perl liblouis-data
  liblouis20 libmbim-utils libnfs13 libnginx-mod-http-geoip libnginx-mod-http-image-filter
  libnginx-mod-http-xslt-filter libnginx-mod-mail libnginx-mod-stream libnginx-mod-stream-geoip
  libnids1.21 libnma-gtk4-0 libofa0 libopenexr25 libopenfec1 libopts25 liborcus-0.17-0
  liborcus-parser-0.17-0 libotf0 libpcaudio0 libperl5.32 libperl5.36 libpipewire-0.3-modules
  libpoppler102 libproj19 libqmi-utils libqt5qmlworkerscript5 libqt5quickcontrols2-5
  libqt5quicktemplates2-5 librest-0.7-0 libroc0.3 librtlsdr0 libsnapd-glib-2-1 libsonic0
  libspeechd2 libtinyxml2-9 libwebsockets16 libwireplumber-0.4-0 libxcb-damage0 libxcb-xv0
  libxml2-dev libzxing2 lua-lpeg nginx-core openjdk-11-jre openjdk-11-jre-headless
  perl-modules-5.32 perl-modules-5.36 python3-backcall python3-debian python3-ntlm-auth
  python3-pickleshare python3-pylnk python3-requests-ntlm python3-requests-toolbelt
  qml-module-qtgraphicaleffects qml-module-qtqml qml-module-qtqml-models2
  qml-module-qtquick-controls qml-module-qtquick-layouts qml-module-qtquick-window2
  qml-module-qtquick2 ruby2.7 sphinx-rtd-theme-common
これを削除するには 'sudo apt autoremove' を利用してください。
以下の追加パッケージがインストールされます:
  llvm-14-linker-tools llvm-14-runtime
以下のパッケージはアップグレードされます:
  llvm-14-linker-tools llvm-14-runtime
アップグレード: 2 個、新規インストール: 0 個、削除: 0 個、保留: 428 個。
2 個のパッケージが完全にインストールまたは削除されていません。
1,771 kB 中 0 B のアーカイブを取得する必要があります。
この操作後に追加で 49.2 kB のディスク容量が消費されます。
続行しますか? [Y/n] Y
(データベースを読み込んでいます ... 現在 373446 個のファイルとディレクトリがインストールされています。)
.../llvm-14-runtime_1%3a14.0.6-16_amd64.deb を展開する準備をしています ...
llvm-14-runtime (1:14.0.6-16) で (1:14.0.6-13 に) 上書き展開しています ...
.../llvm-14-linker-tools_1%3a14.0.6-16_amd64.deb を展開する準備をしています ...
llvm-14-linker-tools (1:14.0.6-16) で (1:14.0.6-13 に) 上書き展開しています ...
llvm-14-runtime (1:14.0.6-16) を設定しています ...
llvm-14-linker-tools (1:14.0.6-16) を設定しています ...
llvm-14 (1:14.0.6-16) を設定しています ...
libc-bin (2.37-15) のトリガを処理しています ...
systemd (255.4-1) のトリガを処理しています ...
man-db (2.12.0-3) のトリガを処理しています ...
kali-menu (2023.4.7) のトリガを処理しています ...
needrestart is being skipped since dpkg has failed
```

パッケージの修正処理が完了しました。

これでようやく`apt upgrade`を実行することが出来ました。

```
sudo apt upgrade
```

# 参考サイト

https://zenn.dev/t13row/articles/7b32c6202c2539

https://phoenixnap.com/kb/fix-could-not-get-lock-error-ubuntu