Go to main content

マニュアルページ セクション 1: ユーザーコマンド

印刷ビューの終了

更新: 2022年7月27日
 
 

crle(1)

名前

crle - 実行時リンク環境の構成

形式

crle [-FuvV] [-64] [-a name] [-A name] [-c conf] [-e env] [-E env]
     [-l dir] [-o dir] [-s dir]

説明

crle ユーティリティーを使用すると、実行時リンク構成ファイルを作成および表示できます。構成ファイルは、プロセスの開始時に実行時リンカー ld.so.1(1) によって読み取られ、解釈されます。実行時リンカーは、全プロセスのデフォルト構成ファイルを読み取ろうとします。32 ビットプロセスの場合、デフォルトの構成ファイルは /var/ld/ld.config です。64 ビットプロセスの場合、デフォルトの構成ファイルは /var/ld/64/ld.config です。

引数が指定されていないか、–c オプションのみが指定されている場合、crle は構成情報を表示します。この情報には、構成ファイルの内容、すべてのシステムデフォルト、および構成ファイルの再生成に必要なコマンド行が含まれます。ほかのオプションとともに使用すると、新しい構成ファイルが作成または更新されます。

LD_CONFIG ファミリ環境変数のいずれかを設定して、実行時リンカーを代替構成ファイルに接続することもできます。LD_CONFIG は、32 ビットと 64 ビットの両方のプログラムに適用されます。32 ビットと 64 ビットの構成ファイルは異なるため、1 つの構成ファイルを両方のオブジェクトクラスに使用することはできません。このため、あるクラスのプログラムが別のクラスのプログラムを実行する場合、LD_CONFIG がプログラムの実行に悪影響を及ぼすことがあります。この場合、LD_CONFIG を正しく使用することはできません。したがって、プロセスの適切なクラスが正しくターゲットとして指定された LD_CONFIG_32 および LD_CONFIG_64 環境変数を使用することをお勧めします。

標準の場所である /var/ld に不正な構成ファイルを作成すると、プログラムが実行されず、それにより回復が困難になる可能性があります。この状況を避けるため、crle はライブラリディレクトリパスのサニタイズを実行します。–F オプションを参照してください。新しい構成ファイルはまず一時的な場所に作成することをお勧めします。次に、適切な LD_CONFIG 環境変数をこの新しい構成ファイルに設定します。この設定によって、実行時リンカーが、デフォルトではなく新しい構成ファイルを使用するようになります。検証が終わったら、必要に応じて新しい構成ファイルをデフォルトの場所に移動できます。いつでも環境変数 LD_NOCONFIG を任意の値に設定して、実行時リンカーに構成ファイルを無視するように指示できます。この設定は、実験を行う場合に役立ちます。

構成ファイルには次の情報を含めることができます。

デフォルト検索パス

実行時リンカーは、指定した検索パスを使って、オブジェクトの動的な依存関係を検索します。この検索パスは、LD_LIBRARY_PATH 定義のコンポーネントで始まり、その後ろにオブジェクトの runpath のコンポーネントが続きます。最後に、オブジェクトのクラスに固有のデフォルト検索パスが使用されます。検索パスの最後のコンポーネントは、構成ファイル内に記述できます。通常、この機能を使用するときは、システムデフォルトと組み合わせて機能を拡張してください。–F–l、および –u オプションを参照してください。

トラストディレクトリ

実行時リンカーは、セキュリティー保護されたアプリケーションを処理する際、LD_LIBRARY_PATH 検索および $ORIGIN トークン拡張の使用を制限します。Runtime Security in Oracle Solaris 11.4 Linkers and Libraries Guideを参照してください。また、事前に読み込まれたライブラリや監査ライブラリを検索できるディレクトリも制限されます。事前に読み込まれたライブラリや監査ライブラリに関連付けるパス名は、既知のトラストディレクトリに制限されます。トラストディレクトリは、構成ファイル内に記述できます。通常、この機能を使用するときは、システムデフォルトと組み合わせて機能を拡張してください。–F–s、および –u オプションを参照してください。

