はとのーと

エジソンノート(アイデア、思い付き、メモ)として使っています。誰かの役に立つかもしれないので公開しています。

Arch Linuxのパッケージアップデート後のライブラリ不足エラーに対応した

Arch Linuxでパッケージアップデート後にライブラリ関連のエラーが出ましたが、他のサイトを参考にさせていただき解決できました。

ひととおり自分で動かして経験しましたので、将来、同様のことがあった時のために記録します。

目次:

参照サイト

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 1022 11:06 /usr/lib/libalpm.so.12 -> libalpm.so.12.0.0
-rwxr-xr-x 1 root root 223616 1022 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...

他のパッケージから依存されているパッケージを、依存しているパッケージを削除しないで削除するには:

pacman -Rdd パッケージ名

pacman - ArchWiki

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 (20191102212346)
==> ランタイムの依存関係を確認...
==> ビルドタイムの依存関係を確認...
==> ソースを取得...
  -> ダウンロード 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 (20191102212411)
==> パッケージ 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)
〜後略〜