gpg-agent失敗:未定義シンボルgpg_err_set_errno

gpg-agent失敗:未定義シンボルgpg_err_set_errno

昨日は、yumのインストールに失敗したため、いくつかの奇妙な問題を経験し始めました。問題の1つは、PS -ef(実際には他のユーザーの状態を確認するpsコマンド)が無期限に中断されることです。これは再起動によって解決されました。しかし、まだ2つの問題があります。

vncserverを実行しようとするとエラーが発生します。

Gtk-Message: Failed to load modle "canberra-gtk-module": libcanberra-gtk-module.so: cannot open shared object.

libcanberra-gtk-moduleがシステムのどこにも存在しないため、エラーが発生します。必須ではないと思ったので、ロードするリストからモジュールを削除しましたが、vncserverがモジュールをロードしようとする原因は何かわかりません。

しかし、もっと重要なバグはGPG-agentです。数箇所でエラーが発生しますが、結論はgpg-agentを実行しようとするとエラーが発生することです。

 ImportError: /usr/local/lib/libgcrypt.so.11: undefined symbole: gog-err-set_errno

gpg-agentのマニュアルページにリストされているファイルが存在しないようです。 libgpg-errorパッケージを再インストールしてみましたが、何も修正されませんでした。この問題の原因やデバッグ方法を知っていますか?

ありがとうございます。

答え1

この問題を解決しました。問題は、私のLD_LIBRARY_PATH変数が空であることです。私のlibgpg_error SOが私の/ lib64ディレクトリにあったので、LD_LIBRARY_PATH = / lib64を設定すると問題が解決しました。より正確には、gpg-agent newがlibgpg_error.soをどこで見つけますか(LDDによる)。ただし、gpg-agentもlibgcryptを使用します。 Libgcryptはlibgpg_error.soを見つけることができません。 libgcrypt.soがシンボルテーブルのlibgpg_error.soの前に表示されるため、libgcrypt.soが最初にロードされ、エラーが発生したとします。まだロードされておらず、libgpg_error.soが見つからないためです。 LD_LIBRARY_PATHを設定すると、libgcryptは.soを正しく見つけてロードできます。

/etc/profile.d/で実行される小さなスクリプトを設定しました。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH;/lib64

まだ再起動していませんが、一度再起動すると、誰もがこの問題を解決する必要があると確信しています。

誰かがYUM(YUMがそうだったら)がなぜこれを壊したのか教えてくれたら知りたいです。また、私のLD_LIBRARY_PATHに/ lib64パスのみが含まれていることを心配する必要がありますか?そこに別の長さが必要ですか?スクリプトを追加する前になぜ空なのか疑問に思うべきですか?

更新:LD_LIBRARY_PATHファイルに追加したソリューションは完璧ではありません。 gnomeで端末を開くと、LD_LIBRARY_PATHはまだ空です。この問題を解決する正しい方法は、ファイルを /etc/ld.so.cache.d/ ディレクトリに配置することです。ファイルは.conf(検出先)で終わる必要があり、次の行を含める必要があります。

/lib64

その後、rootとしてldconfigを実行しました。これにより、Linuxは/ lib64のすべての.soを「自動検出」するので、LD_LIBRARY_PATHをまったく設定する必要はありません。

関連情報