NIS+ および LDAP 間でデータの衝突が発生したときは、NIS+ または LDAP データのどちらかを正式なものとして解決しなければなりません。NIS+ から LDAP への移行シナリオ では、NIS+ データと LDAP データを同期化する方法について説明しています。データをマージするときは、ほかの方法と比べて複雑な手順が必要になります。
NIS+ データのバックアップを /nisbackup ディレクトリに作成する
有効なマッピング構成が /etc/default/rpc.nisd および /var/nis/tmpmap (テーブルをマージする場合) にすでに存在する
マージ前の NIS+ データのフラットファイル表現を /before に格納し、マージ後は /after に格納する。
niscat は、nisaddent(1M) でサポートされないカスタム NIS+ テーブルを、フラットファイル表現でダンプするときに使用する。このようなカスタムテーブルを、NIS+ からまたは NIS+ にダンプして読み込むために、独自のコマンドまたはスクリプトを作成することがある。この場合は、niscat に優先して、独自のコマンドまたはスクリプトを使用する。niscat コマンドには、フラットファイル表現のデータを NIS+ に戻す便利な方法がないためである
niscat(1) を使用してデータをダンプした場合は、nistbladm(1) を使用すれば、エントリ単位に NIS+ に戻すことができる
コマンドパスに /usr/lib/nis (nisaddent(1M) が存在する場所) を含める
手順 4 のダウンロードデータと、手順 10 のアップロードデータが一致しない場合は、アップロードデータによって変更が上書きされます。このため、この手順を実行しているときは、LDAP データの変更はできるだけ避けてください。詳細については、LDAP サーバーのマニュアルを参照してください。
nisbackup コマンドを使用して、すべての NIS+ データをバックアップします。
# nisbackup -a /nisbackup
LDAP とマージするデータが含まれる NIS+ テーブルを特定します。これらのテーブルの内容をフラットファイルにダンプします。たとえば、次のように nisaddent を使用して、group.org_dir の内容をダンプします。
# nisaddent -d group | sort> /before/group
パイプを使って nisaddent の出力を sort の入力として渡すと、比較処理が簡単になります。
rpc.nisd デーモンを停止します。
# pkill rpc.nisd
LDAP データを NIS+ にダウンロードします。
# /usr/sbin/rpc.nisd -D -m tmpmap \
-x nisplusLDAPinitialUpdateAction=from_ldap \
-x nisplusLDAPinitialUpdateOnly=yes
rpc.nisd デーモンを起動します。
# /usr/sbin/rpc.nisd
rpc.nisd デーモンが、LDAP からダウンロードしたデータを提供するようになります。解決を必要とする衝突を NIS+ クライアント上で発生させないようにする必要がある場合は、これ以降の手順は、ほとんどまたはすべての NIS+ クライアントが動作していないときに実行してください。
影響を受けるテーブルの NIS+ データをダンプします。
次の例では、 group.org_dir テーブルをダンプします。
# nisaddent -d group | sort> /after/group
任意のファイルマージ手順を使用して、マージしたテーブルを作成します。diff(1) 以外のツールを使用できない場合は、このコマンドを使用して /before ファイルと /after ファイルとの相違点を収集し、テキストエディタを使用して手動でマージすることができます。
次の例では、マージ後のテーブルが /after に格納されていることを前提としています。
マージ後のデータを NIS+ に読み込みます。次の例では、 group テーブルを読み込みます。
# nisaddent -m -f /after/group group
マージ後のテーブルから、不要な 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 つ以上含まれるコンテナごとに、前述の手順を繰り返します。
これで NIS+ には、マージされたデータが生成されます。このデータは、LDAP にアップロードできます。 次の操作を実行します。
rpc.nisd デーモンを停止します。
# pkill rpc.nisd
アップロードを実行します。
# /usr/sbin/rpc.nisd -D -m tmpmap \
-x nisplusLDAPinitialUpdateAction=to_ldap \
-x nisplusLDAPinitialUpdateOnly=yes
rpc.nisd デーモンが LDAP リポジトリを使用する場合は、適切なマッピングファイルを指定します。
rpc.nisd デーモンを NIS (YP) エミュレーションに対応させる場合は、-Y オプションを指定します。
# /usr/sbin/rpc.nisd -m mappingfile [ -Y ]
手順 10 のアップロードコマンドから、-x nisplusLDAPinitialUpdateOnly=yes を省略することもできます。省略した場合、アップロードが完了すると、rpc.nisd デーモンは NIS+ データの提供を開始します。