11. NIS マップの生成と更新

11.1. NIS マップの生成

最初の NIS マップは、次のコマンドを実行して生成します。

% /usr/lib/yp/ypinit -m

これは NIS マスターサーバをはじめて設定したときに行います。 これに関する詳細は Section 9 を見てください。 サーバに新しいマップを追加したり、古いマップを削除したりしたい場合は、 /var/yp/Makefile を編集して all: ルールを変更します。 マップを生成するルールの名前をここに追加・削除します。

マップを削除する場合は、対応する実際のファイルも削除しなければなりません。

この変更を行ったら、

% make -C /var/yp

を実行すればマップが生成されるはずです。

11.2. NIS マップを更新する

NIS マップのソースを変更したら (例えば新しいユーザのアカウントを passwd ファイルに追加した場合など)、 NIS マップを再生成する必要があります。 単に次のコマンドを実行するだけです。

% make -C /var/yp

このコマンドはどのソースが変更されたかを調べ、 新しいマップを生成し、ypserv にマップが変更されたことを伝えます。

11.3. マップのエントリの長さ

NIS プロトコルでは、ひとつのエントリの長さは 1024 文字までに制限されています。 この値を単純に増やして再コンパイルすることは出来ません。 NIS v2 を使っているシステムはすべて、 キーとデータの値が 1024 バイト以下のサイズに収まることを想定しているためです。 自分の管理しているクライアントとサーバで 突然 YPMAXRECORD を増やすと、 ネットワークで NIS を利用している他のマシンとの 相互運用性を損なうことになります。 正しく動作させるには、NIS をサポートしているすべてのベンダのところにいって、 同時に変更を行わせる必要があります。 まずこんなことは無理でしょう。

glibc 2.1 以降では、この制限は glibc の NIS 実装からは無くなっています。 従って Linux では、より長いエントリを利用できます。 しかしこれは上記の通り、 ネットワークに他の NIS クライアントやサーバが無い場合に限ります。

長いエントリの NIS マップを生成するには、 /var/yp/Makefilemakedbm を呼ぶ際に、 --no-limit-check オプションを追加するようにします。

以下のような感じになります:

DBLOAD = $(YPBINDIR)/makedbm -c -m `$(YPBINDIR)/yphelper --hostname` --no-limit-check

警告: この変更は NIS プロトコルに反しています。 Linux 自身はサポートしているとはいえ、 Linux 上で動作するアプリケーションが、 この変更後に動作するかどうかはわかりません!

/etc/group エントリの場合には、 この問題を回避するための別法があります。 このアイディアは Ken Cameron から寄せられました。

1. エントリを複数の行に分け、各グループの名前をちょっとずつ
   変えます。

2. この各グループの GID は全部同じにします。

3. 最初のエントリには、正しいグループ名と GID を与えます。
   私はここにはユーザ名は置かないようにしています。

この結果、プログラムがこのマップを読むと、指定したユーザ名に対して
GID が帰ります。次に GID にマッチする最初のエントリを見つけると、
その名前を返して停止します。美しくはありませんが、動作します!