環境変数

実行時リンカーによって解釈されるすべての環境変数は、構成ファイル内で指定できます。

代替オブジェクト

共有オブジェクトの代替オブジェクトを指定して実行時に使用できます。

追加のデフォルト検索パスやトラストディレクトリを定義することは、管理者が他社のソフトウェアを 1 つの場所にインストールする場合に役立ちます。定義しない場合は、適切な runpath でコーディングされていない可能性があるアプリケーションの検索パスを変更することになります。

代替オブジェクトを宣言すると、シンボリックリンクを使用したり、LD_LIBRARY_PATH を設定したりせずに、依存関係を置き換えることができます。

実行時リンカーによって解釈される環境変数を宣言すると、すべてのアプリケーションの定義を集中管理できます。

オプション

以下のオプションがサポートされています。

–64

64 ビットオブジェクトを処理するよう指定します。デフォルトは 32 ビットです。–64 は、64 ビット固有の構成ファイルを作成する場合に使用します。

–a name

直前の –o オプションで指定された、name という名前を持つファイルに対し、name の代替パス名を作成します。代替パス名は構成ファイルに追加されます。

実際の代替ファイルは、ユーザーが準備する必要があります。このオプションは複数回指定できます。name にはファイルを指定する必要があり、ディレクトリは指定できません。

–A name

name のオプションの代替パス名を作成します。この代替パス名は構成ファイルに追加されます。

このオプションは、–a オプションと同じように動作します。ただし、実行時に代替が使用できない場合には元のオブジェクト name が使用されます。これは、補助フィルタを使用するのと同じような動作です。Generating Auxiliary Filters in Oracle Solaris 11.4 Linkers and Libraries Guideを参照してください。

–c conf

構成ファイル名 conf を使用するよう指定します。このオプションを指定しないと、デフォルトの構成フィルが使用されます。

–e env

置き換え可能な環境変数 env を指定します。このオプションが意味を持つのは、実行時リンカーに適用可能な環境変数だけです。このオプションは複数回指定できます。このオプションは、–E オプションに似ています。ただし、構成ファイル定義、および同じ名前のプロセス環境定義を実行時に解決する方法が異なります。

構成ファイル内で指定された定義は、プロセス環境定義でオーバーライドするか、または NULL 値のプロセス環境定義で抑制することができます。

つまり、これらの構成ファイル定義は、実行時にプロセス環境で置換または削除できます。

–E env

永続的な環境変数 env を指定します。このオプションが意味を持つのは、実行時リンカーに適用可能な環境変数だけです。このオプションは複数回指定できます。このオプションは、–e オプションに似ています。ただし、構成ファイル定義、および同じ名前のプロセス環境定義を実行時に解決する方法が異なります。

実行時リンカーにとって意味がある環境変数定義は、2 つのどちらかのカテゴリに分けられます。単数定義は、LD_NOLAZYLOAD=1LD_DEBUG_OUTPUT=file などの定義です。1 つまたは複数の値を取ることのできるリスト定義は、LD_LIBRARY_PATH=pathLD_DEBUG=files,details などの定義です。

構成ファイルに記述された単数定義は、プロセス環境定義よりも優先されます。構成フィルに記述されたリスト定義は、プロセス環境定義に追加されます。構成ファイル内で記述された定義を、NULL 値のプロセス環境定義で無効にすることはできません。

つまり、これらの構成ファイル定義は、実行時にプロセス環境で置換および削除できません。

–F

–l–s、および –u オプションの処理時に適用されるディレクトリパスのデフォルトのサニタイズを無効にします。指定されたすべてのディレクトリが、解釈されないでそのまま指定されたパスに追加されます。

