1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「E: Sub-process /usr/bin/dpkg returned an error code (1)」が発生したので解決してみた

Posted at

はじめに

久しぶりにWSL上のUbuntuをアップデートしようとした際、エラーが発生しました。今回はそのエラーの解決手順について解説します。

まず、以下のコマンドでシステムのアップデートを実行しました。

実行したコマンド
sudo apt update
sudo apt upgrade

しかし、アップグレード中に以下のエラーが発生しました。

出力されたエラー
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
Get more security updates through Ubuntu Pro with 'esm-apps' enabled:
  libheif1 libde265-0
Learn more about Ubuntu Pro at https://ubuntu.com/pro
The following packages have been kept back:
  libnetplan0 netplan.io
The following packages will be upgraded:
  nodejs
1 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
Need to get 0 B/25.4 MB of archives.
After this operation, 120 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
(Reading database ... 36019 files and directories currently installed.)
Preparing to unpack .../nodejs_14.21.3-deb-1nodesource1_amd64.deb ...
Unpacking nodejs (14.21.3-deb-1nodesource1) over (12.22.9~dfsg-1ubuntu3.6) ...
dpkg: error processing archive /var/cache/apt/archives/nodejs_14.21.3-deb-1nodesource1_amd64.deb (--unpack):
 trying to overwrite '/usr/share/systemtap/tapset/node.stp', which is also in package libnode72:amd64 12.22.9~dfsg-1ubuntu3.6
Errors were encountered while processing:
 /var/cache/apt/archives/nodejs_14.21.3-deb-1nodesource1_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

コンソールに表示されるエラーメッセージが長くて複雑に見えることもありますが、重要なのはその中でどの部分が本質的なエラーメッセージなのかを理解することです。

エラーの分析

エラーメッセージ全体を確認する中で、注目すべきポイントは以下の部分です。

今回のエラー内容
dpkg: error processing archive /var/cache/apt/archives/nodejs_14.21.3-deb-1nodesource1_amd64.deb (--unpack):
 trying to overwrite '/usr/share/systemtap/tapset/node.stp', which is also in package libnode72:amd64 12.22.9~dfsg-1ubuntu3.6
Errors were encountered while processing:
 /var/cache/apt/archives/nodejs_14.21.3-deb-1nodesource1_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

このエラーメッセージから読み取れるのは、nodejsパッケージをアップグレードしようとした際に、/usr/share/systemtap/tapset/node.stpというファイルが既にlibnode72:amd64パッケージに存在しており、ファイルの上書きができないという問題です。このようなファイル競合が原因でアップグレードが中断されています。

エラー解決へのアプローチ

エラーの原因がわかりました(正確には「エラーの原因と思われるもの」となりますが、簡便化のためここでは言い切らせていただきます)。ここでは競合を解消するための具体的な手順について解説します。

  1. libnodeの存在チェック
  2. nodejsの削除
  3. libnodeの削除
  4. nodejsを再インストール
  5. 最終確認

1. libnodeの存在チェック

libnodeの存在チェックをします。

実行コマンド
dpkg -l | grep libnode
出力
ri  libnode72:amd64                    12.22.9~dfsg-1ubuntu3.6                      amd64        evented I/O for V8 javascript - runtime library

2. nodejsの削除

次に依存先のnodejsを削除しましょう。

実行コマンド
sudo apt remove --purge nodejs
出力
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages will be REMOVED:
  node-typescript* nodejs*
0 upgraded, 0 newly installed, 2 to remove and 2 not upgraded.
After this operation, 62.2 MB disk space will be freed.
Do you want to continue? [Y/n] Y
(Reading database ... 36019 files and directories currently installed.)
Removing node-typescript (4.5.4+ds1-1) ...
Removing nodejs (12.22.9~dfsg-1ubuntu3.6) ...
Processing triggers for man-db (2.10.2-1) ...

3. libnodeの削除

無事削除できました。続いてlibnode72を削除しましょう。

実行コマンド
sudo apt remove --purge libnode72
出力
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages will be REMOVED:
  libnode72*
0 upgraded, 0 newly installed, 1 to remove and 2 not upgraded.
After this operation, 41.2 MB disk space will be freed.
Do you want to continue? [Y/n] Y
(Reading database ... 35846 files and directories currently installed.)
Removing libnode72:amd64 (12.22.9~dfsg-1ubuntu3.6) ...
Processing triggers for libc-bin (2.35-0ubuntu3.8) ...

無事削除できました。これでnodejslibnode72が削除された状態となります。

