6

ldconfigおよびの使用に関する一般的な基本事項は認識してLD_LIBRARY_PATHいますが、私の状況について少し専門家の助けを借りたいと思っています。

独自のディレクトリに常駐し、多くのライブラリの独自のバージョンを持つポータブル ソフトウェア パッケージがあります。

このディレクトリから実行される多くのバイナリとスクリプトがあります。

一部のバイナリ (apache、php、postgres) も、システムに個別のバージョンがインストールされている場合があります。

/etc/ld.so.conf.d/myapp.confphp には 2 つのバージョンが存在する可能性があるため、ldconfig ファイルを使用する "myapp" のバージョンをシステムが判断できない場合は、作成するだけでは十分ではありません。

このようなシステムを構成するためのベスト プラクティスを探しています。LD_LIBRARY_PATHシステム上のすべてのアプリケーションがそれを使用するようにエクスポートされたソフトウェア パックを最初にセットアップした人。

パッケージ ディレクトリ内のアプリケーションだけを分離しようとしています。

操作するいくつかのパラメーター:

/mypack- ソフトウェアパッケージのすべてが含まれています

/mypack/local/lib- システムと互換性がない可能性のある必要なライブラリが含まれています

ライブラリの例:

/mypack/local/lib/libz.so.1 => /mypack/local/lib/libz.so.1.2.3
/lib/libz.so.1 => /lib/libz.so.1.2.3

バージョンが同じであっても、/mypack にあるものはディストリビューションと互換性がなく、使用するとシステムが壊れる可能性があります

バイナリの例: php は /mypack とデフォルト ディレクトリの両方に存在します。/mypack の php は /mypack/local/lib のライブラリを使用し、ディストリビューション バージョンは /lib を使用する必要があります。

Linux ライブラリ パスに関するいくつかの質問: - /mypack 内の php のバージョンのみに影響するように /etc/ld.so.conf.d/php.conf を指定することは可能ですか? - 実行可能ファイルの場所に基づいてライブラリ パスを指定できますか? つまり、実行時に、実行可能ファイルのパスが /mypack の下にある場合、そこからライブラリを自動的に使用できますか? ――ユーザー単位ではいかがですか?システムの一部/ほとんどが異なるユーザー アカウントで実行されています。ユーザーごとに異なるライブラリパスを設定できれば、それで解決します。

4

2 に答える 2

5

他の誰かがこれを便利だと思った場合に備えて、ビルドする前にこれを行うことになりました:

export LD_RUN_PATH='$ORIGIN/../lib'

これには、バイナリの場所に相対的な、バイナリ自体のライブラリ パスが含まれます。これを bash スクリプトまたはビルド ファイルで使用する予定がある場合は、\$$ORIGIN、\$$ORIGIN、または $$ などを実行する必要がある場合があるため、$ORIGIN で特定の使用方法を調べてください。ビルドに関係するさまざまなユーティリティがドル記号を適切にエスケープできるように、ORIGIN を変更します。この便利なビットを見つけたおかげで、ソフトウェア パックをビルドするためにバッチとして実行される約 50 の個別のスクリプトを更新する必要がなくなりました。

于 2013-07-29T08:01:18.240 に答える
0

一般的な問題は、LD_LIBRARY_PATH が ldconfig によって提供される情報に先行することです。まだバックアップライブラリを持っていないシステムにインストールするためのバックアップライブラリのセットが必要な場合は、ldconfig から現在のライブラリのセットを抽出し、それらを LD_LIBRARY_PATH の先頭に追加します。

mytmp=/tmp/${USER}_junk$$
( for i in `/sbin/ldconfig -p | grep '=>' | awk '{ print $NF }'` ; do   dirname $i ; done ) | sort -r | uniq > ${mytmp}
myld=""
for j in `cat ${mytmp}` ; do myld=${j}:${myld} ; done
rm -f ${mytmp}
LD_LIBRARY_PATH=${myld}${LD_LIBRARY_PATH}:${SEP}/lib:${SEP}/lib/syslibs
export LD_LIBRARY_PATH
于 2016-02-01T01:29:30.347 に答える