–F オプションが指定されなかった場合、crle は、–l または –s で指定されたパスディレクトリや既存の構成ファイルから読み取られたパスディレクトリに、次の規則を適用します。これらのチェックにより、プログラムの実行を妨げる不正な構成ファイルが作成されなくなり、冗長なエントリが含まれていない最適なパスが得られます。

  • 指定されたすべてのディレクトリがチェックされ、それらのディレクトリが存在することと、別のファイルタイプではなく実際にディレクトリであることが確認されます。

  • 重複するディレクトリは破棄され、最初のインスタンスのみが維持されます。これには、シンボリックリンクが関与する場合のように、構文的には異なるが同じディレクトリに解決される重複も含まれます。

  • すべてのシステムデフォルトディレクトリが含まれていることを確認するためのチェックが実行されます。

  • システムデフォルトが提供される場合に実行時リンカー ld.so.1 が使用するのと同じ字句パスが使用されるように、システムデフォルトディレクトリへのすべての参照が必要に応じて変更されます。たとえば、パス /lib/sparcv9/lib/64 で置き換えられます。

–l dir

ELF オブジェクトの新しいデフォルト検索ディレクトリ dir を指定します。このオプションは複数回指定できます。

32 ビット ELF オブジェクトのデフォルト検索パスは順番に /lib/usr/lib です。64 ビット ELF オブジェクトのデフォルト検索パスは、順番に /lib/64/usr/lib/64 です。

このオプションを使用すると、デフォルトの検索パスが置き換えられます。このため、通常は、–l オプションを使用して、適用される新しいパスに対応する元のシステムデフォルトを指定する必要があります。ただし、–u オプションが有効で、かつ構成ファイルが存在しない場合は、システムデフォルトが新しい構成ファイルに追加されます。これらのデフォルトは、–l オプションで指定する新しいパスの前に追加されます。

–l で指定したディレクトリに適用されるディレクトリパスサニタイズの説明については、–F オプションを参照してください。

–o dir

–a または –A オプションとともに使用される場合、代替オブジェクトが存在するディレクトリ dir を指定します。このオプションは複数回指定でき、ディレクトリ dir は、以降のコマンド行オプションの代替を検索するために使用されます。

–s dir

セキュアな ELF オブジェクトの新しいトラストディレクトリ dir を指定します。このオプションは複数回指定できます。

セキュアなオブジェクトの定義については、ld.so.1(1) の「セキュリティー」を参照してください。セキュアなアプリケーションに適用される実行時制限については、Runtime Security in Oracle Solaris 11.4 Linkers and Libraries Guideを参照してください。

セキュリティー保護された 32 ビット ELF オブジェクトのデフォルトのトラストディレクトリは順番に /lib/secure/usr/lib/secure です。セキュアな 64 ビット ELF オブジェクトの場合、デフォルトのトラストディレクトリは順番に /lib/secure/64/usr/lib/secure/64 です。

このオプションを使用すると、デフォルトのトラストディレクトリが置き換えられます。このため、通常は、–l オプションを使用して、適用される新しいディレクトリに対応する元のシステムデフォルトを指定する必要があります。ただし、–u オプションが有効で、かつ構成ファイルが存在しない場合は、システムデフォルトが新しい構成ファイルに追加されます。これらのデフォルトは、–l オプションで指定する新しいディレクトリの前に追加されます。

–s で指定したディレクトリに適用されるディレクトリパスサニタイズの説明については、–F オプションを参照してください。

–u

構成ファイルの更新を要求します (通常は、新しい情報を追加して更新します) 。引数を追加すると、既存の内容に情報を追加できます。「注意事項」を参照してください。

構成ファイルが存在しない場合は、ほかの引数で指定されたとおりに構成ファイルが作成されます。–l および –s オプションの場合は、まずシステムのデフォルトがすべて構成ファイルに適用されてから、これらのオプションで指定されたディレクトリが適用されます。

