Oracle Solaris Cluster リファレンスマニュアル

印刷ビューの終了

更新: 2015 年 9 月
 
 

libschost.so.1 (1)

名前

libschost.so.1 - 物理ホスト名の代わりに論理ホスト名を提供する共有オブジェクト

形式

libschost.so.1

説明

libschost.so.1 共有オブジェクトが提供する機能を使用すると、起動対象プロセスおよびその子孫に対して物理ホスト名を選択的に構成できます。

Oracle Solaris Cluster 環境では、アプリケーションはフェイルオーバーまたはスイッチオーバー後、同一ホスト名へのアクセスを試みることがあります。このフェイルオーバーまたはスイッチオーバーは、フェイルオーバーまたはスイッチオーバー後、物理ホスト名が変更されているため失敗します。そのような場合、アプリケーションデータサービスは libschost.so.1 共有オブジェクトを使用すると、物理ホスト名の代わりに論理ホスト名をアプリケーションに提供できます。

libschost.so.1 を有効にするには、SC_LHOSTNAME 環境変数のほかに次の 2 つの環境変数も設定する必要があります。

LD_PRELOAD_32=$LD_PRELOAD_32:/usr/cluster/lib/libschost.so.1
LD_PRELOAD_64=$LD_PRELOAD_64:/usr/cluster/lib/64/libschost.so.1

LD_PRELOAD_32LD_PRELOAD_64 の両方の環境変数を設定することによって、libschost.so.1 共有オブジェクトが、確実に 32 ビットアプリケーションと 64 ビットアプリケーションの両方で動作するようになります。

セキュリティー

実行時リンカーは、32 ビットオブジェクトの場合は /usr/lib/secure、64 ビットオブジェクトの場合は /usr/lib/secure/64 というデフォルトの信頼できるディレクトリにアクセスします。セキュリティ保護されたアプリケーションで libschost.so.1 共有オブジェクトを使用する場合は、libschost.so.1 共有オブジェクトに信頼できるディレクトリからアクセスする必要があります。

それを行うには、32 ビットアプリケーションの場合は /usr/cluster/lib/libschost.so.1 から /usr/lib/secure/libschost.so.1 へのシンボリックリンク、64 ビットアプリケーションの場合は /usr/cluster/lib/64/libschost.so.1 から /usr/lib/secure/64/libschost.so.1 へのシンボリックリンクを作成します。

これらのシンボリックリンクを作成したあと、LD_PRELOAD_32 および LD_PRELOAD_64 環境変数では、信頼できるディレクトリの libschost.so.1 共有オブジェクトが使用されます。

また、crle コマンドを使用して、セキュリティ保護されたアプリケーションの信頼できるディレクトリを追加したり変更したりすることもできます。crle(1) のマニュアルページを参照してください。

環境変数

プリロードが終わったら、libschost.so.1 共有オブジェクトは次の環境変数を読み、それをホスト名として返します。

SC_LHOSTNAME=hostname

SC_LHOSTNAMEでは、論理ホスト名を指定します。指定したホスト名は、起動対象および子孫のすべてのプロセスで利用できます。

hostname 値は、MAXHOSTNAMELEN の文字数以下とすることができます。定数 MAXHOSTNAMELEN は、netdb.h ヘッダーファイル内で 256 文字として定義されています。

使用例 1 C の実行時における論理ホスト名の構成

次の例の C コードでは、論理ホスト名を使用してホスト名を構成しています。この例には、Oracle Solaris Cluster 関数 scds_get_rs_hostnames() に対する呼び出しと Oracle Solaris Cluster データ構造 scds_handle_t および scds_net_resource_list_t に対する参照が含まれています。

scds_get_rs_hostnames() 関数は、リソースによって使用されるホスト名のリストを提供します。このコードは、このリスト内の先頭のホスト名の値を環境変数 SC_LHOSTNAME に割り当てます。

