リポジトリから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
の考えをどのように修正できますか?
私の調査によると、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.so
をgzip
で圧縮すると、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.so
のSONAME
フィールドを正しく設定することですが、それはbacula-director
パッケージのビルドプロセスで発生する必要があります。 。