構成ファイルは、現在のシステムでサポートされている形式よりも古い形式であってもかまいません。この場合、crle は更新されたファイルを現在の形式で書き込みます。結果として得られたファイルは、そのバージョンをサポートしていない古いバージョンの Oracle Solaris では読み取れません。

–u 指定時に既存の構成ファイルから読み取られたパスに適用されるディレクトリパスサニタイズの説明については、–F オプションを参照してください。–F オプションで無効化されるチェックは重要なので、後続の更新処理で –F オプションが自動的に有効化されることはありません。更新する構成ファイルの作成時に –F オプションが指定された場合、–F–u と一緒に指定しなければいけない可能性があります。

–v

詳細表示モードを指定します。

  • 構成ファイルの内容の出力時には、ディレクトリとファイルに関するより広範囲な情報が表示されます。

  • ライブラリパスの更新時には、指定されたディレクトリを結果のパスに変換するパスサニタイズの詳細を提供します。–F オプションを参照してください。

–V
–-version

バージョン情報を出力してすぐに終了します。

–?
–-help

使用法に関するメッセージを出力したあと、すぐに終了します。

デフォルトでは、実行時リンカーは、処理対象の 32 ビットアプリケーションごとに構成ファイル /var/ld/ld.config を読み取ろうとします。64 ビットアプリケーションの場合は、それぞれ /var/ld/64/ld.config が読み取られます。LD_CONFIG 環境変数を設定すると、アプリケーションから代替構成ファイルを参照できるようになります。アプリケーションの構築時に構成ファイル名をアプリケーションに記録して、代替構成ファイルを指定することもできます。ld(1)–c オプションを参照してください。

廃止されたオプション

次のオプションは Oracle Solaris の以前のバージョンでサポートされていましたが、現在は廃止と見なされています。これらのオプションを使用すると、その旨のエラーメッセージが生成されます。

–f flags
–i name
–I name
–g name
–G name

Oracle Solaris 11.4 は、構成ファイルのディレクトリキャッシュ、および dldump(3C) 機能を使用して crle で作成されたダンプオブジェクトに対するサポートを中止しました。この変更の前は、これらのオプションがディレクトリキャッシュおよびオブジェクトダンプ機能の管理に使用されていました。これらのオプションは廃止されました。同じ理由で、crle を使用してこれらの機能を含む古い構成ファイルを検査すると、その情報が廃止されたことを知らせる警告メッセージが生成されます。

–t ELF | AOUT

Oracle Solaris 11 は、SPARC ハードウェア上の SunOS 4.x AOUT 実行可能ファイルに対するサポートを中止しました。この変更の前は、–t オプションによって ELF または AOUT のオブジェクトタイプを表すための切り替えが提供され、それが以降のすべての –l または –s オプションに影響を与えました。–t オプションは廃止されました。同じ理由で、crle を使用して AOUT の情報を含む古い構成ファイルを検査すると、その情報が廃止されたことを知らせる警告メッセージが生成されます。

使用例 1 一時構成ファイルを試す

次の例では、ELF オブジェクトの新しいデフォルト検索パスを使用して一時構成ファイルを作成します。環境変数 LD_CONFIG_64 を使用して、すべての 64 ビットプロセスでこの構成ファイルを使用するよう実行時リンカーに指示します。

$ crle -64 -c /tmp/ld.config -u -l /local/lib/64
$ crle -c /tmp/ld.config

Configuration file [version 5]: /tmp/ld.config
    Platform:   64-bit MSB SPARCV9
    Default Library Path:       /lib/64:/usr/lib/64:/local/lib/64
    Trusted Directories:        /lib/secure/64:/usr/lib/secure/64  \
                                (system default)

Command line:
    crle -64 -c /tmp/ld.config -l /lib/64:/usr/lib/64:/local/lib/64

$ LD_CONFIG_64=/tmp/ld.config date
Wednesday, April 23, 2014 01:27:17 PM PDT
使用例 2 ELF オブジェクトの新しいデフォルト検索パスの更新および表示

