Arch Linuxでパッケージアップデート後にライブラリ関連のエラーが出ましたが、他のサイトを参考にさせていただき解決できました。
ひととおり自分で動かして経験しましたので、将来、同様のことがあった時のために記録します。
目次:
- 参照サイト
- パッケージアップデート後にエラー発生
- 足りないライブラリを確認する
- package-queryをアンインストールする(失敗)
- package-queryをアンインストールする(成功)
- package-queryをダウンロードする
- package-queryを再構築しインストールする
- ライブラリを確認する
参照サイト
Arch Linux: package-query: error while loading shared libraries: libalpm.so.11
基本的にはこちらで紹介されている内容に従って解決しました。
パッケージアップデート後にエラー発生
Arch Linuxでパッケージアップデートをかけたところ、その後のパッケージ操作で以下のエラーが発生するようになってしまいました。
$ yaourt -Ss stress package-query: error while loading shared libraries: libalpm.so.11: cannot open shared object file: No such file or directory
足りないライブラリを確認する
エラーメッセージによると package-query
コマンドが原因のようです。
$ package-query Arch Linux: package-query: error while loading shared libraries: libalpm.so.11 https://rtfm.co.ua/en/arch-linux-package-query-error-while-loading-shared-libraries-libalpm-so-11-2/
ldd
でエラーが出ているライブラリを確認します。
$ which package-query /usr/bin/package-query $ ldd /usr/bin/package-query linux-vdso.so.1 (0x00007ffcb63ed000) libcurl.so.4 => /usr/lib/libcurl.so.4 (0x00007fdd3ed3d000) libyajl.so.2 => /usr/lib/libyajl.so.2 (0x00007fdd3eb33000) libalpm.so.11 => not found libc.so.6 => /usr/lib/libc.so.6 (0x00007fdd3e96c000) 〜後略〜
libalpm.so.11
が足りません。
/usr/lib を確認します。
$ ls -l /usr/lib/libalpm.so.* lrwxrwxrwx 1 root root 17 10月 22 11:06 /usr/lib/libalpm.so.12 -> libalpm.so.12.0.0 -rwxr-xr-x 1 root root 223616 10月 22 11:06 /usr/lib/libalpm.so.12.0.0
確かにシステムに libalpm.so.11
が存在しません。
package-queryをアンインストールする(失敗)
パッケージ間の依存関係により失敗します。
$ sudo pacman -R package-query 依存関係を確認しています... エラー: 処理の準備に失敗しました (依存関係を解決できませんでした) :: package-query を削除すると 'package-query>=1.8' が破壊され yaourt の依存関係が壊れます
package-queryをアンインストールする(成功)
pacman
のオプション -Rdd
により一時的に依存関係を無視して削除します。
$ sudo pacman -Rdd package-query パッケージ (1) package-query-1.9-3 合計削除容量: 0.06 MiB :: 以上のパッケージを削除しますか? [Y/n] y :: パッケージの変更を処理しています... (1/1) 削除 package-query [#############################] 100% :: トランザクション後のフックを実行... (1/1) Arming ConditionNeedsUpdate...
他のパッケージから依存されているパッケージを、依存しているパッケージを削除しないで削除するには:
package-queryをダウンロードする
$ cd src $ git clone https://aur.archlinux.org/package-query.git Cloning into 'package-query'... remote: Enumerating objects: 53, done. remote: Counting objects: 100% (53/53), done. remote: Compressing objects: 100% (50/50), done. remote: Total 53 (delta 3), reused 52 (delta 3) Unpacking objects: 100% (53/53), done. $ cd package-query/
package-queryを再構築しインストールする
makepkg
のオプション -s
(依存パッケージの自動インストール) -i
(パッケージのインストール) を使って package-query
を再構築しインストールします。
$ makepkg -si ==> 警告: PACKAGER は 'Example Name <email@address.invalid>' という形式である必要があります ==> パッケージを作成: package-query 1.10-1 (2019年11月02日 21時23分46秒) ==> ランタイムの依存関係を確認... ==> ビルドタイムの依存関係を確認... ==> ソースを取得... -> ダウンロード package-query-1.10.tar.gz... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 615 0 615 0 0 303 0 --:--:-- 0:00:02 --:--:-- 303 100 361k 100 361k 0 0 52976 0 0:00:06 0:00:06 --:--:-- 93438 ==> source で md5sums ファイルを検証... package-query-1.10.tar.gz ... 成功 ==> ソースを展開... -> package-query-1.10.tar.gz を bsdtar で展開 ==> build() を開始... checking for a BSD-compatible install... /usr/bin/install -c 〜中略〜 make[1]: ディレクトリ '/home/paz/src/package-query/src/package-query-1.10' から出ます ==> インストールを整理... -> libtool ファイルを削除... -> 不要なファイルを削除... -> スタティックライブラリファイルを削除しています... -> バイナリとライブラリから不要なシンボルを削除... -> man と info ページを圧縮... ==> パッケージの問題をチェック... ==> パッケージを作成 "package-query"... -> .PKGINFO ファイルを生成... -> .BUILDINFO ファイルを生成... -> .MTREE ファイルを生成... -> パッケージの圧縮... ==> fakeroot 環境を終了。 ==> 作成完了: package-query 1.10-1 (2019年11月02日 21時24分11秒) ==> パッケージ package-query を pacman -U でインストール... [sudo] paz のパスワード: パッケージをロード... 依存関係を解決しています... 衝突するパッケージがないか確認しています... パッケージ (1) package-query-1.10-1 合計インストール容量: 0.07 MiB :: インストールを行いますか? [Y/n] y (1/1) キーリングのキーを確認 [##################################################################] 100% (1/1) パッケージの整合性をチェック [##################################################################] 100% (1/1) パッケージファイルのロード [##################################################################] 100% (1/1) ファイルの衝突をチェック [##################################################################] 100% (1/1) 空き容量を確認 [##################################################################] 100% :: パッケージの変更を処理しています... (1/1) インストール package-query [##################################################################] 100% :: トランザクション後のフックを実行... (1/1) Arming ConditionNeedsUpdate...
ライブラリを確認する
ldd
で確認したところ libalpm.so.12
が使われるようになったことを確認できました。
$ ldd /usr/bin/package-query linux-vdso.so.1 (0x00007ffddcfd5000) libcurl.so.4 => /usr/lib/libcurl.so.4 (0x00007fbc94c3a000) libyajl.so.2 => /usr/lib/libyajl.so.2 (0x00007fbc94a30000) libalpm.so.12 => /usr/lib/libalpm.so.12 (0x00007fbc949f8000) libc.so.6 => /usr/lib/libc.so.6 (0x00007fbc94831000) 〜後略〜