てきとうなさいと べぇたばん

apt updateしようとしたらエラーが出た

dpkgでaptを入れ直したらなぜか動いた。

WSL上のUbuntuでapt updateをしようとしたら何故か以下のようなエラーが出た。aptコマンド自体がなんかぶっ壊れてるらしい。apt-getもダメだし、rootだろうがそうでなかろうがダメ。

$ sudo apt update
apt: error while loading shared libraries: libapt-private.so.0.0: cannot open shared object file: No such file or directory
$ apt-get
apt-get: error while loading shared libraries: libapt-private.so.0.0: cannot open shared object file: No such file or directory

んで、straceしたが、libapt-private.so.0.0を探しているだけだった


tekimen@DESKTOP-I76FQM3:~$ sudo strace apt autoremove
execve("/usr/bin/apt", ["apt", "autoremove"], 0x7fffcac4ae18 /* 14 vars */) = 0
brk(NULL)                               = 0x7fffbc3cc000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=67478, ...}) = 0
mmap(NULL, 67478, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f89c318f000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/tls/x86_64/x86_64/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib/x86_64-linux-gnu/tls/x86_64/x86_64", 0x7fffc3f63700) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/tls/x86_64/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib/x86_64-linux-gnu/tls/x86_64", 0x7fffc3f63700) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/tls/x86_64/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib/x86_64-linux-gnu/tls/x86_64", 0x7fffc3f63700) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/tls/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib/x86_64-linux-gnu/tls", 0x7fffc3f63700) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/x86_64/x86_64/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib/x86_64-linux-gnu/x86_64/x86_64", 0x7fffc3f63700) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/x86_64/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib/x86_64-linux-gnu/x86_64", 0x7fffc3f63700) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/x86_64/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib/x86_64-linux-gnu/x86_64", 0x7fffc3f63700) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib/x86_64-linux-gnu", {st_mode=S_IFDIR|0755, st_size=512, ...}) = 0
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/tls/x86_64/x86_64/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib/x86_64-linux-gnu/tls/x86_64/x86_64", 0x7fffc3f63700) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/tls/x86_64/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib/x86_64-linux-gnu/tls/x86_64", 0x7fffc3f63700) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/tls/x86_64/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib/x86_64-linux-gnu/tls/x86_64", 0x7fffc3f63700) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/tls/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib/x86_64-linux-gnu/tls", 0x7fffc3f63700) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/x86_64/x86_64/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib/x86_64-linux-gnu/x86_64/x86_64", 0x7fffc3f63700) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/x86_64/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib/x86_64-linux-gnu/x86_64", 0x7fffc3f63700) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/x86_64/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib/x86_64-linux-gnu/x86_64", 0x7fffc3f63700) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib/x86_64-linux-gnu", {st_mode=S_IFDIR|0755, st_size=512, ...}) = 0
openat(AT_FDCWD, "/lib/tls/x86_64/x86_64/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib/tls/x86_64/x86_64", 0x7fffc3f63700) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/tls/x86_64/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib/tls/x86_64", 0x7fffc3f63700) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/tls/x86_64/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib/tls/x86_64", 0x7fffc3f63700) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/tls/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib/tls", 0x7fffc3f63700)        = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64/x86_64/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib/x86_64/x86_64", 0x7fffc3f63700) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib/x86_64", 0x7fffc3f63700)     = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib/x86_64", 0x7fffc3f63700)     = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/lib", {st_mode=S_IFDIR|0755, st_size=512, ...}) = 0
openat(AT_FDCWD, "/usr/lib/tls/x86_64/x86_64/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib/tls/x86_64/x86_64", 0x7fffc3f63700) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/tls/x86_64/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib/tls/x86_64", 0x7fffc3f63700) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/tls/x86_64/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib/tls/x86_64", 0x7fffc3f63700) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/tls/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib/tls", 0x7fffc3f63700)    = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64/x86_64/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib/x86_64/x86_64", 0x7fffc3f63700) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib/x86_64", 0x7fffc3f63700) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib/x86_64", 0x7fffc3f63700) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/libapt-private.so.0.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/lib", {st_mode=S_IFDIR|0755, st_size=512, ...}) = 0
writev(2, [{iov_base="apt", iov_len=3}, {iov_base=": ", iov_len=2}, {iov_base="error while loading shared libra"..., iov_len=36}, {iov_base=": ", iov_len=2}, {iov_base="libapt-private.so.0.0", iov_len=21}, {iov_base=": ", iov_len=2}, {iov_base="cannot open shared object file", iov_len=30}, {iov_base=": ", iov_len=2}, {iov_base="No such file or directory", iov_len=25}, {iov_base="\n", iov_len=1}], 10apt: error while loading shared libraries: libapt-private.so.0.0: cannot open shared object file: No such file or directory
) = 124
exit_group(127)                         = ?
+++ exited with 127 +++