4. nodejsを再インストール

再度nodejsをインストールしましょう。

実行コマンド
sudo apt install nodejs
実行コマンド
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
  nodejs
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 25.4 MB of archives.
After this operation, 121 MB of additional disk space will be used.
Get:1 https://deb.nodesource.com/node_14.x jammy/main amd64 nodejs amd64 14.21.3-deb-1nodesource1 [25.4 MB]
Fetched 25.4 MB in 2s (10.7 MB/s) 
Selecting previously unselected package nodejs.
(Reading database ... 35856 files and directories currently installed.)
Preparing to unpack .../nodejs_14.21.3-deb-1nodesource1_amd64.deb ...
Unpacking nodejs (14.21.3-deb-1nodesource1) ...
Setting up nodejs (14.21.3-deb-1nodesource1) ...
Processing triggers for man-db (2.10.2-1) ...

無事 nodejs をインストールすることができました。

5. 最終確認

念のため確認しましょう。

実行したコマンド
sudo apt update
sudo apt upgrade
出力
Hit:1 https://dl.yarnpkg.com/debian stable InRelease
Hit:2 https://deb.nodesource.com/node_14.x jammy InRelease                                                                                   
Hit:3 http://archive.ubuntu.com/ubuntu jammy InRelease                                                                                       
Get:4 http://security.ubuntu.com/ubuntu jammy-security InRelease [129 kB]                                                                    
Get:5 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [128 kB]                                           
Hit:6 https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy InRelease                                          
Hit:7 http://archive.ubuntu.com/ubuntu jammy-backports InRelease                          
Fetched 257 kB in 2s (165 kB/s)                         
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
1 package can be upgraded. Run 'apt list --upgradable' to see it.
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
Get more security updates through Ubuntu Pro with 'esm-apps' enabled:
  libheif1 libde265-0
Learn more about Ubuntu Pro at https://ubuntu.com/pro
The following packages will be upgraded:
  snapd
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 26.4 MB of archives.
After this operation, 2134 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 snapd amd64 2.65.3+22.04 [26.4 MB]
Fetched 26.4 MB in 6s (4480 kB/s)
(Reading database ... 40775 files and directories currently installed.)
Preparing to unpack .../snapd_2.65.3+22.04_amd64.deb ...
Unpacking snapd (2.65.3+22.04) over (2.63+22.04ubuntu0.1) ...
Setting up snapd (2.65.3+22.04) ...
Installing new version of config file /etc/apparmor.d/usr.lib.snapd.snap-confine.real ...
snapd.failure.service is a disabled or a static unit not running, not starting it.
snapd.snap-repair.service is a disabled or a static unit not running, not starting it.
Processing triggers for dbus (1.12.20-2ubuntu4.1) ...
Processing triggers for mailcap (3.70+nmu1ubuntu1) ...
Processing triggers for man-db (2.10.2-1) ...

無事インストールすることができました。

おわりに

定期的に環境をアップデートやアップグレードしないと、今回のようにエラーが発生することがあります。この文章を読んで、その点をご理解いただければ幸いです。ぼく自身も、このようなエラーに直面した際に、適切に対応できるようになりたいと感じました。

おまけ

nodejsを先に削除してからlibnodeを削除するとうまくいきますが、逆にlibnodeを先に削除しようとすると、依存関係のエラーが発生します。

実行コマンド
sudo apt remove --purge libnode72
# sudo dpkg --remove --force-remove-reinstreq libnode72 などのコマンドもあります
出力
dpkg: dependency problems prevent removal of libnode72:amd64:
 nodejs depends on libnode72 (= 12.22.9~dfsg-1ubuntu3.6).

dpkg: error processing package libnode72:amd64 (--remove):
 dependency problems - not removing
Errors were encountered while processing:
 libnode72:amd64

これを日本語に翻訳すると以下のようになります。

出力(日本語訳)
dpkg: 依存関係の問題により libnode72:amd64 の削除を防止しています:
 nodejs は libnode72 (= 12.22.9~dfsg-1ubuntu3.6) に依存しています。
dpkg: パッケージ libnode72:amd64 の処理中にエラーが発生しました (--remove): 依存関係の問題 - 削除されていません
処理中にエラーが発生しました: libnode72:amd64

nodejslibnodeに依存しているので削除できない状態です。nodejsがメンヘラ彼女でlibnodeが彼氏だとしたとき、彼氏(libnode)がいなくなったらメンヘラ彼女(nodejs)が発狂してしまう、というイメージです。

参考記事

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?