NIS のインストール終了後、頻繁に更新しなければならないマップとまったく更新する必要がないマップがあることに気づくかもしれません。たとえば、passwd.byname マップは、大企業のネットワークで頻繁に更新されることがありますが、auto_master マップはほとんど更新されません。
「デフォルトの NIS マップ」で説明されているように、デフォルトの NIS マップのデフォルトの位置は、/var/yp/domainname のマスターサーバー上です。domainname は NIS ドメインの名前です。マップを更新する必要がある場合は、マップがデフォルトのマップか否かによって 2 つの更新手順のどちらかを使用できます。
この節では、さまざまな更新ツールの使用方法について説明します。実際にはこれらの更新ツールはシステム起動後に、デフォルトでないマップを追加する場合または一群の NIS サーバーを変更する場合にだけ使用します。
デフォルトセットに付いているマップを更新する場合は、次の手順に従います。
マスターサーバー上でスーパーユーザーになります。
必ずマスターサーバー上だけで NIS マップを更新します。
更新するマップのソースファイルを編集します (このファイルが /etc に存在しているか、選択されたほかのディレクトリに存在しているかは問題ではありません)。
次のように入力します。
# cd /var/yp # make mapname |
make コマンドは、対応するファイルに対して NIS 管理者が行った変更に従ってマップを更新します。make コマンドはまた、これらの変更をほかのサーバーに伝播します。
以降の節では、デフォルトセットで提供されているマップの更新完了後に実行する手順について説明します。
マップが更新されると、Makefile は yppush を使用して新しいマップをスレーブサーバーに伝播します (ただし、NOPUSH
が Makefile に設定されている場合を除く)。これは、ypserv デーモンに通知してマップ転送要求を送ることで実行されます。次に、スレーブサーバー上の ypserv デーモンが ypxfr プロセスを起動し、マスターサーバー上の ypxfrd デーモンに連絡します。いくつかの基本検査 (マップが実際に更新されているかどうかの確認など) が行われてマップが転送されます。そのあと、スレーブサーバー上の ypxfr が、転送が成功したかどうかを yppush プロセスに通知します。
上記手順は、新しく作成されたマップがスレーブサーバー上に存在しない場合は動作しません。スレーブサーバー上で ypxfr を実行して、新しいマップをスレーブサーバーに転送する必要があります。
マップの伝播は失敗することがありますが、失敗した場合は ypxfr を使って手動で新しいマップ情報を転送する必要があります。ypxfr は、2 つの方法で使用できます。 1 つは root の crontab ファイルを定期的に使用する方法であり、もう 1 つはコマンド行から対話形式で使用する方法です。これらの方法については、以降の節で説明します。
マップの更新頻度はマップによってそれぞれ異なります。たとえば、デフォルトのマップである protocols.byname やデフォルトでないマップの auto_master など一部のマップは何ヶ月も更新されないことがありますが、passwd.byname など一部のマップは 1 日に数回更新されることがあります。crontab コマンドでマップ転送をスケジュールすると、個々のマップに対して特定の更新時間を設定できます。
マップに適切な頻度で ypxfr を定期的に実行するには、各スレーブサーバー上の root の crontab ファイルに、該当する ypxfr エントリを入れる必要があります。ypxfr は、マスターサーバー上のコピーがローカルのコピーより新しい場合に限り、マスターサーバーと連絡をとりマップを転送します。
デフォルトの m オプションが指定されている -rpc.yppasswdd をマスターサーバー上で実行すると、どこかで yp パスワードが変更されるたびに、 passwd デーモンが make を実行して passwd マップを作成し直します。
NIS 管理者は、各マップに対する crontab エントリを個々に作成するという方法ではなく、root の crontab コマンドでシェルスクリプトを実行してすべてのマップを定期的に更新するという方法を使用することもできます。マップ更新シェルスクリプトのサンプルは、/usr/lib/netsvc/yp ディレクトリに入っています。スクリプト名は、ypxfr_1perday、ypxfr_1perhour、ypxfr_2perday です。これらのシェルスクリプトを更新または置換することによって、容易にサイト要件に適合させることができます。例 6–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 を使用してファイルを複数のドメインに転送することもできます。
2 番目の方法である ypxfr の起動とは、ypxfr をコマンドとして実行することです。一般に、ypxfr をコマンドとして実行するのは例外的状況においてだけです。たとえば、一時的に NIS サーバーを設定して試験環境を作成する場合や、動作不能になっていた NIS サーバーをほかのサーバーと迅速に整合させようとする場合などです。
ypxfr が試みた転送およびその転送結果は、ログファイルに記録されます。/var/yp/ypxfr.log というファイルが存在する場合は、転送結果はこのファイルに記録されます。このログファイルのサイズには制限がありません。このログファイルのサイズが無限に大きくなることを防止するには、ときどき次のように入力してこのログファイルを空にしてください。
# cd /var/yp # cp ypxfr.log ypxfr.log.old # cat /dev/null > /var/yp/ypxfr.log |
これらのコマンドは、crontab で 1 週間に 1 回実行させることができます。記録を取らないようにするには、ログファイルを削除してください。
デフォルトでないマップを更新する場合は、次の手順に従います。
対応するテキストファイルを作成または編集します。
新しいマップまたは更新されたマップを作成 (または再作成) します。マップ作成には 2 つの方法があります。
Makefile を使用する方法。デフォルトでないマップを作成するには、この方法をお勧めします。Makefile にマップのエントリが存在する場合は、make name を実行します (name は作成するマップ名)。Makefile にマップのエントリが存在しない場合は、「Makefile の更新と使用」を参照してエントリを作成してください。
/usr/sbin/makedbm プログラムを使用する方法。このコマンドの詳細については、makedbm(1M) のマニュアルページに説明されています。
入力ファイルが存在しない場合は、makedbm でマップを更新する方法は 2 つあります。
makedbm -u の出力先を一時ファイルに変更し、一時ファイルを更新して更新済みの一時ファイルを makedbm の入力として使用します。
makedbm -u の出力を makedbm に渡されるパイプライン内で動作させます。分解されたマップを awk、sed、または cat で更新できる場合は、この方法をお勧めします。
テキストファイル /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 でマップを作成する方法について説明してきましたが、実際に必要な作業はほとんど、ypinit と Makefile で行うことができます。ただし、システム起動後にデフォルトでないマップをデータベースに追加したり NIS サーバーセットを変更したりしない場合に限ります。
/var/yp の Makefile を使用してもほかの手順を使用しても、最終目的は同じです。正しく作成された dbm ファイルの新しいペアをマスターサーバー上の maps ディレクトリに配置しなければなりません。