Lambdaカクテル

京都在住Webエンジニアの日記です

Invite link for Scalaわいわいランド

zypper で libgpgme error in 'gpgme_ctx_set_engine_info': <GPGME> 無効な暗号エンジンです と表示される場合は libgpg-error も更新すると良い

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_revlibgpg-error のバージョンアップで新規に追加されたシンボルであるらしかった:

https://lists.opensuse.org/archives/list/arm@lists.opensuse.org/message/AYMJGSA245QIWD3MXYPFHAZQXXD6AMEW/

そこで、次のような仮説を立てた。

  • libgpg-errorがバージョンアップし、シンボルが追加された
  • これに追随して他のツール(gpgscdaemon)もこれを利用するようになった
  • しかし手元のバイナリが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だけ更新してしまっていたらしい。

★記事をRTしてもらえると喜びます
Webアプリケーション開発関連の記事を投稿しています.読者になってみませんか?