PBSProを使うためのネットワークの設定を行なう。PBSの構成は、1台のキューサーバと複数台の計算ノードである。
キューサーバのディスクをNFSにより共有ディスクとして、各計算ノードに共有マウントして作業をすすめる。
NFSサーバ側では、クライアントのrootがフルアクセスできる設定の次のような行を/etc/exportsに追加する。
/ds300 192.168.1.0/28(rw,no_root_squash,sync)
一般的には、NFSクライアント側では/etc/fstabに、
192.168.1.1:/ds300 /ds300 nfs soft 1 2
の行を追加し、
# mount /ds300
を実行して共有ディスクをマウントするが、ここでは、起動時の同期に失敗したときのことを考慮して、オンデマンドでマウントができる自動マウント(automount)を使う。
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
キューサーバ(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の認証のためのキーを生成し、パブリックキーを共有ディスクにコピーする。(プライベートキー 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 サービスを走らせる。
# /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を利用するシステムが増えてきているため、ダミーのDSNサーバ設定を行なう。ドメイン名をlocaldomainとして、snoopy をDNSのサーバとして設定する。また、MX(メール)サーバもsnoopyに指定する。
/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
キューサーバのsnoopy上で、/etc/resolv.conf を次のように設定する。
nameserver 192.168.1.1
このファイルを /ds300/etc/resolv.conf にコピーする。
その他の計算ノードマシンでは、共有ディスクから、
cp -p /ds300/etc/resolv.conf /etc/resolv.conf
で resolv.conf をコピーする。
RHEL ES3ではデフォルトのMTAがSendmailになっているが、MXサーバのみより処理性能の高いpostfixに変更して設定を行なう。MTAの切替えは次のコマンドで行なえる。
# alternatives --config mta
あるいは、
# redhat-switch-mail
で行なえる。
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が受信メールのフォルダファイルを/var/spool/mail/ディレクトリに作ることができるように、setgid権限を与える。
# ls -ld /var/spool/mail/ # chmod g+s /usr/bin/procmail # ls -l /usr/bin/procmail
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の権限で作成しておく必要がある。
各ノードにも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