web-dev-qa-db-ja.com

ldconfigが不正なシンボリックリンクを作成しています

リポジトリからopenSUSELeap42.3システムにBacula7.4.4をインストールしました https://build.opensuse.org/package/show/home%3AXimi1970%3AopenSUSE%3AExtra/bacula 推奨- https://software.opensuse.org/package/bacula 。これらのパッケージは、openSUSEの代替メカニズムを使用して、カタログ(私の場合はMySQL)に使用するDMBSを構成します。残念ながら、パッケージは少しバグがあります。 bacula-directorおよびbacula-mysqlパッケージをインストールすると、/ usr/lib64にあるlibbaccatsライブラリのシンボリックリンクは次のようになります。

_libbaccats.so -> /etc/alternatives/libbaccats.so
libbaccats-mysql.so -> libbaccats-mysql-7.4.4.so
libbaccats-stub.so -> libbaccats-7.4.4.so
libbaccats-7.4.4.so -> libbaccats-stub-7.4.4.so
_

最後の2つは明らかに意味がなく、directorまたはdbcheckユーティリティを実行しようとするとエラーメッセージが表示されて失敗します。

致命的なエラー:このnulllibbaccatsライブラリを適切なライブラリに置き換えてください。

もちろん、これは次のコマンドを発行することで簡単に修正できます。

_ln -sf libbaccats-stub-7.4.4.so libbaccats-stub.so
ln -sf /etc/alternatives/libbaccats-7.4.4.so libbaccats-7.4.4.so
_

目的の結果を生成するには:

_libbaccats.so -> /etc/alternatives/libbaccats.so
libbaccats-7.4.4.so -> /etc/alternatives/libbaccats-7.4.4.so
libbaccats-mysql.so -> libbaccats-mysql-7.4.4.so
libbaccats-stub.so -> libbaccats-stub-7.4.4.so
_

これにより、/ etc/alternativesのシンボリックリンクが許可されます。

_libbaccats.so -> /usr/lib64/libbaccats-mysql.so
libbaccats-7.4.4.so -> /usr/lib64/libbaccats-mysql-7.4.4.so
_

libbaccatsへの参照をMySQLバリアントに正しく送信します。

ただし、ldconfig(8)コマンドを実行するたびに、/ usr/lib64/libbaccats-7.4.4.soシンボリックリンクがリセットされ、libbaccats-stub-7.4.4.soを再度指すようになり、Baculaが破損します。 ldconfigはさまざまな場面でシステムによって自動的に実行されるため、これはかなり面倒です。

同じ問題がリポジトリのBacula9.0.6にも存在します https://download.opensuse.org/repositories/home:/cristyde/openSUSE_Leap_42.3/

そのシンボリックリンクがどこを指すべきかというldconfigの考えをどのように修正できますか?

5
Tilman Schmidt

私の調査によると、ldconfigの(誤)動作は、ファイルlibbaccats-stub-9.0.6.soの-​​content、特にそのSONAMEフィールドによってトリガーされます。

ts@xenon:~> objdump -p /usr/lib64/libbaccats-stub-9.0.6.so

/usr/lib64/libbaccats-stub-9.0.6.so:     file format elf64-x86-64
[...]
Dynamic Section:
  NEEDED               libc.so.6
  SONAME               libbaccats-9.0.6.so

どうやらそのヘッダーはldconfigにその名前でシンボリックリンクを作成するように指示しているようです。

証明:libbaccats-stub-9.0.6.soの名前をlibbaccats-stub-9.0.6.so.BADに変更すると、ldconfigは適切にシンボリックリンクを作成します

libbaccats-7.4.4.so -> libbaccats-stub-7.4.4.so.BAD

代わりにlibbaccats-stub-9.0.6.sogzipで圧縮すると、ldconfigが文句を言います

ldconfig:/usr/lib64/libbaccats-stub-9.0.6.so.gzはELFファイルではありません-開始時に間違ったマジックバイトがあります。

libbaccats-7.4.4.soシンボリックリンクはそのままにしておきます。

したがって、ldconfigに正しいシンボリックリンクを作成させる方法は見つかりませんでしたが、少なくとも、ファイル/usr/lib64/libbaccats-stub-9.0.6.soを削除、圧縮、またはその他の方法でマングルして、間違ったシンボリックリンクを再作成しないようにする方法があります。

もちろん、realの解決策は、libbaccats-stub-9.0.6.soSONAMEフィールドを正しく設定することですが、それはbacula-directorパッケージのビルドプロセスで発生する必要があります。 。

2
Tilman Schmidt