入力ファイルを確認して、それを入力ファイルディレクトリにコピーした後に、NIS サービスが使用する ndbm 形式のマップに、その入力ファイルを変換する必要があります。「ypinit によるマスターサーバーの設定」の節で説明するとおり、これはマスターサーバーで ypinit が実行されると自動的に行われます。
ypinit スクリプトは、プログラム make を呼び出します。このプログラムは、/var/yp ディレクトリに置かれた Makefile を使用します。例 10-1 のようなデフォルトの Makefile が、/var/yp ディレクトリで提供されます。この Makefile は、入力ファイルの ndbm 形式マップへの変換に必要なコマンドを含みます。
Makefile はそのまま使用でき、必要なら修正もできます。デフォルトの Makefile を修正するときは、将来必要な場合に備えて最初にオリジナルのデフォルト Makefile をコピーして格納してください。次の Makefile への修正のうちの 1 つまたは複数を実行する必要がある場合があります。
「デフォルトではないマップ」
デフォルトではない自分専用の入力ファイルを作成していて、それを NIS マップに変換する場合には、その入力ファイルを Makefile に追加する必要があります。
DIR
の値
「入力ファイルディレクトリ」で説明するように、/etc 以外のディレクトリに格納されたソースファイルを Makefile に使用させるには、Makefile の DIR
の値を使用するディレクトリに変更する必要があります。この値を Makefile で変更するときは、行をインデントしないでください。
PWDIR
の値
/etc 以外のディレクトリに格納された passwd、shadow、または adjunct 入力ファイルを Makefile に使用させるには、Makefile の PWDIR
の値を使用するディレクトリに変更する必要があります。この値を Makefile で変更するときは、行をインデントしないでください。
「ドメイン名リゾルバ」
現在のドメインにはないマシンに対して、NIS サーバーがドメイン名リゾルバを使用するようにするには、Makefile の行 B= をコメント化し、B= -b のコメントを解除 (有効化) します。
# "@(#)Makefile 1.15 95/05/05 SMI" # # It is somewhat confusing to note that Solaris 2.x uses # /etc/auto_master instead of the 4.x /etc/auto.master file name # because of NIS+ treating a "." in a special way. # # Set the following variable to "-b" to have NIS servers use the # domain name resolver for hosts not in the current domain. #B=-b B= DIR =/etc # # If the passwd, shadow and/or adjunct files used by rpc.yppasswdd # live in directory other than /etc then you'll need to change the # following line. # DO NOT indent the line, however, since /etc/init.d/yp attempts # to find it with grep "^PWDIR" ... # PWDIR =/etc DOM = `domainname` all: passwd group hosts ethers networks rpc services protocols ¥ netgroup bootparams aliases publickey netid netmasks c2secure ¥ timezone auto.master auto.home passwd.time: $(PWDIR)/passwd $(PWDIR)/shadow -@if [ -f $(PWDIR)/security/passwd.adjunct ]; then ¥ (nawk 'BEGIN { FS=":"; OFS=":" } /^[a-zA-Z0-9_]/¥ { $$2 = "##" $$1; printf "%s¥t%s¥n", ¥ $$1, $$0 }' $(PWDIR)/passwd $(CHKPIPE)) | ¥ $(MAKEDBM) - $(YPDBDIR)/$(DOM)/passwd.byname; ¥ (nawk 'BEGIN { FS=":"; OFS=":" } /^[a-zA-Z0-9_]/ ¥ { $$2 = "##" $$1; printf "%-10d¥t%s¥n", $$3, $$0 }'¥ $(PWDIR)/passwd $(CHKPIPE)) | ¥ $(MAKEDBM) - $(YPDBDIR)/$(DOM)/passwd.byuid; ¥ (nawk 'BEGIN { FS=":"; OFS=":"; while ( getline ¥ < "$(PWDIR)/shadow" > 0) shadow[$$1] = $$2; } /^[a-zA-Z0-9_]/ { $$2 = shadow[$$1]; ¥ printf "%-10d¥t%s¥n",$$3,$$0 }' ¥ $(PWDIR)/passwd $(CHKPIPE))| ¥ $(MAKEDBM) - $(YPDBDIR)/$(DOM)/passwd.byuid; ¥ else ¥ (awk 'BEGIN { FS=":"; OFS="¥t"; } /^[a-zA-Z0-9_]/ ¥ { print $$1, $$0 }' $(PWDIR)/passwd $(CHKPIPE))| ¥ $(MAKEDBM) - $(YPDBDIR)/$(DOM)/passwd.byname; ¥ (awk 'BEGIN { FS=":"; OFS="¥t"; } /^[a-zA-Z0-9_]/ ¥ { printf("%-10d ", $$3); print $$0 }' $(PWDIR)/passwd¥ $(CHKPIPE))| $(MAKEDBM) - $(YPDBDIR)/$(DOM)/passwd.byuid; ¥ fi @touch passwd.time; @echo "updated passwd"; @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) passwd.byname; fi @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) passwd.byuid; fi @if [ ! $(NOPUSH) ]; then echo "pushed passwd"; fi group.time: $(DIR)/group @(awk 'BEGIN { FS=":"; OFS="¥t"; } /^[a-zA-Z0-9_]/ ¥ { print $$1, $$0 }' $(DIR)/group $(CHKPIPE))| ¥ $(MAKEDBM) - $(YPDBDIR)/$(DOM)/group.byname; @(awk 'BEGIN { FS=":"; OFS="¥t"; } /^[a-zA-Z0-9_]/ ¥ { printf("%-10d ", $$3); print $$0 }' ¥ $(DIR)/group $(CHKPIPE)) | $(MAKEDBM) - ¥ $(YPDBDIR)/$(DOM)/group.bygid; @touch group.time; @echo "updated group"; @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) group.byname; fi @if [ ! $(NOPUSH) ]; then $(YPPUSH) -d $(DOM) group.bygid; fi @if [ ! $(NOPUSH) ]; then echo "pushed group"; fi. . passwd: passwd.time group: group.time hosts: hosts.time ethers: ethers.time networks: networks.time netmasks: netmasks.time timezone: timezone.time auto.master: auto.master.time auto.home: auto.home.time $(DIR)/netid: $(DIR)/timezone: $(DIR)/auto_master: $(DIR)/auto_home: $(PWDIR)/shadow: |
Makefile は、all の下にリストされるデータベースのそれぞれに対して、適切な NIS マップを作成します。データは、makedbm で処理され、mapname.dir と mapname.pag の 2 つのファイルに保存されます。この両方はマスターサーバーの /var/yp/domainname ディレクトリに置かれます。
Makefile は、/PWDIR/passwd、/PWDIR/shadow、/PWDIR/security/passwd.adjunct ファイルから passwd マップを適宜作成します。