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

NIS マップに関する作業

マップ情報の取得

マップ情報は、ypcatypwhichypmatch コマンドを使っていつでも取得できます。以下の例では、mapname はマップの正式名とニックネーム(存在する場合)の両方を意味します。

マップのすべての値を表示するには、次のように入力します。

% ypcat mapname

マップのキーと値 (存在する場合) の両方を表示するには、次のように入力します。

% ypcat -k mapname

マップのすべてのニックネームを表示するには、次のいずれかのコマンドを入力します。

% ypcat -x

% ypwhich -x

% ypmatch -x

使用可能なすべてのマップとそのマスターサーバーを表示するには、次のように入力します。

% ypwhich -m

特定のマップのマスターサーバーを表示するには、次のように入力します。

% ypwhich -m mapname

キーをマップのエントリと照合するには、次のように入力します。

% ypmatch key mapname

key は照合する文字列です。検索している項目がマップのキーでない場合は、次のように入力します。

% ypcat mapname | grep item

item は検索している情報です。他のドメインに関する情報を取得するには、これらのコマンドの -d domainname オプションを指定します。

デフォルト以外のドメインの情報を要求するマシンが、そのドメインに対するバインドを持っていない場合、ypbind/var/yp/binding/domainname/ypservers ファイルを参照して、そのドメインのサーバーリストを検索します。このファイルが存在しない場合、ypbind は RPC 同報通信を送出してサーバーを検索します。この場合、検索先であるドメインのサーバーは要求元マシンと同じサブネットに存在している必要があります。

マップのマスターサーバーの変更

選択されたマップのマスターサーバーを変更するには、まず新しい NIS マスターサーバー上にマップを作成しなければなりません。古いマスターサーバー名は既存のマップにキーと値のペアとして発生するので (このペアは makedbm で自動的に挿入される)、ypxfr でマップを新しいマスターサーバーにコピーしたり、コピーを新しいマスターサーバーに転送するだけでは不十分です。キーと新しいマスターサーバー名との対応づけをし直す必要があります。マップに ASCII ソースファイルが存在する場合は、このファイルを新しいマスターサーバーにコピーします。

マップのマスターサーバーを変更する方法
  1. スーパーユーザーになります。

  2. 新しいマスターサーバーにスーパユーザーとしてログインして、次のように入力します。

    newmaster# cd /var/yp

  3. 作成するマップを指定する前に、Makefile にこの新しいマップのエントリが必要です。新しいマップのエントリがない場合は、最初に、sites.byname というマップを使用して Makefile を編集します。

  4. マップを更新または再作成するには、次のように入力します。

    newmaster# make sites.byname

  5. 古いマスターサーバーが NIS サーバーとして残っている場合は、古いマスターサーバーに遠隔ログイン (rlogin) してから、Makefile を編集します。sites.byname を作成した Makefile 内のセクションをコメントアウトして、このセクションで sites.byname が再び作成されないようにします。

  6. sites.byname だけが ndbm ファイルとして存在している場合は、新しいマスターサーバー上に作成し直します。まず任意の NIS サーバーからコピーを分解し、次に makedbm を使ってそれを実行します。

    newmaster# cd /var/yp

    newmaster# ypcat sites.byname | makedbm -domain /sites.byname

    新しいマスターサーバー上でマップが作成されたら、そのコピーをこのマスターサーバーのスレーブサーバーに送信します。この場合、yppush を使用しないでください。yppush を使用すると、スレーブサーバーは新しいマスターサーバーからではなく古いマスターサーバーから新しいコピーを取得します。このような動作を回避するには、一般にマップのコピーを新しいマスターサーバーから古いマスターサーバーに送り返すという方法が用いられます。この操作を行うには、古いマスターサーバーでスーパユーザーとなり次のように入力します。

    oldmaster# /usr/lib/netsvc/yp/ypxfr -h newmaster sites.byname

    これで yppush を使用できます。スレーブサーバーは古いマスターサーバーを現行のマスターサーバーとして認識しているので、マップの現行バージョンを古いマスターサーバーから取得しようとします。クライアントがこの処理を行うときは、新しいマスターサーバーが現行のマスターサーバーとして指定されている新しいマップを取得します。

    この方法が失敗した場合は、各 NIS サーバーの root としてログインして上記の ypxfr コマンドを実行してください。

構成ファイルの更新

NIS は設定ファイルを正確に構文解析します。このため NIS 管理は容易になりますが、設定ファイルおよび構成ファイルにおける変更により、NIS の動作は影響を受けます。

以下のファイルを変更する場合は、この節の手順を使用します。

構成ファイルを更新する方法
  1. スーパーユーザーになります。

  2. NIS サーバーを停止します。

    # /etc/init.d/ypstop

  3. 必要に応じてファイルを変更します。

  4. NIS サーバーを再起動します。

    # /etc/init.d/yp start

NIS のマップまたはマップソースファイルを更新する場合は、NIS を停止および起動する必要はありません。