次の例では、ELF オブジェクトの新しいデフォルト検索パスを更新して表示します。

# crle -u -l /local/lib
# crle

Configuration file [version 5]: /var/ld/ld.config
    Platform:   32-bit MSB SPARC
    Default Library Path:       /lib:/usr/lib:/local/lib
    Trusted Directories:        /lib/secure:/usr/lib/secure  \
                                (system default)

Command line:
    crle -c /var/ld/ld.config -l /lib:/usr/lib:/local/lib

# crle -u -l /ISV/lib
# crle

Configuration file [version 5]: /var/ld/ld.config
    Platform:   32-bit MSB SPARC
    Default Library Path:       /lib:/usr/lib:/local/lib:/ISV/lib
    Trusted Directories:        /lib/secure:/usr/lib/secure  \
                                (system default)

Command line:
    crle -c /var/ld/ld.config -l /lib:/usr/lib:/local/lib:/ISV/lib

この例では、最初はデフォルトの構成ファイルがありませんでした。このため、システムデフォルトに新しい検索パス /local/lib が追加されます。次の更新により、すでに構成ファイル内で確立されているこれらのパスに検索パス /ISV/lib が追加されます。

使用例 3 不正な構成ファイルを回復する

次の例では、デフォルトの場所に不正な構成ファイルを作成します。環境変数 LD_NOCONFIG を含む構成ファイルをすべて無視するよう実行時リンカーに指示することで、このファイルを削除できます。一時構成ファイルを作成し、環境変数 LD_CONFIG を使用してこれらのファイルを試すことをお勧めします。

# crle -64 -F -l /local/lib
# date
ld.so.1: date: fatal: libc.so.1: open failed:  \ 
   No such file or directory
Killed
# LD_NOCONFIG=yes rm /var/ld/64/ld.config
# date
Friday, April 14, 2017 01:27:17 PM PDT

この構成ファイルにはシステムのデフォルト検索パスが含まれていないため、date ユーティリティーは必要なシステム依存関係を見つけることができません。これは、–F オプションを指定しなければ許可されませんでした。この場合に使用しなければならないオプションは –u でした。

使用例 4 ELF オブジェクトの新しいデフォルト検索パスと新しいトラストディレクトリの作成および表示

次の例では、ELF オブジェクトの新しいデフォルト検索パスと新しいトラストディレクトリを作成して表示します。

# crle -l /local/lib -l /lib -l /usr/lib \
    -s /local/lib/secure -s /lib/secure -s /usr/lib/secure
# crle -v

Configuration file [version 5]: /var/ld/ld.config
  Platform:   32-bit MSB SPARC
  Default Library Path: /local/lib:/lib:/usr/lib
  Trusted Directories:  /local/lib/secure:/lib/secure:/usr/lib/secure

Command line:
  crle -c /var/ld/ld.config \
      -l /local/lib:/lib:/usr/lib \
      -s /local/lib/secure:/lib/secure:/usr/lib/secure

この構成ファイルを使用すると、サードパーティー製アプリケーションを /local/bin に、またそれに関連付けられている依存関係を /local/lib にインストールできます。デフォルト検索パスを使用すると、アプリケーションは LD_LIBRARY_PATH を設定しなくてもその依存関係を見つけることができます。この例では、デフォルトのトラストディレクトリも変更されています。

使用例 5 ELF 共有オブジェクトを置き換えるための代替パスの作成

次の例では、ELF 共有オブジェクトを置き換えるための代替オブジェクトパスを定義します。この例で使用するアプリケーションは、通常 /usr/local/lib/libapp.so.1 としてインストールされるオブジェクトに対して依存関係を持っています。

$ ldd /usr/local/bin/app
        libapp.so.1 =>   /usr/local/lib/libapp.so.1
        ....

# crle -c lib2.config -o /usr/local/lib2 -a /usr/local/lib/libapp.so.1
# crle -c lib2.config