次のコードの実行後に起動されるアプリケーションは、物理ホスト名ではなく論理ホスト名を取得します。

    /* 13 bytes to hold "SC_LHOSTNAME=" string */
    #define HOSTLENGTH (MAXHOSTNAMELEN + 13)

    /* 14 bytes to hold "LD_PRELOAD_XX=" string */
    #define PATHLENGTH (MAXPATHLEN + 14)

    char lhostname[HOSTLENGTH], ld_32[PATHLENGTH], \
         ld_64[PATHLENGTH];

    scds_get_rs_hostnames(scds_handle, &snrlp);
    if (snrlp != NULL && snrlp->num_netresources != 0) {
        snprintf(lhostname, HOSTLENGTH, "SC_LHOSTNAME=%s", \
            snrlp->netresources[0].hostnames[0]);
        putenv(lhostname);
    }

    /* Setting LD_PRELOAD_32 environment variable */
    if (getenv("LD_PRELOAD_32") == NULL)
        snprintf(ld_32, PATHLENGTH, "LD_PRELOAD_32="
            "/usr/cluster/lib/libschost.so.1");
    else
        snprintf(ld_32, PATHLENGTH, "LD_PRELOAD_32=%s:"
            "/usr/cluster/lib/libschost.so.1", \
             getenv("LD_PRELOAD_32"));

    putenv(ld_32);

    /* Setting LD_PRELOAD_64 environment variable */
    if (getenv("LD_PRELOAD_64") == NULL)
        snprintf(ld_64, PATHLENGTH, "LD_PRELOAD_64="
            "/usr/cluster/lib/64/libschost.so.1");
    else
        snprintf(ld_64, PATHLENGTH, 
            "LD_PRELOAD_64=%s:/usr/cluster/lib/"
            "64/libschost.so.1", getenv("LD_PRELOAD_64"));

    putenv(ld_64);
使用例 2 シェルコマンドによる実行時の論理ホスト名の構成

次の例のシェルコマンドでは、gethostnames コマンドを使用し論理ホスト名によってホスト名をアプリケーションデータサービスで構成する方法を示しています。gethostnames コマンドは次の引数を取ります。

  • –R resource-name

  • –G resourcegroup-name

  • –T resourcetype-name

gethostnames コマンドは、該当するリソースと関連付けられているすべての論理ホスト名をセミコロン (;) で区切って返します。このコマンドは、このリスト内の先頭のホスト名の値を環境変数 SC_LHOSTNAME に割り当てます。

phys-schost-1$ LD_PRELOAD_32=$LD_PRELOAD_32:/usr/cluster/lib/libschost.so.1
phys-schost-1$ LD_PRELOAD_64=$LD_PRELOAD_64:/usr/cluster/lib/64/libschost.so.1
phys-schost-1$ SC_LHOSTNAME=`/usr/cluster/lib/scdsbuilder/src/scripts/gethostnames \
               -R nfs-r -G nfs-rg -T SUNW.nfs:3.1 |cut -f1 -d","`
phys-schost-1$ export LD_PRELOAD_32 LD_PRELOAD_64 SC_LHOSTNAME
使用例 3 シェルコマンドによるセキュリティ保護されたアプリケーションの論理ホスト名の構成

次の例のシェルコマンドでは、論理ホスト名を構成しています。次のシェルコマンドの実行後に起動されるセキュリティ保護されたアプリケーションはすべて、物理ホスト名ではなく環境変数 SC_LHOSTNAME の値 (つまり、論理ホスト名) を取得します。

phys-schost-1$ cd /usr/lib/secure
phys-schost-1$ ln -s /usr/cluster/lib/libschost.so.1 .
phys-schost-1$ cd /usr/lib/secure/64
phys-schost-1$ ln -s /usr/cluster/lib/64/libschost.so.1 .
phys-schost-1$ LD_PRELOAD_32=$LD_PRELOAD_32:/usr/lib/secure/libschost.so.1
phys-schost-1$ LD_PRELOAD_64=$LD_PRELOAD_64:/usr/lib/secure/64/libschost.so.1
phys-schost-1$ SC_LHOSTNAME=test
phys-schost-1$ export LD_PRELOAD_32 LD_PRELOAD_64 SC_LHOSTNAME

ファイル

/usr/cluster/lib/libschost.so.1

32 ビットアプリケーション用共有オブジェクトのデフォルトの格納先

/usr/cluster/lib/64/libschost.so.1

64 ビットアプリケーション用共有オブジェクトのデフォルトの格納先

属性

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

属性タイプ
属性値
使用条件
ha-cluster/developer/api
インタフェースの安定性
発展中

関連項目

crle(1), cut(1), hostname(1), ld(1), ld.so.1(1), proc(1), uname(1), exec(2), sysinfo(2), uname(2), gethostname(3C), putenv(3C), snprintf(3C), system(3C), proc(4)

論理ホスト名が継承されます。

次のコマンドまたは関数を呼び出してホスト名を取得するユーザープログラムは、物理ホスト名ではなく論理ホスト名を取得できます。

  • hostname コマンド

  • uname command

  • uname() function

  • sysinfo() 関数

  • gethostname() 関数

他のコマンドまたは関数によってホスト名を取得するユーザープログラムは、論理ホスト名を取得することができません。