「E: Sub-process /usr/bin/dpkg returned an error code (1)」というエラーが解決できない
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)
近そうな現象
原因は、何かしらの理由でインストール、またはアップデートしようとしたパッケージが壊れてしまったためです。壊れているというのは、例えばパッケージが使用するライブラリの依存関係が干渉してしまったり、整合性が取れなくなったりする場合です。
上記記事の原因はパッケージの整合性が取れなくなったり、依存関係が干渉してしまったかららしい。
考えられる原因
sudo apt update
やsudo apt install
を実行した際にパッケージが何らかの理由で壊れてしまったことが原因の可能性が高い
sudo apt remove libnode72
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
nodejs
The following packages will be REMOVED:
libnode72
The following packages will be upgraded:
nodejs
1 upgraded, 0 newly installed, 1 to remove and 2 not upgraded.
Need to get 0 B/25.4 MB of archives.
After this operation, 79.1 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)
libnode
の存在チェックをします。
dpkg -l | grep libnode
ri libnode72:amd64 12.22.9~dfsg-1ubuntu3.6 amd64 evented I/O for V8 javascript - runtime library
存在しているみたいなので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 -l | grep libnode
ri libnode72:amd64 12.22.9~dfsg-1ubuntu3.6 amd64 evented I/O for V8 javascript - runtime library
依存関係の問題で失敗しているみたいです。
依存先の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) ...
無事削除できました。続いて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) ...
無事削除できました。これでnodejs
とlibnode72
が削除された状態となります。
再度nodejs
をインストールしましょう。
sudo apt update
Hit:1 https://dl.yarnpkg.com/debian stable InRelease
Hit:2 https://deb.nodesource.com/node_14.x jammy InRelease
Hit:3 http://security.ubuntu.com/ubuntu jammy-security InRelease
Hit:4 http://archive.ubuntu.com/ubuntu jammy InRelease
Hit:5 http://archive.ubuntu.com/ubuntu jammy-updates InRelease
Hit:6 https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy InRelease
Hit:7 http://archive.ubuntu.com/ubuntu jammy-backports InRelease
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up to date.
W: https://dl.yarnpkg.com/debian/dists/stable/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.
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
をインストールすることができました。
今回の原因
パッケージの依存関係が干渉してapt upgrade
が失敗したと思われる。
解決方法
依存関係のあるパッケージを両方削除する(今回だとnodejs
とlibnode72
)。削除完了したら再度インストールし直す(今回はnodejs
のみ)。
どうすればもっと早く解決したのか
以下の部分を確認すればよかった。
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: アーカイブ /var/cache/apt/archives/nodejs_14.21.3-deb-1nodesource1_amd64.deb の処理中にエラーが発生しました (--unpack):
'/usr/share/systemtap/tapset/node.stp' を上書きしようとしていますが、これはパッケージ libnode72:amd64 12.22.9~dfsg-1ubuntu3.6 にも含まれています。
処理中にエラーが発生しました:
/var/cache/apt/archives/nodejs_14.21.3-deb-1nodesource1_amd64.deb
E: サブプロセス /usr/bin/dpkg がエラーコード (1) を返しました。
/usr/share/systemtap/tapset/node.stp
が複数のパッケージに含まれているという意味らしい。
条件にもよりますが個人であれば最新にしとけば問題ないと思います。
補足
システム上にある「部分的にインストールされた」または「破損した」パッケージを検出するために使用するコマンドがあるのでこちらを使用すれば具体的に何がこけているのか確認することができます。
sudo dpkg --audit
記事を書きました
Qiitaにてこちらの記事を書きました。
こちらはクローズとなります。ありがとうございました。