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

既存のマップの更新

NIS のインストール終了後、頻繁に更新しなければならないマップとまったく更新する必要がないマップがあることに気づくかもしれません。 たとえば、passwd.byname マップは、大企業のネットワークで頻繁に更新されることがありますが、auto_master マップはほとんど更新されません。

デフォルトの NIS マップ で説明されているように、デフォルトの NIS マップのデフォルトの位置は、/var/yp/domainname のマスターサーバー上です。domainname は NIS ドメインの名前です。 マップを更新する必要がある場合は、マップがデフォルトのマップか否かによって 2 つの更新手順のどちらかを使用できます。

この節では、さまざまな更新ツールの使用方法について説明します。 実際にはこれらの更新ツールはシステム起動後に、デフォルトでないマップを追加する場合または一群の NIS サーバーを変更する場合にだけ使用します。

デフォルトセットに付いているマップを更新する方法

デフォルトセットに付いているマップを更新する場合は、次の手順に従います。

  1. マスターサーバー上でスーパーユーザーになります。

    必ずマスターサーバー上だけで NIS マップを更新します。

  2. 更新するマップのソースファイルを編集します (このファイルが /etc に存在しているか、選択された他のディレクトリに存在しているかは問題ではありません)。

  3. 次のように入力します。


    # cd /var/yp
    # make mapname
    

    make コマンドは、対応するファイルに対して NIS 管理者が行った変更に従ってマップを更新します。 make コマンドはまた、これらの変更を他のサーバーに伝播します。

NIS マップを伝播する

マップが更新されると、Makefileyppush を使用して新しいマップをスレーブサーバーに伝播します (ただし、NOPUSHMakefile に設定されている場合を除きます)。 これは、ypserv デーモンに通知してマップ転送要求を送ることで実行されます。 次に、スレーブサーバー上の ypserv デーモンが ypxfr プロセスを起動し、マスターサーバー上の ypxfrd デーモンに連絡します。 いくつかの基本検査 (マップが実際に更新されているかどうかの確認など) が行われてマップが転送されます。 そのあと、スレーブサーバー上の ypxfr が、転送が成功したかどうかを yppush プロセスに通知します。


注 –

上記手順は、新しく作成されたマップがスレーブサーバー上に存在しない場合は動作しません。 スレーブサーバー上で ypxfr を実行して、新しいマップをスレーブサーバーに転送する必要があります。


マップの伝播は失敗することがありますが、失敗した場合は ypxfr を使って手動で新しいマップ情報を転送する必要があります。 ypxfr は、2 つの方法で使用できます。 1 つは root の crontab ファイルを定期的に使用する方法であり、もう 1 つはコマンド行から対話形式で使用する方法です。 これらの方法については、以下で説明します。

cron を使ってマップ転送を行う

マップの更新頻度はマップによってそれぞれ異なります。 たとえば、デフォルトのマップである protocols.byname やデフォルトでないマップの auto_master など一部のマップは何ヶ月も更新されないことがありますが、passwd.byname など一部のマップは 1 日に数回更新されることがあります。 crontab コマンドでマップ転送をスケジュールすると、個々のマップに対して特定の更新時間を設定できます。

マップに適切な頻度で ypxfr を定期的に実行するには、各スレーブサーバー上の root の crontab ファイルに、該当する ypxfr エントリを入れる必要があります。 ypxfr は、マスターサーバー上のコピーがローカルのコピーより新しい場合に限り、マスターサーバーと連絡をとりマップを転送します。


注 –

デフォルトの -m オプションが指定されている rpc.yppasswdd をマスターサーバー上で実行すると、どこかで yp パスワードが変更されるたびに、passwd デーモンが make を実行して passwd マップを作成し直します。


cronypxfr でシェルスクリプトを使用する

NIS 管理者は、各マップに対する crontab エントリを個々に作成するという方法ではなく、root の crontab コマンドでシェルスクリプトを実行してすべてのマップを定期的に更新するという方法を使用することもできます。 マップ更新シェルスクリプトのサンプルは、/usr/lib/netsvc/yp ディレクトリに入っています。 スクリプト名は、ypxfr_1perdayypxfr_1perhourypxfr_2perday です。 これらのシェルスクリプトを更新または置換することによって、容易にサイト要件に適合させることができます。 例 9–1 は、デフォルトの ypxfr_1perday シェルスクリプトを示しています。


例 9–1 ypxfr_1perday シェルスクリプト


#! /bin/sh
#
# ypxfr_1perday.sh - Do daily yp map check/updates
PATH=/bin:/usr/bin:/usr/lib/netsvc/yp:$PATH
export PATH
# set -xv
ypxfr group.byname
ypxfr group.bygid
ypxfr protocols.byname
ypxfr protocols.bynumber
ypxfr networks.byname
ypxfr networks.byaddr
ypxfr services.byname
ypxfr ypservers

このシェルスクリプトは、root の crontab が毎日実行されるとマップを 1 日に 1 回更新します。 NIS 管理者は、1 週間に 1 回、1 ヶ月に 1 回、または 1 時間に 1 回などといった頻度でマップを更新するスクリプトを使用できますが、マップを頻繁に伝播するとパフォーマンスが低下するので注意してください。

NIS ドメインに対して構成された各スレーブサーバー上で同じシェルスクリプトを root で実行してください。 各サーバー上の実行時間を変更して、マスターサーバーが動作不能にならないようにしてください。