これは、libapt-private.so.0.0がないからこうなるけど、なんでないんだ?となる。

libapt-pkgをdpkgでインストールしてみたが、特に変化なし。そりゃlibapt-pkgじゃないしなあ。

$ sudo wget http://security.ubuntu.com/ubuntu/pool/main/a/apt/libapt-pkg5.0_1.6.12_amd64.deb
$ sudo dpkg -i libapt-pkg5.0_1.6.12_amd64.deb
(データベースを読み込んでいます ... 現在 195522 個のファイルとディレクトリがインストールされています。)
libapt-pkg5.0_1.6.12_amd64.deb を展開する準備をしています ...
libapt-pkg5.0:amd64 (1.6.12) で (1.6.11 に) 上書き展開しています ...
libapt-pkg5.0:amd64 (1.6.12) を設定しています ...
libc-bin (2.27-3ubuntu1) のトリガを処理しています ...

何故か解決

最終的にはdpkgでaptを入れ直した。バージョンはどれだったかを調べることをしなかったので、考えなしに選んだら古すぎたりした。

$ sudo dpkg -i apt_1.6.12_amd64.deb
dpkg: 警告: apt を 1.9.5 から 1.6.12 にダウングレードしています
(データベースを読み込んでいます ... 現在 195545 個のファイルとディレクトリがインストールされています。)
apt_1.6.12_amd64.deb を展開する準備をしています ...
apt (1.6.12) で (1.9.5 に) 上書き展開しています ...
dpkg: 依存関係の問題により apt の設定ができません:
 apt は以下に依存 (depends) します: libapt-pkg5.0 (>= 1.6.12) ...しかし:
  システム上の libapt-pkg5.0:amd64 のバージョンは 1.6.6ubuntu0.1 です。

dpkg: パッケージ apt の処理中にエラーが発生しました (--install):
 依存関係の問題 - 設定を見送ります
libc-bin (2.27-3ubuntu1) のトリガを処理しています ...
man-db (2.8.3-2ubuntu0.1) のトリガを処理しています ...
処理中にエラーが発生しました:
 apt

libapt-pkg5.0のバージョンが1.6.6だから、aptもそれを入れることにした

$ wget http://archive.ubuntu.com/ubuntu/pool/main/a/apt/apt_1.6.6ubuntu0.1_amd64.deb
$ sudo dpkg -i apt_1.6.6ubuntu0.1_amd64.deb
dpkg: 警告: apt を 1.6.12 から 1.6.6ubuntu0.1 にダウングレードしています
(データベースを読み込んでいます ... 現在 195528 個のファイルとディレクトリがインストールされています。)
apt_1.6.6ubuntu0.1_amd64.deb を展開する準備をしています ...
apt (1.6.6ubuntu0.1) で (1.6.12 に) 上書き展開しています ...
apt (1.6.6ubuntu0.1) を設定しています ...
新バージョンの設定ファイル /etc/apt/apt.conf.d/01autoremove をインストールしています ...
libc-bin (2.27-3ubuntu1) のトリガを処理しています ...
man-db (2.8.3-2ubuntu0.1) のトリガを処理しています ...

そしたら動いた。なんかの拍子に消したのかな。

$ sudo apt update
ヒット:1 http://archive.ubuntu.com/ubuntu bionic InRelease
取得:2 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
取得:3 http://archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
取得:4 http://archive.ubuntu.com/ubuntu bionic-updates/universe Sources [271 kB]
取得:5 http://archive.ubuntu.com/ubuntu bionic-updates/restricted Sources [6,212 B]
取得:6 http://archive.ubuntu.com/ubuntu bionic-updates/main Sources [300 kB]

あとがき

上で書いた「dpkgでバージョンを確認する方法」、あとで確認したらdpkg -sとのこと

$ dpkg -s apt
Package: apt
Status: install ok installed
Priority: important
Section: admin
Installed-Size: 3866
Maintainer: Ubuntu Developers 
Architecture: amd64
Version: 1.6.12
Replaces: apt-transport-https (<< 1.5~alpha4~), apt-utils (<< 1.3~exp2~)
Provides: apt-transport-https (= 1.6.12)

参考