雑記 - SuSE Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

ここの話は、SuSE9.{2,3}でテストしたものです。他のバージョンや他の環境でどうかは分かりません。

(追記)SuSELinux10.0 でも ok です。(2006/Jan)

!設定全般
YaST

!remote server のパスワード変更
ssl connection を張ってパスワード変更する pwdutils [[http://www.thkukuk.de/pam/pwdutils/]] が便利そう。

! src rpm
src.rpm をインストールすると、(一般ユーザでも) /usr/src/packages 以下に入れちゃうようです。

!imap-2004c_suse
default で生パスは禁止されている。これを許すには、imap.spec を以下のように書き換えて rebuild
--- imap.spec.orig      2005-09-10 02:10:27.000000000 +0900
+++ imap.spec   2006-01-23 14:23:23.000000000 +0900
@@ -91,7 +91,7 @@
  
  %build
  export CFLAGS="$RPM_OPT_FLAGS -DDISABLE_POP_PROXY=1 -fPIC -fno-strict-aliasing"
-make lnp MYCFLAGS="$CFLAGS" SSLTYPE=nopwd IP=6
+make lnp MYCFLAGS="$CFLAGS" SSLTYPE=unix IP=6
  make lnp c-client
  gcc -shared -o libc-client.so.%{version} c-client/*.o
  strip libc-client.so.%{version}


!NFS, Quota, Firewall
/etc/sysconfig/SuSEfirewall2 のFW_TRUSTED_NETS 行を適当に
編集すれは良いはず。。。開けないといけない port は、nfs と sunrpc に加え、portmapper によって rquotad に割り当てられた port 番号 xxx。
FW_TRUSTED_NETS="10.0.0.2,udp,nfs 10.0.0.2,udp,sunrpc 10.0.0.2,udp,xxx"
問題は、この xxx が何番になるかである。portmapper は動的に port 番号を割り当てるからだ。

iptables などで制限をかけるには、port番号は固定したい。rpc.quotad には port 番号を指定する option (-p port_num)が存在するが、これを適当に指定しても塩梅が良くない。おそらく、-p で指定された port 番号を portmapper が関知しないためだろう。

ちなみにclient-server 間の通信の様子を見てみたところ、次のような流れになっている。client で quota コマンドを実行すると、
まず client が server の nfs port 経由で問いかけ、
次に server の sunrpc port 経由で rquotadの port 番号を聞き出し、
最後に、聞いた port 番号で server 側の rquotad とやりとり
しているらしい。

さて、SuSEの場合であるが、割り当てられる port を固定するためには、/etc/services に
rquotad         14900/udp
rquotad         14900/tcp
のように記載するだけで良い。
これで、portmapper は、rquotad に 14900 を割り当てることになる。(割り当てられたport番号を確認するには、rpcinfo -p を実行すればよい。)

*参考になった情報は→ http://cryptosystem.us/files/nfs_help.html
*port番号→http://www.iana.org/assignments/port-numbers

!Software RAID1
SATA ディスク 2本を使った RAID1。YaST で簡単に設定できる。拍子抜け。

YaST の System → Partitioner から作成できる。ポイントは target となるディスクに partition を作成(format不要)、type を 0xfd にすること、くらいかな。
ath1:~ # cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1] sda1[0]
       36146112 blocks [2/2] [UU]
       [====>................]  resync = 21.5% (7787776/36146112) finish=7.6min speed=61487K/sec
unused devices: <none>

!NFS, Mountd の port 固定
rpc.mountd の port 指定は、/etc/sysconfig/nfs の中の
MOUNTD_PORT=""
で指定するか、あるいは /etc/services に
mountd          14901/tcp
mountd          14901/udp
とか書けば良い。

!NFS, lockd & statd(?)  の port 固定
portmapper で動的に port が割り当てられる、残りの lockd と statd について。

rpc.statd は -o, -p option で固定できると(Vine の) man に書いてある。
一方 lockd(NFS lock manager) は kernel module。Redhat なんぞでは /etc/modules.conf で nlm_udpport と nlm_tcpport を指定するらしい。( http://cryptosystem.us/files/nfs_help.html )

しかし、SuSE には /etc/modules.conf が見当たらないので、/proc 経由で parameter をいじってみることにする。
/etc/init.d/nfsserver stop
echo 14902 > /proc/sys/fs/nfs/nlm_udpport
echo 14902 > /proc/sys/fs/nfs/nlm_tcpport
/etc/init.d/nfsserver start
てな具合にやってみる。
rpcinfo -p で確認する(↓)と nlockmgr のみならず status も 14902 に固定されている。
ath1:/proc/sys/fs/nfs # rpcinfo -p
   program vers proto   port
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100024    1   udp  14902  status
    100021    1   udp  14902  nlockmgr
    100021    3   udp  14902  nlockmgr
    100021    4   udp  14902  nlockmgr
    100024    1   tcp  14902  status
    100021    1   tcp  14902  nlockmgr
    100021    3   tcp  14902  nlockmgr
    100021    4   tcp  14902  nlockmgr
    100005    1   udp  14901  mountd
    100005    1   tcp  14901  mountd
    100005    2   udp  14901  mountd
    100005    2   tcp  14901  mountd
    100005    3   udp  14901  mountd
    100005    3   tcp  14901  mountd
nlockmgr と status が同じ port になるのは何故だろう?(SuSE9.xはいつも nlockmgr とstatus のport 番号が同じ....)

なんにしても、nlockmgr と status がうまく固定された。NFS client からの mount も難なく成功。

! rpc.statd が無いのは??? (疑問)
statd についてだが、そもそも rpc.statd は SuSE には存在していない。もちろん man もない。調べてみると rpc.statd は rpc.lockd と協調して動くもののようだ。もしかすると、nfs-utils で rpc.lockd に merge されたのだろうか。。。(多分違う)

SuSE9.3 の nfs-utils-1.0.7.src.rpm を取ってきて、中を見てみる。rpm spec file 中で rpc.statd とかをばっさり remove してある。うーむ。

SuSE9.1 の Changelog に rpc.statd を消したとある。。。
その代わりかどうか分からないが、sm-notify という command がある。(util-linux に入っている)

試しに man sm-notify すると
sm-notify(8)                                                      sm-notify(8)
NAME
        sm-notify - Send out NSM reboot notifications
一方、(Vine上で)man rpc.statd すると
rpc.statd(8)                                         rpc.statd(8)
NAME
        rpc.statd - NSM status monitor
sm-notify が rpc.statd と同じような役割をしているのかな?

(NSM = Network Status Monitor)

あ、Redhatの文書を読むと、NFSv4( http://www.nfsv4.org/ )では portmapper、rpc.mountd、rpc.lockd、rpc.statdが kernel に導入されて、使用しないという記述が。だから無いのかなぁ。。。釈然としない。

!NFS server での iptables 設定のまとめ
上述の繰り返しになるが、NFS server で iptables を設定する方法について一応まとめておこう。
まず次の二つは最初から port が固定されている。
portmapper → 111
nfs,nfs_acl → 2049
固定されていない(動的割当される)のは、mountd, nlockmgr, status, rquotad 。

これらの port を固定するには、まず mountd と rquotad に関しては /etc/services に次のように書けば固定できる。
rquotad         14900/tcp
rquotad         14900/udp
mountd          14901/tcp
mountd          14901/udp
nlockmgr, status に関しては、nfs server を起動する前に
echo 14902 > /proc/sys/fs/nfs/nlm_udpport
echo 14902 > /proc/sys/fs/nfs/nlm_tcpport
のようにすればよい。(kernel version に依存すると思うけど。)たとえば、/etc/init.d/nfsserver を次のように変えておけば簡単。
--- /etc/init.d/nfsserver.orig  2005-03-20 06:16:05.000000000 +0900
+++ /etc/init.d/nfsserver       2005-07-21 16:21:29.000000000 +0900
@@ -68,6 +68,9 @@
        PARAMS=3
        test "$USE_KERNEL_NFSD_NUMBER" -gt 0 && PARAMS="$USE_KERNEL_NFSD_NUMBER"

+      echo 14902 > /proc/sys/fs/nfs/nlm_udpport
+      echo 14902 > /proc/sys/fs/nfs/nlm_tcpport
+
        echo -n "Starting kernel based NFS server"
        /usr/sbin/exportfs -r
        rc_status


以上の設定では、nfs server 側で開けなければならない port は、111, 2049, 14900-14902 の udp, tcp となる。
これらの port を NFS client に対して iptables で許可すれば良い。
SuSE であれば、/etc/sysconfig/SuSEfirewall2 の FW_TRUSTED_NET に次のように書けばよい。 (server:10.0.0.1, client:10.0.0.2)
FW_TRUSTED_NETS="10.0.0.2,udp,111 10.0.0.2,tcp,111 10.0.0.2,udp,2049 10.0.0.2,tcp,2049
10.0.0.2,udp,14900 10.0.0.2,tcp,14900 10.0.0.2,udp,14901 10.0.0.2,tcp,14901
10.0.0.2,udp,14902 10.0.0.2,tcp,14902"
↑ 1行が長いので適当に改行を入れて折り返してあります。

!! [iptables の設定例]

192.168.10.21がserver、192.168.10.22がclient、rquotadの設定はなし。

iptables-save > {{attach_anchor('nfs-ipt.txt')}}