#author("2021-09-13T17:54:58+09:00","","")
* PBSProのためのRHEL3のネットワーク設定 [#t3471ef2]
PBSProを使うためのネットワークの設定を行なう。PBSの構成は、1台のキューサーバと複数台の計算ノードである。

**内容 [#ife94391]
#contents


**NFSによる共有ディスク [#eb2a0aef]
キューサーバのディスクをNFSにより共有ディスクとして、各計算ノードに共有マウントして作業をすすめる。

***NFSサーバ(PBSキューサーバ) [#g17a00a9]
NFSサーバ側では、クライアントのrootがフルアクセスできる設定の次のような行を/etc/exportsに追加する。
 /ds300 192.168.1.0/28(rw,no_root_squash,sync)

**NFSマウント(PBS計算ノード) [#vd6a469d]
一般的には、NFSクライアント側では/etc/fstabに、
 192.168.1.1:/ds300  /ds300    nfs  soft  1 2
の行を追加し、
 # mount /ds300
を実行して共有ディスクをマウントするが、ここでは、起動時の同期に失敗したときのことを考慮して、オンデマンドでマウントができる自動マウント(automount)を使う。

***AutoFS(automount)の設定 [#ebb433be]
RHELの自動マウントは autofs で行なう。下記のように、automountのための設定を行い、autofsに起動をかける。

次の記述を /etc/autofs.master に追加。
 /misc  /etc/auto.misc  --timeout=60
(※ /misc は空のディレクトリ。そのかわりに / など既存のディレクトリは指定すると、ファイルシステムを破壊するおそれがある。)

次の記述を /etc/auto.misc に追加。
 ds300          -fstype=nfs,rw,soft,intr        192.168.1.1:/ds300

autofs を有効にし、automountデーモンを起動する。
 # /sbin/chkconfig autofs on
 # /sbin/chkconfig --list autofs
 # /etc/init.d/autofs start

この設定により、共有ディスクは /misc/ds300 にアクセスしたときに自動マウントされるようになるので、/etc/fstabのNFSマウントの記述はコメントアウトして、
 #192.168.1.1:/ds300  /ds300    nfs  soft  1 2
すでにNFSマウントしてあった場合は、そのマウントをはずしておく。
 # umount /ds300


**アドレス解決のためのhostsファイルを設置 [#l5a1c636]
キューサーバ(NFSサーバ)側では、/etc/hosts ファイルに各ノードのエントリを追加し、共有ディスクにコピーする。
>/ds300/etc/hosts:
 127.0.0.1       localhost.localdomain   localhost
 192.168.1.1     snoopy
 192.168.1.2     spike
 192.168.1.3     woodstock
 192.168.1.4     lucy
 192.168.1.5     linus

計算ノード側(NFSクライアント)では、キューサーバ側ディスクにあるhostsファイルをコピーする。

 # cp -p /misc/ds300/etc/hosts /etc/hosts


**SSHのフレーズ入力無しアクセスの設定 [#k2089d71]
キューサーバ上で、次のコマンドでSSHの認証のためのキーを生成し、パブリックキーを共有ディスクにコピーする。(プライベートキー id_dsaファイルはそのまま残しておく。)コピー先のファイル名は authorized_keys にする。

 # ssh-keygen -t dsa
 # cp ~/.ssh/id_dsa.pub /misc/ds300/ssh/authorized_keys

自分自身のアドレスとホスト名SSHでリモートログインしてみる。

 # slogin snoopy
 ...
 Are you sure you want to continue connecting (yes/no)? yes
 ...
 # exit

続いて、同じように計算ノードとなるすべてのマシンにSSHリモートログインを繰返し(リモートログイン先で、ついでに以下の作業を行なうとよい)、それぞれのエントリがknown_hostsに追加されるので、最後にこれを共有ディスクにコピーする。

 # cp ~/.ssh/known_hosts /misc/ds300/ssh/known_hosts

>各マシンにログインしている間に、マシン毎に鍵を生成し、共有ディスクの authorized_keys に追記する。
 # cd ~/.ssh
 # ssh-keygen -t dsa
 # cat id_dsa.pub >> /ds300/ssh/authorized_keys

すべての計算ノードでひととおり上記作業を終えたら、各計算ノードの .ssh ディレクトリに authorized_keys と known_hosts をコピーする。
 # cp -p /misc/ds300/ssh/authorized_keys ~/.ssh/
 # cp -p /misc/ds300/ssh/known_hosts ~/.ssh/

この時点で、パスフレーズ無しでのSSHリモートログインが相互で可能になったはずである。


**時刻同期をとるためのTIMEサービスの設定 [#a426c814]
各計算ノードの時刻をキューサーバの時刻に自動的に同期させるようにする。


>キューサーバ上で TIME サービスを走らせる。
 # /sbin/chkconfig time on
 # /etc/init.d/xinetd reload

>共有ディスク上にクライアント側のコマンド実行ファイルを作成しておく。
 # echo "/usr/bin/rdate -s snoopy" > /ds300/etc/time.cron
 # chmod +x /misc/ds300/etc/time.cron


> 各計算ノードでは、定期的に時刻合わせをするコマンドをCRONサービスに登録するため、共有ディスクに作成したコマンドファイルのシンボリックリンクを所定のディレクトリ、ここでは毎日実行するための /etc/cron.daily ディレクトリに作成し、CRONデーモンの初期化を行う。
 # cp -p /misc/ds300/etc/time.cron /etc/cron.daily/time.cron
 # /etc/init.d/crond reload


**DNSの設定 [#rc697b21]
公式なドメインはないものの、メールサービスなどDNSを利用するシステムが増えてきているため、ダミーのDSNサーバ設定を行なう。ドメイン名をlocaldomainとして、snoopy をDNSのサーバとして設定する。また、MX(メール)サーバもsnoopyに指定する。

***DNSサーバ設定 [#j95e783b]
/etc/named.conf にゾーンファイルの定義を追加。
 zone "1.168.192.in-addr.arpa" { 
         type master;
         file "1.168.192.in-addr.arpa.zone";
 };
 zone "localdomain" { 
         type master;
         file "localdomain.zone";
 };

>正引きゾーンファイル: /var/named/localdomain.zone
 $TTL 86400
 @       IN      SOA     localdomain.    root    (
                                 19 ; serial
                                 28800 ; refresh
                                 14400 ; retry
                                 3600000 ; expire
                                 86400 ; ttl
                                 )
 
 @       IN      NS      snoopy
 @       14400   IN      MX      10      snoopy
 
 snoopy  IN      A       192.168.1.1
 spike   IN      A       192.168.1.2
 woodstock       IN      A       192.168.1.3
 lucy    IN      A       192.168.1.4
 linus   IN      A       192.168.1.5
 
 ns      CNAME   snoopy

>逆引きゾーンファイル: /var/named/1.168.192.in-addr.arpa.zone
 $TTL 86400
 @       IN      SOA     localdomain.    root    (
                                 19 ; serial
                                 28800 ; refresh
                                 14400 ; retry
                                 3600000 ; expire
                                 86400 ; ttl
                                 )
 
 @       IN      NS      snoopy
 
 1               IN      PTR     snoopy.localdomain.
 2               IN      PTR     spike.localdomain.
 3               IN      PTR     woodstock.localdomain.
 4               IN      PTR     lucy.localdomain.
 5               IN      PTR     linus.localdomain.

DNSサービス(named)を有効にして起動する。

 # /sbin/chkconfig named on
 # /sbin/chkconfig --list named
 named           0:off   1:off   2:on    3:on    4:on    5:on    6:off
 # /etc/init.d/named start
 # tail /var/log/messages

***DNSクライアント設定 [#od11bf60]
キューサーバのsnoopy上で、/etc/resolv.conf を次のように設定する。
 nameserver 192.168.1.1

このファイルを /ds300/etc/resolv.conf にコピーする。

その他の計算ノードマシンでは、共有ディスクから、
 cp -p /ds300/etc/resolv.conf /etc/resolv.conf
で resolv.conf をコピーする。


**メールサーバの設定 [#e15c8000]
RHEL ES3ではデフォルトのMTAがSendmailになっているが、MXサーバのみより処理性能の高いpostfixに変更して設定を行なう。MTAの切替えは次のコマンドで行なえる。
 # alternatives --config mta
あるいは、
 # redhat-switch-mail
で行なえる。

**Postfixの設定 [#od2f5953]
Postfixの設定ファイル /etc/postfix/main.cf に次の修正をほどこす(diff出力)。
 68a69
 > myhostname = snoopy
 75a77
 > mydomain = localdomain
 90c92
 < #myorigin = $myhostname
 ---
 > myorigin = $myhostname
 105c107
 < #inet_interfaces = all
 ---
 > inet_interfaces = all
 108c110
 < inet_interfaces = localhost
 ---
 > #inet_interfaces = localhost
 153c155
 < mydestination = $myhostname, localhost.$mydomain
 ---
 > mydestination = $myhostname, localhost.$mydomain, $myhostname.$mydomain
 256a259
 > mynetworks = 192.168.1.0/24, 192.168.0.0/24, 127.0.0.0/8

また、wwwのメールアカウントを利用したいため、 /etc/postfix/aliases のデフォルト設定も変更する(diff出力)。
 15c15
 < postmaster: root
 ---
 > postmaster: postfix
 62c62
 < www:          webmaster
 ---
 > #www:         webmaster
 80c80
 < root:         postfix
 ---
 > #root:                postfix

postfixがMTAとして有効になっていることを確認し、起動する。
 # /sbin/chkconfig --list postfix
 postfix         0:off   1:off   2:on    3:on    4:on    5:on    6:off
 # /etc/init.d/postfix start

各計算ノードでは、MTA(Sendmail)に関してはデフォルトの状態のまま、DNSによるアドレスが解決さえできれば、snoopy へメールを送ることが可能になっている(逆は不可)。

***ProcMailの設定 [#y767d80f]
procmailが受信メールのフォルダファイルを/var/spool/mail/ディレクトリに作ることができるように、setgid権限を与える。
 # ls -ld /var/spool/mail/
 # chmod g+s /usr/bin/procmail
 # ls -l /usr/bin/procmail

**PBS用アカウントの作成 [#b8415912]
PBS用のアカウントを作成する。ここでは、wwwという名前のアカウントを使う。

 # /usr/sbin/useradd -g apache www

>受信メールをprocmailで処理できるようにする。procmailに処理を渡すためには、~www/.forward ファイルに次の記述をする。
  "|IFS=' ' && exec /usr/bin/procmail -f- || exit 75 #www"
>そして、~www/.procmailrc にテスト用のスクリプトを書いて実際にメールを送信してテストする。
 PATH=/bin:/usr/bin:/bin
 MAILDIR=/home/www/Mail      # You'd better make sure it exists
 LOCKFILE=$HOME/.lockmail
 LOGFILE=$HOME/procmail.log
 
 :0 H
 * ^Subject: \[TEST .*
 $MAILDIR/TEST
 
 :0
 $DEFAULT

>サブジェクトが "[TEST "ではじまるメールを $MAILDIR/TEST というファイルに保存するというレシピ(procmailによる処理方法はレシピと呼ぶ)である。/home/www/Mail というディレクトリをwwwの権限で作成しておく必要がある。

***各ノードの計算用アカウント [#ecc54eb0]
各ノードにもPBSによる計算用のアカウントをwwwとして作成しておく。

 # for n in spike woodstock lucy linus
 do ssh $n "adduser -g apache -d /home/www www; tail -1 /etc/passwd"
 done

計算用アカウントに対しフレーズ無しSSHアクセスのための設定を、 root アカウントの設定をコピーして行なう。
 # for n in spike woodstock lucy linus
 do ssh $i "cp -a /root/.ssh /home/www/; chown -R www:apache /home/www/.ssh"
 done