Configuration file [version 5]: lib2.config
    Platform:   32-bit MSB SPARC
    Default Library Path:       /lib:/usr/lib  (system default)
    Trusted Directories:        /lib/secure:/usr/lib/secure  \
                                (system default)

Alternative Objects:
    Directory: /usr/local/lib
    Alternative: /usr/local/lib2
        libapp.so.1

Command line:
    crle -c lib2.config -o /usr/local/lib2 -a /usr/local/lib/libapp.so.1

$ LD_CONFIG=lib2.config ldd /usr/local/bin/app
        libapp.so.1 =>   /usr/local/lib2/libapp.so.1  (alternate)
    ....

この構成では、通常であれば /usr/local/lib/libapp.so.1 に解決される依存関係がすべて、代わりに /usr/local/lib2/libapp.so.1 に解決されます。

使用例 6 置換可能な環境変数および永続的な環境変数を設定する

次の例では、置換可能な環境変数と永続的な環境変数を設定します。

# crle -e LD_LIBRARY_PATH=/local/lib  \
        -E LD_PRELOAD=preload.so.1
# crle
.....
Environment Variables:
    LD_LIBRARY_PATH=/local/lib  (replaceable)
    LD_PRELOAD=preload.so.1  (permanent)

.....
$ LD_DEBUG=files LD_PRELOAD=preload.so.2 ./main
.....
18764: file=preload.so.2;  preloaded
18764: file=/local/lib/preload.so.2  [ ELF ]; \
    generating link map
.....
18764: file=preload.so.1;  preloaded
18764: file=/local/lib/preload.so.1  [ ELF ]; \
    generating link map
.....

この構成ファイルでは、置換可能な検索パスが、事前に読み込まれた永続的なオブジェクトとともに指定されており、そのオブジェクトはプロセス環境定義に追加されます。

終了ステータス

構成ファイルを作成または表示すると、0 が返されます。それ以外の場合は、どのようなエラー条件でも、診断メッセージとゼロ以外の値がともに返されます。

LD_CONFIG 環境変数はフォークされた任意のアプリケーションから見えるため、この環境変数を使用して構成ファイルを指定する場合は注意してください。

構成ファイルには、プラットフォーム固有のバイナリデータが含まれます。ある特定の構成ファイルは、ソフトウェアによって、同じマシンクラスとバイト順序でのみ解釈できます。構成ファイルには、ファイルの先頭にシステム識別情報が含まれています。この情報は、構成ファイルとの互換性を確認するために crle と実行時リンカーによって使用されます。また、この情報によって、file(1) コマンドは構成ファイルを正しく識別できます。

ファイル

/var/ld/ld.config

32 ビットアプリケーション用のデフォルトの構成ファイル。

/var/ld/64/ld.config

64 ビットアプリケーション用のデフォルトの構成ファイル。

環境変数

crle によって参照される環境変数はありません。ただし、いくつかの環境変数は、crle によって作成される構成ファイルの処理に関する実行時リンカーの動作に影響を及ぼします。

LD_CONFIG、LD_CONFIG_32、および LD_CONFIG_64

代替構成ファイルを指定します。

LD_NOCONFIG、LD_NOCONFIG_32、および LD_NOCONFIG_64

構成ファイルの処理を無効にします。

LD_NOENVCONFIG、LD_NOENVCONFIG_32、および LD_NOENVCONFIG_64

構成ファイルからの環境変数処理を無効にします。

LD_NOOBJALTER、LD_NOOBJALTER_32、および LD_NOOBJALTER_64

構成ファイルからの代替オブジェクト処理を無効にします。

属性

次の属性については、attributes(7) を参照してください。

属性タイプ
属性値
使用条件
system/linker
インタフェースの安定性
確実

関連項目

file(1), ld(1), ld.so.1(1), dldump(3C), tempnam(3C), attributes(7)

OracleSolaris 11.4 リンカーとライブラリガイド