PBSProのためのRHEL3のネットワーク設定

PBSProを使うためのネットワークの設定を行なう。PBSの構成は、1台のキューサーバと複数台の計算ノードである。

内容

NFSによる共有ディスク

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

NFSサーバ(PBSキューサーバ)

NFSサーバ側では、クライアントのrootがフルアクセスできる設定の次のような行を/etc/exportsに追加する。

/ds300 192.168.1.0/28(rw,no_root_squash,sync)

NFSマウント(PBS計算ノード)

一般的には、NFSクライアント側では/etc/fstabに、

192.168.1.1:/ds300  /ds300    nfs  soft  1 2

の行を追加し、

# mount /ds300

を実行して共有ディスクをマウントするが、ここでは、起動時の同期に失敗したときのことを考慮して、オンデマンドでマウントができる自動マウント(automount)を使う。

AutoFS(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

アドレス解決のためのhostsファイルを設置

キューサーバ(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のフレーズ入力無しアクセスの設定

キューサーバ上で、次のコマンドで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サービスの設定

各計算ノードの時刻をキューサーバの時刻に自動的に同期させるようにする。

キューサーバ上で 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の設定

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

DNSサーバ設定

/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クライアント設定

キューサーバの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の設定

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の設定

procmailが受信メールのフォルダファイルを/var/spool/mail/ディレクトリに作ることができるように、setgid権限を与える。

# ls -ld /var/spool/mail/
# chmod g+s /usr/bin/procmail
# ls -l /usr/bin/procmail

PBS用アカウントの作成

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