openSUSEを利用している。ある日gpgの調子が悪くなってしまい、zypperなどがうまく動かなくなってしまった。
% sudo zypper refresh ... libgpgme error in 'gpgme_ctx_set_engine_info': <GPGME> 無効な暗号エンジンです
% /usr/libexec/scdaemon
/usr/libexec/scdaemon: symbol lookup error: /usr/libexec/scdaemon: undefined symbol: gpgrt_spawn_actions_set_env_rev, version GPG_ERROR_1.0
色々調べたところ、このシンボルgpgrt_spawn_actions_set_env_revはlibgpg-error のバージョンアップで新規に追加されたシンボルであるらしかった:
そこで、次のような仮説を立てた。
libgpg-errorがバージョンアップし、シンボルが追加された- これに追随して他のツール(
gpg、scdaemon)もこれを利用するようになった - しかし手元のバイナリが
gpgだけ更新されてしまい、本来あるはずの最新のlibgpg-errorのシンボルが存在しない状態になった - これでエラーになった
このためlibgpg-errorを直接更新させた:
% sudo zypper in -f https://download.opensuse.org/tumbleweed/repo/oss/x86_64/libgpg-error0-1.55-1.1.x86_64.rpm
このURLは https://download.opensuse.org/tumbleweed/repo/oss/x86_64/ で検索すると最新のものが出る。
すると何事もなく動くようになった。
どこかで依存性を破壊してgpgだけ更新してしまっていたらしい。