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

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

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

  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 回実行させることができます。 記録を取らないようにするには、ログファイルを削除してください。