次の点に注意してください。

Makefile の更新と使用

/var/yp で提供されたデフォルトの Makefile を更新することにより、NIS 管理者のニーズを満たすことができます。今後に備えて、必ずこのオリジナルの Makefile のコピーを保存しておいてください。Makefile を使用すると、マップの追加または削除、および一部のディレクトリ名の変更ができます。

新しい NIS マップを追加するには、マップの ndbm ファイルのコピーをドメインに存在する各 NIS サーバーの /var/yp/domainname ディレクトリに転送する必要があります。この転送は通常、Makefile が自動的に行います。どの NIS サーバーがマップのマスターサーバーであるかを決定したら、マップを容易に作成し直せるようにマスターサーバーの Makefile を更新してください。異なるサーバーを異なるマップのマスターサーバーとして設定することも可能ですが、このようにするとたいていの場合、管理上の混乱を招きます。したがって、1 つのサーバーだけをすべてのマップのマスターサーバーとして設定するようにしてください。

一般に、人が読めるテキストファイルは、makedbm に対する入力として適したものにするために awksedgrep でフィルタリングされます。デフォルトの Makefile を参照してください。make コマンドの概要については、make(1S) のマニュアル ページを参照してください。

make が認識する従属性の作成方法を決定する際には、Makefile にすでに備わっているメカニズムを使用してください。make では、従属ルール内の行の始まりにタブが存在するか否かが重要であることに注意してください。他の設定が正しくても、タブが存在しないというだけでエントリが無効になることがあります。

Makefile にエントリを追加する場合は、次の作業を行ってください。

たとえば、Makefile をオートマウンタ入力ファイルで動作させるには、auto_direct.time および auto_home.time マップを NIS データベースに追加してください。

NIS データベースにこれらのマップを追加する場合は、次の手順に従います。

Makefile を更新する方法
  1. スーパーユーザーとしてログインします。

  2. all という語で始まる行に、追加したいデータベース名 (1 つまたは複数) を追加します。


    all: passwd group hosts ethers networks rpc services protocols \
    netgroup bootparams aliases netid netmasks \
    auto_direct auto_home auto_direct.time auto_home.time

    エントリの順序は任意ですが、継続行の始まりの空白はスペースではなくタブにしてください。

  3. Makefile の終わりに以下の行を追加します。


    auto_direct: auto_direct.time
    auto_home: auto_home.time 
  4. ファイル中央に auto_direct.time エントリを追加します。


    auto_direct.time: $(DIR)/auto_direct
     @(while read L; do echo $$L; done < $(DIR)/auto_direct
     $(CHKPIPE)) | \ (sed -e "/^#/d" -e "s/#.*$$//" -e "/^ *$$/d"
     $(CHKPIPE)) | \ $(MAKEDBM) - $(YPDBDIR)/$(DOM)/auto_direct;
     @touch auto_direct.time;
     @echo "updated auto_direct";
     @if [ ! $(NOPUSH) ]; then $(YPPUSH) auto_direct; fi
     @if [ ! $(NOPUSH) ]; then echo "pushed auto_direct"; fi

    次に、各引数について説明します。

    • CHKPIPE は、次のコマンドに結果を渡す (パイピングする) 前に、パイプ (|) の左側の動作が正しく行われたことを確認します。パイプの左側の動作が正しく行われなかった場合は、「NIS make terminated」というメッセージが表示されてプロセスは終了します。

    • NOPUSH は、Makefileyppush を呼び出して新しいマップをスレーブサーバーに転送することを防止します。NOPUSH が設定されていない場合は、転送は自動的に行われます。

    継続行の始まりにある while ループは、バックスラッシュで拡張された行を入力ファイルから削除するためのものです。sed スクリプトはコメント行と空行を削除します。

    他のすべてのオートマウンタマップ (auto_home や他のデフォルトでないマップなど) でも、同じ手順が必要となります。

  5. make を実行します。

    # make mapname

    mapname は、作成するマップの名前です。

Makefile に特定データベースのマップを作成しない場合は、Makefile を以下のように編集してください。

  1. all ルールからデータベース名を削除します。

  2. 削除するデータベースのデータベースルールを削除またはコメントアウトします。

    たとえば、hosts データベースを削除するには、hosts.time エントリを削除します。

  3. time ルールを削除します。

    たとえば、hosts データベースを削除するには、hosts: hosts.time エントリを削除します。

  4. マスターサーバーとスレーブサーバーからマップを削除します。

Makefile のマクロおよび変数の変更

Makefile の先頭で定義されている変数の設定値を変更するには、等号 (=) の右側の値を変更します。たとえばマップを作成するための入力として、/etc に存在するファイルではなく別のディレクトリに存在するファイル (たとえば /var/etc/domainname など) を使用する場合は、DIRDIR=/etc から DIR=/var/etc/domainname に変更します。また、PWDIR PWDIR=/etc から PWDIR=/var/etc/domainname に変更します。

変数は次のとおりです。