特定のスレーブサーバーからマップを転送する場合は、シェルスクリプトの ypxfr-h machine オプションを使用してください。 シェルスクリプトに記述するコマンドの構文は、次のとおりです。

# /usr/lib/netsvc/yp/ypxfr -h machine [ -c ] mapname

machine は転送するマップが存在するサーバー名です。mapname は要求されたマップ名です。 マシンを指定することなく -h オプションを指定すると、ypxfr はマスターサーバーからマップを取得しようとします。 ypxfr 実行時に ypserv がローカルに実行されていない場合は、ypxfr がローカル ypserver に現在のマップ要求の取消しを送信しないよう、-c フラグを使用してください。

-s domain オプションを使用すると、別のドメインからローカルドメインにマップを転送できます。 これらのマップは、各ドメインにおいて同じでなければなりません。 たとえば、2 つのドメインが同じ services.byname マップおよび services.byaddr マップを共有することがあります。 また、より細かい制御を行うための rcp または rdist を使用してファイルを複数のドメインに転送することもできます。

ypxfr を直接起動する

2 番目の方法である ypxfr の起動とは、ypxfr をコマンドとして実行することです。 一般に、ypxfr をコマンドとして実行するのは例外的状況においてだけです。たとえば、一時的に NIS サーバーを設定して試験環境を作成する場合や、他のサーバーと調和して動作不能になっていた NIS サーバーを迅速に取得しようとする場合などです。

ypxfr のアクティビティを記録する

ypxfr が試みた転送およびその転送結果は、ログファイルに記録されます。 /var/yp/ypxfr.log というファイルが存在する場合は、転送結果はこのファイルに記録されます。 このログファイルのサイズには制限がありません。 このログファイルのサイズが無限に大きくなることを防止するには、ときどき次のように入力してこのログファイルを空にしてください。


# cd /var/yp
# cp ypxfr.log ypxfr.log.old
# cat /dev/null > /var/yp/ypxfr.log

これらのコマンドは、crontab で 1 週間に 1 回実行させることができます。 記録を取らないようにするには、ログファイルを削除してください。

デフォルトでないマップの更新

デフォルトでないマップを更新する場合は、次の手順に従います。

  1. 対応するテキストファイルを作成または編集します。

  2. 新しいマップまたは更新されたマップを作成 (または再作成) します。 マップ作成には 2 つの方法があります。

    • Makefile を使用する方法。 デフォルトでないマップを作成するには、この方法をお勧めします。 Makefile にマップのエントリが存在する場合は、make name を実行します (name は作成するマップ名)。 Makefile にマップのエントリが存在しない場合は、Makefile の更新と使用 を参照してエントリを作成してください。

    • /usr/sbin/makedbm プログラムを使用する方法。 このコマンドの詳細については、makedbm(1M) のマニュアルページに説明されています。

デフォルトでないマップを makedbm で更新する

入力ファイルが存在しない場合は、makedbm でマップを更新する方法は 2 つあります。

テキストファイルからマップを新たに作成する

テキストファイル /var/yp/mymap.asc がマスターサーバー上のエディタまたはシェルスクリプトで作成されていると仮定します。 この場合、このファイルから NIS マップを作成し、作成された NIS マップを homedomain サブディレクトリに入れるには、 マスターサーバー上で次のように入力してください。


# cd /var/yp 
# makedbm mymap.asc homedomain/mymap

mymap マップは現在、マスターサーバーの homedomain ディレクトリに存在しています。 この新しいマップをスレーブサーバーに転送するには、ypxfr を実行してください。

ファイルをベースとしたマップにエントリを追加する

mymap にエントリを追加することは簡単です。 まず、テキストファイル /var/yp/mymap.asc を更新します。 対応するテキストファイルを更新しないで実際の dbm ファイルを更新した場合は、更新内容が失われます。 次に、上記のように makedbm を実行してください。

標準入力からマップを作成する

オリジナルのテキストファイルが存在しない場合は、キーボードから makedbm に次のように入力して NIS マップを作成します (最後に Control + D を入力します)。


ypmaster# cd /var/yp
ypmaster# makedbm - homedomain/mymapkey1 value1 key2 value2 key3 value3

標準入力から作成されたマップを更新する

後でマップを更新する必要がある場合は、makedbm でマップを分解して一時ファイルを作成できます。 マップを分解して一時ファイルを作成するには、次のように入力します。


% cd /var/yp 
% makedbm -u homedomain/mymap > mymap.temp

作成される一時ファイル mymap.temp には、1 行につき 1 つのエントリが存在します。 このファイルは、任意のテキストエディタで必要に応じて編集できます。

マップを更新するには、次のように入力して更新後の一時ファイルの名前を makedbm に指定します。


% makedbm mymap.temp homedomain/mymap
% rm mymap.temp

次に root になり、次のように入力してマップをスレーブサーバーに伝播します。


# yppush mymap

ここまでは makedbm でマップを作成する方法について説明してきましたが、実際に必要な作業はほとんど、ypinitMakefile で行うことができます。ただし、システム起動後にデフォルトでないマップをデータベースに追加したり NIS サーバーセットを変更したりしない場合に限ります。

/var/ypMakefile を使用しても他の手順を使用しても、最終目的は同じです。 正しく作成された dbm ファイルの新しいペアをマスターサーバー上の maps ディレクトリに配置しなければなりません。