Solaris のシステム管理 (ネーミングとディレクトリサービス : DNS、NIS、LDAP 編)

NIS+ データと LDAP データのマージ

NIS+ および LDAP 間でデータの衝突が発生したときは、NIS+ または LDAP データのどちらかを正式なものとして解決しなければなりません。NIS+ から LDAP への移行シナリオ では、NIS+ データと LDAP データを同期化する方法について説明しています。 データをマージするときは、ほかの方法と比べて複雑な手順が必要になります。

この節で挙げた手順では、次の点を前提としています。

NIS+ データと LDAP データをマージする方法

注意 – 注意 –

手順 4 のダウンロードデータと、手順 10 のアップロードデータが一致しない場合は、アップロードデータによって変更が上書きされます。 このため、この手順を実行しているときは、LDAP データの変更はできるだけ避けてください。 詳細については、LDAP サーバーのマニュアルを参照してください。


  1. nisbackup コマンドを使用して、すべての NIS+ データをバックアップします。

    # nisbackup -a /nisbackup

  2. LDAP とマージするデータが含まれる NIS+ テーブルを特定します。 これらのテーブルの内容をフラットファイルにダンプします。 たとえば、次のように nisaddent を使用して、group.org_dir の内容をダンプします。

    # nisaddent -d group | sort > /before/group

    パイプを使って nisaddent の出力を sort の入力として渡すと、比較処理が簡単になります。

  3. rpc.nisd デーモンを停止します。

    # pkill rpc.nisd

  4. LDAP データを NIS+ にダウンロードします。

    # /usr/sbin/rpc.nisd -D -m tmpmap \

    -x nisplusLDAPinitialUpdateAction=from_ldap \

    -x nisplusLDAPinitialUpdateOnly=yes

  5. rpc.nisd デーモンを起動します。

    # /usr/sbin/rpc.nisd

    rpc.nisd デーモンが、LDAP からダウンロードしたデータを提供するようになります。 解決を必要とする衝突を NIS+ クライアント上で発生させないようにする必要がある場合は、これ以降の手順は、ほとんどまたはすべての NIS+ クライアントが動作していないときに実行してください。

  6. 影響を受けるテーブルの NIS+ データをダンプします。

    次の例では、group.org_dir テーブルをダンプします。

    # nisaddent -d group | sort > /after/group

  7. 任意のファイルマージ手順を使用して、マージしたテーブルを作成します。 diff(1) 以外のツールを使用できない場合は、このコマンドを使用して /before ファイルと /after ファイルとの相違点を収集し、テキストエディタを使用して手動でマージすることができます。

    次の例では、マージ後のテーブルが /after に格納されていることを前提としています。

  8. マージ後のデータを NIS+ に読み込みます。 次の例では、group テーブルを読み取ります。

    # nisaddent -m -f /after/group group

  9. マージ後のテーブルから、不要な LDAP エントリを削除します。

    A . マージ後の NIS+ データ内に存在しない LDAP エントリが、アップロード後の LDAP に必要がない場合、これらの LDAP エントリは削除する必要があります。

    LDAP サーバーには、コンテナのすべてのエントリを削除する方法など、複数のエントリを削除する便利な方法が提供されていることがあります。 提供されていない場合は、ldapsearch(1) を使用して、各コンテナのエントリの一覧を生成することができます。 たとえば、ou=Rpc コンテナに含まれるすべてのエントリの一覧を生成するには、ldapsearch(1) を次のように使用します。

    # ldapsearch -h server-address -D bind-DN -w password \

    -b ou=Rpc,search-base 'objectClass=*' dn | \

    grep -i ou=Rpc | grep -v -i \^ou=Rpc > \

    /tmp/delete-dn

    メタ引数 (server-addressbind-DN など) については、パフォーマンスとインデックス処理 を参照してください。

    B. 結果ファイル (/tmp/delete-dn) を編集して、削除するエントリだけを指定します。 コンテナのすべてのエントリを削除する場合は、該当するファイルは操作しないで、NIS+ アップロードを使用して LDAP データを復元することもできます。 どちらの方法を使用する場合でも、LDAP データをバックアップしてから、次の ldapdelete 操作を実行してください。

    C. ldapdelete を使用して、LDAP エントリを削除します。stdout (通常は、削除したエントリごとに空白行が 1 行ずつ出力される) は、/dev/null にリダイレクトします。

    # ldapsearch -h server-address -D bind-DN -w password \

    /tmp/delete-dn /dev/null

    D. 削除するエントリが 1 つ以上含まれるコンテナごとに、前述の手順を繰り返します。

  10. これで NIS+ には、マージされたデータが生成されます。このデータは、LDAP にアップロードできます。 次の操作を実行します。

    rpc.nisd デーモンを停止します。

    # pkill rpc.nisd

    アップロードを実行します。

    # /usr/sbin/rpc.nisd -D -m tmpmap \

    -x nisplusLDAPinitialUpdateAction=to_ldap \

    -x nisplusLDAPinitialUpdateOnly=yes

  11. rpc.nisd デーモンを再起動します。

    • rpc.nisd デーモンが LDAP リポジトリを使用する場合は、適切なマッピングファイルを指定します。

    • rpc.nisd デーモンを NIS (YP) エミュレーションに対応させる場合は、-Y オプションを指定します。

    # /usr/sbin/rpc.nisd -m mappingfile [ -Y ]

    手順 10 のアップロードコマンドから、-x nisplusLDAPinitialUpdateOnly=yes を省略することもできます。省略した場合、アップロードが完了すると、rpc.nisd デーモンは NIS+ データの提供を開始します。