検索

3.5. Software Collection Library のサポート

download PDF
Software Collection 環境でのみ使用するライブラリー、またはシステムで利用可能なライブラリーに加えて、以下のように、enable スクリプトレットの LD_LIBRARY_PATH 環境変数を更新します。
export LD_LIBRARY_PATH="%{_libdir}\${LD_LIBRARY_PATH:+:\${LD_LIBRARY_PATH}}"
この設定は、Software Collection が有効な場合に、システムで利用可能なライブラリーのバージョンよりも、Software Collection のライブラリーのバージョンが推奨されます。
注記
Software Collection でプライベート共有ライブラリーを配布する場合は、LD_LIBRARY_PATH 環境変数の代わりに DT_RUNPATH 属性を使用して、Software Collection 環境でプライベートの共有ライブラリーにアクセスできるようにすることを検討してください。

3.5.1. Software Collection 以外のライブラリーの使用

Software Collection 環境外で使用するライブラリーを配布する場合は、この目的で /etc/ld.so.conf.d/ ディレクトリーを使用できます。
警告
システムで利用できるライブラリー /etc/ld.so.conf.d/ には使用しないでください。/etc/ld.so.conf.d/ を使用すると、Software Collection のライブラリーのバージョンが、ライブラリーのシステムバージョンよりも優先される可能性があるため、システムで利用できないライブラリーにのみの使用が推奨されます。これにより、予期せぬ終了やデータ損失などの、アプリケーションのシステムバージョンの動作が望ましくない可能性があります。

手順3.4 Software Collection のライブラリーに /etc/ld.so.conf.d/ を使用

  1. %{?scl_prefix}libs.conf という名前のファイルを作成し、spec ファイル設定を適宜調整します。
    SOURCE2: %{?scl_prefix}libs.conf
    
  2. %{?scl_prefix}libs.conf ファイルに、Software Collection に関連付けられたライブラリーのバージョンがあるディレクトリーの一覧を含めます。以下に例を示します。
    /opt/provider/software_collection_1/root/usr/lib64/
    
    上記の例では、Software Collection software_collection_1 に含まれる /usr/lib64/ ディレクトリーが一覧に含まれます。
  3. 以下のように %{?scl_prefix}libs.conf ファイルがインストールされているように、spec ファイルの %install セクションを編集します。
    %install
    install -p -c -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{?scl:%_root_sysconfdir}%{!?scl:%_sysconfdir}/ld.so.conf.d/
    

3.5.2. Software Collection 名を使用したライブラリーメジャー soname の接頭辞

Software Collection に含まれるライブラリーを使用する場合は、ベースシステムのインストールの一部として、同じメジャー soname を持つライブラリーがすでにシステムで使用できることに注意してください。そのため、Software Collection に含まれるライブラリーに対してアプリケーションを構築する場合は、scl enable コマンドの使用を忘れないでください。これを実行しないと、ライブラリーの誤ったシステムバージョンにリンクされた、誤った環境でアプリケーションが実行される可能性があります。
警告
誤った環境でアプリケーションを実行することや (Software Collection 環境ではなくシステム環境など)、アプリケーションを誤ったライブラリーにリンクすると、予期せぬ終了やデータ損失など、アプリケーションの望ましくない動作が発生する可能性があることに注意してください。
LD_LIBRARY_PATH 環境変数が正しく設定されていない場合でも、アプリケーションが誤ったライブラリーにリンクされていないことを確認するには、Software Collection に含まれるライブラリーのメジャー soname を変更します。メジャーの soname を変更するには、メジャーの soname バージョン番号の前に Software Collection 名を付けることが推奨されます。
以下は、mysql55- 接頭辞が付いた MySQL クライアントライブラリーの例です。
$ rpm -ql mysql55-mysql-libs | grep 'lib.*so'
/opt/provider/mysql55/root/usr/lib64/mysql/libmysqlclient.so.mysql55-18
/opt/provider/mysql55/root/usr/lib64/mysql/libmysqlclient.so.mysql55-18.0.0
同じシステムでは、MySQL クライアントライブラリーのシステムバージョンを以下に示します。
$ rpm -ql mysql-libs | grep 'lib.*so'
/usr/lib64/mysql/libmysqlclient.so.18
/usr/lib64/mysql/libmysqlclient.so.18.0.0
この rpmbuild ユーティリティーは、バージョン付けされた共有ライブラリーを含むパッケージ用の自動 Provides タグを生成します。上記のように soname の接尾辞を付けない場合は、mysql パッケージの場合の Provides の例は libmysqlclient.so.18()(64bit) となります。この Provides を使用して、RPM は誤った RPM パッケージを選択することができるため、アプリケーションには要件がなくなります。
上記のように soname の前に付ける場合は、mysql の場合に、生成した Provides の例は、libmysqlclient.so.mysql55-18()(64bit) となります。この Provides では、RPM で正しい RPM 依存関係が選択され、アプリケーションの要件が適用されます。
通常、Software Collection パッケージは、ベースシステムインストールのパッケージによりすでに提供されているシンボルを提供しないようにしてください。このルールの例外の 1 つは、ベースシステムインストールのパッケージでシンボルを使用する場合です。

3.5.3. Red Hat Enterprise Linux 7 での Software Collection Library のサポート

Red Hat Enterprise Linux 7 の Software Collection を構築する場合は、%__provides_exclude_from マクロを使用して、自動的に生成される RPM シンボル用に特定のファイルをスキャンしないようにします。
たとえば、%{_libdir} ディレクトリー内の .so ファイルのスキャンを防ぐには、Software Collection の spec ファイルに、BuildRequires タグまたは Requires タグの前に以下の行を追加します。
%if %{?scl:1}%{!?scl:0}
  # Do not scan .so files in %{_libdir}
  %global __provides_exclude_from ^%{_libdir}/.*.so.*$
%endif
この機能は、自動の Provides および Requires の RPM サポートの一部です。詳細は「Software Collection の自動 Provides および Requires ならびにフィルタリングサポート」を参照してください。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.