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

ProcedureNIS+ データと 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. LDAP データを NIS+ にダウンロードします。


    # /usr/sbin/rpc.nisd -D -m tmpmap \
    -x nisplusLDAPinitialUpdateAction=from_ldap \
    -x nisplusLDAPinitialUpdateOnly=yes
    
  4. NIS+ サービスを開始します。


    # svcadm enable network/rpc/nisplus:default
    

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

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

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


    # nisaddent -d group | sort > /after/group
    
  6. マージしたテーブルを作成します。

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

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

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


    # nisaddent -m -f /after/group group
    
  8. マージ後のテーブルから、不要な 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-address bind-DN など) については、「パフォーマンスとインデックス処理」を参照してください。

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

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


    # ldapdelete -h server-address -D bind-DN -w password \
    /tmp/delete-dn /dev/null
    

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