-->
ラベル nfs の投稿を表示しています。 すべての投稿を表示
ラベル nfs の投稿を表示しています。 すべての投稿を表示

2011-06-30

nmapの例

ローカルネットワーク上の別のパソコンから実行する。
自身から実行する。
tcp, udpで、それぞれ実行する。

tcp, udpのどちらかだけ開ける、などが確認できる。
rpc.statd の --outgoing-port 32766 は開けなくても良さそう。(OUTPUTチェインが素通しの場合)
nfs関連でtcpが1つ、udpが2つ、ポートを固定出来ていない。
動いてはいるが何かのタイミングで極端に遅くなったり、見た目動いていても実はおかしい、などになるかもしれない。
tcpの方はプロセス名が不明なのでlockdのようにkernelの設定になるのかもしれない。

追記: もしくは rpcinfo -p に挙げられているプロトコル、ポートが空いていれば大丈夫かもしれません。

この例の場合、調べるポート数が多いのでグローバルなIPアドレスで実行すると問題が発生するかもしれません。

tcpのポートを外側からチェック。
$ nmap -Pn -A -T5 -sT -p1- 192.168.0.200 > nmap-tcp-192.168.0.200.txt 2>&1 &
$ cat nmap-tcp-192.168.0.200.txt

Starting Nmap 5.51 ( http://nmap.org ) at 2011-06-28 11:39 JST
Nmap scan report for cogentoo-1.localnet (192.168.0.200)
Host is up (0.0067s latency).
Not shown: 65518 filtered ports
PORT      STATE  SERVICE     VERSION
22/tcp    open   ssh         OpenSSH 5.8p1-hpn13v10 (protocol 2.0)
53/tcp    closed domain
111/tcp   open   rpcbind
123/tcp   closed ntp
137/tcp   closed netbios-ns
138/tcp   closed netbios-dgm
139/tcp   open   netbios-ssn Samba smbd 3.X (workgroup: MSHOME)
445/tcp   open   netbios-ssn Samba smbd 3.X (workgroup: MSHOME)
873/tcp   closed rsync
2049/tcp  open   rpcbind
2401/tcp  closed cvspserver
3690/tcp  closed svn
4949/tcp  open   munin       Munin
32765/tcp open   rpcbind
32766/tcp closed unknown
32767/tcp open   rpcbind
32768/tcp open   rpcbind

Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 106.18 seconds

udpのポートを外側からチェック。
$ sudo nmap --host-timeout 1165535s -A -T5 -sU -p1- 192.168.0.200 > nmap-udp-192.168.0.200.txt 2>&1 &
$ cat nmap-udp-192.168.0.200.txt

Starting Nmap 5.51 ( http://nmap.org ) at 2011-06-28 11:38 JST
Warning: 192.168.0.200 giving up on port because retransmission cap hit (2).
Umm -- RPC returned success for bogus version -- thats OK I guess
Umm -- RPC returned success for bogus version -- thats OK I guess
Nmap scan report for cogentoo-1.localnet (192.168.0.200)
Host is up (0.00098s latency).
Not shown: 65306 filtered ports, 214 open|filtered ports
PORT      STATE  SERVICE      VERSION
53/udp    closed domain
111/udp   open   rpcbind
123/udp   open   ntp          NTP v4
137/udp   open   netbios-ns   Microsoft Windows XP netbios-ssn
139/udp   closed netbios-ssn
445/udp   closed microsoft-ds
873/udp   closed rsync
2049/udp  open   rpcbind      0 (rpc #100000)
2401/udp  closed cvspserver
3690/udp  closed unknown
4949/udp  closed unknown
32765/udp open   rpcbind
32766/udp closed unknown
32767/udp open   rpcbind
32768/udp open   rpcbind      0 (rpc #100000)
MAC Address: 00:FF:8A:7E:AF:01 (Unknown)
Too many fingerprints match this host to give specific OS details
Network Distance: 1 hop
Service Info: OS: Windows

TRACEROUTE
HOP RTT     ADDRESS
1   0.98 ms cogentoo-1.localnet (192.168.0.200)

OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 72493.69 seconds

tcpのポートを内側からチェック。
$ nmap -A -T5 -sT -p1- 127.0.0.1 > nmap-tcp-127.0.0.1.txt 2>&1 &
$ cat nmap-tcp-127.0.0.1.txt

Starting Nmap 5.51 ( http://nmap.org ) at 2011-06-28 11:39 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.024s latency).
Not shown: 65520 closed ports
PORT      STATE SERVICE     VERSION
22/tcp    open  ssh         OpenSSH 5.8p1-hpn13v10 (protocol 2.0)
25/tcp    open  smtp        Postfix smtpd
80/tcp    open  http        nginx
111/tcp   open  rpcbind     2-4 (rpc #100000)
139/tcp   open  netbios-ssn Samba smbd 3.X (workgroup: MSHOME)
443/tcp   open  ssl/http    Apache httpd
445/tcp   open  netbios-ssn Samba smbd 3.X (workgroup: MSHOME)
901/tcp   open  http        Samba SWAT administration server
2049/tcp  open  nfs         2-4 (rpc #100003)
4949/tcp  open  munin       Munin
8081/tcp  open  http        Apache httpd
32765/tcp open  status      1 (rpc #100024)
32767/tcp open  mountd      1-3 (rpc #100005)
32768/tcp open  nlockmgr    1-4 (rpc #100021)
55000/tcp open  rpc.unknown
Service Info: Host:  cogentoo-1.localnet

Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 19.70 seconds

udpのポートを内側からチェック。
$ sudo nmap -A -T5 -sU -p1- 127.0.0.1 > nmap-udp-127.0.0.1.txt 2>&1 &
$ cat nmap-udp-127.0.0.1.txt

Starting Nmap 5.51 ( http://nmap.org ) at 2011-06-28 11:39 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00033s latency).
Not shown: 65525 closed ports
PORT      STATE         SERVICE     VERSION
111/udp   open          rpcbind     2-4 (rpc #100000)
123/udp   open          ntp         NTP v4
137/udp   open          netbios-ns  Microsoft Windows XP netbios-ssn
138/udp   open|filtered netbios-dgm
608/udp   open|filtered sift-uft
957/udp   open          rpcbind     2-4 (rpc #100000)
2049/udp  open          nfs         2-4 (rpc #100003)
32765/udp open          status      1 (rpc #100024)
32767/udp open          mountd      1-3 (rpc #100005)
32768/udp open          nlockmgr    1-4 (rpc #100021)
Too many fingerprints match this host to give specific OS details
Network Distance: 0 hops
Service Info: Host: COGENTOO-1; OS: Windows

OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 89.97 seconds

再起動すると固定出来ていないポートがあることがわかる。
$ diff /tmp/a.txt nmap-udp-127.0.0.1.txt
2c2
< Starting Nmap 5.51 ( http://nmap.org ) at 2011-06-28 11:39 JST
---
> Starting Nmap 5.51 ( http://nmap.org ) at 2011-06-30 13:07 JST
4c4
< Host is up (0.00033s latency).
---
> Host is up (0.00s latency).
11,12c11,12
< 608/udp   open|filtered sift-uft
< 957/udp   open          rpcbind     2-4 (rpc #100000)
---
> 956/udp   open          rpcbind     2-4 (rpc #100000)
> 1011/udp  open|filtered unknown
22c22
< Nmap done: 1 IP address (1 host up) scanned in 89.97 seconds
---
> Nmap done: 1 IP address (1 host up) scanned in 90.99 seconds

$ diff /tmp/b.txt nmap-tcp-127.0.0.1.txt
2c2
< Starting Nmap 5.51 ( http://nmap.org ) at 2011-06-28 11:39 JST
---
> Starting Nmap 5.51 ( http://nmap.org ) at 2011-06-30 13:07 JST
4c4
< Host is up (0.024s latency).
---
> Host is up (0.026s latency).
10c10
< 111/tcp   open  rpcbind     2-4 (rpc #100000)
---
> 111/tcp   open  rpcbind
21c21
< 55000/tcp open  rpc.unknown
---
> 47454/tcp open  rpc.unknown
25c25
< Nmap done: 1 IP address (1 host up) scanned in 19.70 seconds
---
> Nmap done: 1 IP address (1 host up) scanned in 21.74 seconds

$ sudo lsof -i:956,1011,47454
COMMAND    PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind   1661   root    7u  IPv4   3659      0t0  UDP *:956
rpc.statd 1683 nobody    5u  IPv4   3831      0t0  UDP *:1011

$ sudo netstat -anp | grep -P "956|1011|47454"
tcp        0      0 0.0.0.0:47454           0.0.0.0:*               LISTEN      -
udp        0      0 0.0.0.0:956             0.0.0.0:*                           1661/rpcbind
udp        0      0 0.0.0.0:1011            0.0.0.0:*                           1683/rpc.statd

2011-06-26

nfs4のポート固定

$ rcsdiff -r1.1 /etc/config-archive/etc/conf.d/nfs,v /etc/conf.d/nfs
===================================================================
RCS file: /etc/config-archive/etc/conf.d/nfs,v
retrieving revision 1.1
diff -r1.1 /etc/conf.d/nfs
15c15
< OPTS_RPC_MOUNTD=""
---
> OPTS_RPC_MOUNTD="-p 32767"
19c19
< OPTS_RPC_STATD=""
---
> OPTS_RPC_STATD="-p 32765 -o 32766"

$ grep lockd /etc/modprobe.d/_local.conf
options lockd nlm_udpport=32768 nlm_tcpport=32768

$ rpcinfo -p
   プログラム バージョン プロトコル ポート
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  32765  status
    100024    1   tcp  32765  status
    100005    1   udp  32767  mountd
    100005    1   tcp  32767  mountd
    100005    2   udp  32767  mountd
    100005    2   tcp  32767  mountd
    100005    3   udp  32767  mountd
    100005    3   tcp  32767  mountd
    100021    1   udp  32768  nlockmgr
    100021    3   udp  32768  nlockmgr
    100021    4   udp  32768  nlockmgr
    100021    1   tcp  32768  nlockmgr
    100021    3   tcp  32768  nlockmgr
    100021    4   tcp  32768  nlockmgr
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    2   tcp   2049  nfs_acl
    100227    3   tcp   2049  nfs_acl
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    2   udp   2049  nfs_acl
    100227    3   udp   2049  nfs_acl

$ netstat -an|grep -P ":(111|2049|32765|32766|32767|32768)\s"|sort -t':' -k2n
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN
udp        0      0 0.0.0.0:111             0.0.0.0:*
tcp        0      0 0.0.0.0:2049            0.0.0.0:*               LISTEN
udp        0      0 0.0.0.0:2049            0.0.0.0:*
tcp        0      0 0.0.0.0:32765           0.0.0.0:*               LISTEN
udp        0      0 0.0.0.0:32765           0.0.0.0:*
tcp        0      0 0.0.0.0:32767           0.0.0.0:*               LISTEN
udp        0      0 0.0.0.0:32767           0.0.0.0:*
tcp        0      0 0.0.0.0:32768           0.0.0.0:*               LISTEN
udp        0      0 0.0.0.0:32768           0.0.0.0:*

2011-05-16

nfsのマウントは成功するがflockが失敗する

nfs-utils-1.2はそのままにした。バージョンを下げない。
カーネルの設定をnfs4のサーバーが使えるように変えた。
/etc/exportsの設定をnfs4になるように変えた。

追記: /etc/exportsではなく/etc/fstab。(もしくは手動の場合 mount -t nfs4 ...)
/etc/exportsのfsid=0はmountする際に便利になるnfs4の機能。
http://www.turbolinux.com/products/server/11s/user_guide/nfspseudofs.html

参考URL。
http://www.gentoo.gr.jp/jpmain/tips.xml
http://murasakimania.dip.jp/wordpress/?p=76
http://linuxjf.sourceforge.jp/
http://linuxjf.sourceforge.jp/JFdocs/JFhtml.tar.bz2
http://forums.gentoo.org/viewtopic.php?t=77748
http://www.turbolinux.com/support/document/knowledge/632.html
http://oshiete.goo.ne.jp/qa/4954031.html
http://linux.kororo.jp/cont/server/nfs.php
http://www.asahi-net.or.jp/~aa4t-nngk/nfsv4.html
http://www.turbolinux.com/products/server/11s/user_guide/nfspseudofs.html



下記は詳細です。

原因はnfs3でマウントしているがrpc.lockdが無い。
nfs4ではrpc.lockdは必要なくなったらしくnfs-utils-1.2.3-r1には無い。
nfs-utils-1.0系にはあるようだがパッケージのバージョンにはない。1.1.4-r1が一番古い。
nfsサーバー側でmake oldconfigで設定を更新していたせいでnfs4のサーバーの機能が無効だった。
マウントの設定もnfs4になるようになっていなかった。

対応としてはnfs4にした。
nfsサーバー側のカーネルの設定にnfs4のサーバーを入れた。マウントの設定を変更した。

結果としてnfs経由でemerge xxxでソフトの再インストールに成功した。そのソフトも動作した。
テストはwget,phpとphpの関連パッケージで行った。apacheの再起動後でもphpは使えた。
nfs3のままマウント時に-o nolockの追加で問題ないかもしれない。カーネルのコンパイルでは大丈夫だった。
(/usr/src/linux/でmake vmlinuxなどを行う。出来上がったバイナリで起動できた。)
(成功するのはnfsサーバーがpentium4でnfsクライアントがphenomで同じx86系のため。)



作業の例。
nfsサーバー側がnfs3サーバー対応のカーネルで、nfsクライアント側はnfs3,nfs4クライアント機能対応のカーネルで、それぞれにツールをインストールしnfs3でマウント後にflockできないのでrpc.lockdを起動しようとしたところ、マニュアルは存在するがコマンドはないという状況になり、ツールがnfs4向けと判断したのでnfs4サーバーの機能をnfsサーバー側に追加しflockを含めた動作テストまで行う。

nfsサーバーにnfsのツールをインストールする。
$ sudo emerge --oneshot -avt nfs-utils

nfsサーバー設定。(nfs4になっていない)
$ rcsdiff -r1.1 exports,v /etc/exports
===================================================================
RCS file: exports,v
retrieving revision 1.1
diff -r1.1 /etc/exports
1a2,3
>
> / 192.168.0.100/255.255.255.255(rw,sync,no_root_squash)

nfsサーバーを起動する。
$ sudo /etc/init.d/nfs start
$ sudo rc-update add nfs default

nfsクライアントにnfsのツールをインストールする。
$ sudo emerge --oneshot -avt nfs-utils
$ sudo /etc/init.d/rpc.statd start など

nfsサーバーにchrootする。
$ sudo mount -t nfs 192.168.0.200:/ /mnt/cogentoo-1/
$ cd /mnt/cogentoo-1/
$ sudo chroot . /bin/bash
$ ll /proc/
合計 0
$ source /etc/profile
$ export PS1="(chroot.nfs.cogentoo-1) $PS1"

/procをmountするため終了する。
$ emerge --oneshot -avt wget
!!! It seems that /proc is not mounted. You have been warned.
emergelog(): [Errno 9] Bad file descriptor
emergelog(): [Errno 9] Bad file descriptor

These are the packages that would be merged, in reverse order:
...
^C <= 止めた。
$ exit

/procをmountする。
$ sudo mount -t proc none proc/

再度chrootする。
$ sudo chroot . /bin/bash
$ source /etc/profile
$ export PS1="(chroot.nfs.cogentoo-1) $PS1"

chroot後のnfsクライアント側で実行するとflockできないという警告が出る。
nfsサーバー側でエラーが出ている。
$ emerge --oneshot -avt wget

nfsサーバー側の/vat/log/message
May 15 18:56:52 cogentoo-1 rpc.statd[483]: STAT_FAIL to cogentoo-1 for SM_MON of 192.168.0.100
May 15 18:56:52 cogentoo-1 kernel: lockd: cannot monitor amdgentoo
...

lock関連のデーモンを起動できない。
rpc.lockdが無い。
$ man lockd
$ sudo find / -name rpc.lockd
$

1.0系にあり。
$ e-file rpc.lockd
[I] net-fs/nfs-utils
        Available Versions:     1.0.12-r2 1.0.12-r0 1.0.10-r0 1.0.7-r2 1.0.7-r1 1.0.6-r6 1.0.12-r3
        Last Installed Ver:     1.2.3-r1(2011年05月15日 17時22分26秒)
        Homepage:               http://linux-nfs.org/
        Description:            NFS client and server daemons
        Matched Files:          /sbin/rpc.lockd;
...

1.1から先しか無い。
$ eix ^nfs-utils$
[I] net-fs/nfs-utils
     Available versions:  1.1.4-r1 ~1.1.5 ~1.1.6-r1 ~1.2.0 ~1.2.1 ~1.2.2-r2!t ~1.2.3!t 1.2.3-r1!t {caps elibc_glibc ipv6 kerberos +nfsv3 +nfsv4 nonfsv4 tcpd}
     Installed versions:  1.2.3-r1!t(17時22分22秒 2011年05月15日)(elibc_glibc nfsv3 nfsv4 tcpd -caps -ipv6 -kerberos)
     Homepage:            http://linux-nfs.org/
     Description:         NFS client and server daemons

gentooの場合、設定の変更で古いパッケージの情報も取得できるらしいが、やめておく。

nfsクライアント側のカーネル設定。
$ grep -i nfs /etc/kernels/kernel-config-x86_64-2.6.36-hardened-r9
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFS_V4=y
# CONFIG_NFS_V4_1 is not set
CONFIG_ROOT_NFS=y
# CONFIG_NFS_USE_LEGACY_DNS is not set
CONFIG_NFS_USE_KERNEL_DNS=y
# CONFIG_NFSD is not set
CONFIG_NFS_ACL_SUPPORT=y
CONFIG_NFS_COMMON=y

nfsサーバー側のカーネル設定。
$ grep -i nfs /usr/src/linux/.config
CONFIG_NFS_FS=m
CONFIG_NFS_V3=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFS_V4=y
CONFIG_NFS_V4_1=y
CONFIG_NFSD=m
CONFIG_NFSD_V2_ACL=y
CONFIG_NFSD_V3=y
CONFIG_NFSD_V3_ACL=y
# CONFIG_NFSD_V4 is not set
CONFIG_NFS_ACL_SUPPORT=m
CONFIG_NFS_COMMON=y
# CONFIG_NCPFS_NFS_NS is not set

colinuxの方のカーネルを再作成する。

flockのエラーが出る。
$ sudo mount -t nfs 192.168.0.200:/ /mnt/cogentoo-1/
$ nfsstat -m
/mnt/cogentoo-1 from 192.168.0.200:/
 Flags: rw,relatime,vers=3,rsize=32768,wsize=32768,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.0.200,mountvers=3,mountport=37363,mountproto=udp,addr=192.168.0.200

-o nolock追加。
$ sudo mount -t nfs -o nolock 192.168.0.200:/ /mnt/cogentoo-1/
$ nfsstat -m
/mnt/cogentoo-1 from 192.168.0.200:/
 Flags: rw,relatime,vers=3,rsize=8192,wsize=8192,namlen=255,hard,nolock,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.0.200,mountvers=3,mountport=52092,mountproto=udp,addr=192.168.0.200

flockテスト。
$ date >> test.txt
$ php -r '$fp=fopen("test.txt","r+");$res=flock($fp, LOCK_EX); var_dump($res); print fread($fp, 4096);'

テスト。v3でnolockでカーネルコンパイル。ARCH必須。CFLAGSは関係ある?他はない。
CROSS_COMPILEはi686-pc-linux-gccでコンパイルする場合。nfsでアクセスしているので、そのファイルは無い。
export CHOST="i686-pc-linux-gnu"
export CFLAGS="-march=prescott --param l1-cache-size=16 --param l1-cache-line-size=64 -mtune=prescott -fomit-frame-pointer -Os"
export CXXFLAGS="${CFLAGS}"
export ARCH=i386
#export CROSS_COMPILE="i686-pc-linux-"
cp -i /usr/src/colinux/coLinux-0.7.9-src/coLinux-0.7.9/conf/linux-2.6.33.7-config .config
# make menuconfig
# cpuの所をpentimu4に変えた。元のサーバーで実行する。
make vmlinux && make modules && make modules_install

古いのをmake oldconfigしていたのでv4が無かっただけで2.6.33のデフォルトでは設定済みだった。

特にエラーがなく立ち上がったのでflockなくてもカーネルのコンパイルはnfs上でいけるっぽい。
$ uname -a
Linux cogentoo-1 2.6.33.7-co-0.7.9 #1 PREEMPT Sun May 15 23:14:41 JST 2011 i686 Intel(R) Pentium(R) 4 CPU 3.00GHz GenuineIntel GNU/Linux

コンパイル中に秒数が0.7秒ずれている、とか出ていたがそれはntpサーバーのズレが大きいだけなので、大丈夫っぽい。
ntpの大本が10分に1回一気に時計合わせする、ざっくりとしたルーターの機能なのでそれに合わせると結構ずれるからだと思う。

その後クライアント側で -t nfs はOK -t nfs4 はエラー。
$ sudo mount -t nfs4 192.168.0.200:/ /mnt/cogentoo-1/
mount.nfs4: mounting 192.168.0.200:/ failed, reason given by server:
  No such file or directory
### サーバーを修正した。
$ sudo mount -t nfs4 192.168.0.200:/ /mnt/cogentoo-1/
$

サーバー側の修正。危険な設定に変更する。asyncは問題ありかもしれない。
$ rcsdiff exports,v /etc/exports
===================================================================
RCS file: exports,v
retrieving revision 1.2
diff -r1.2 /etc/exports
3c3
< / 192.168.0.100/255.255.255.255(rw,sync,no_root_squash)
---
> / 192.168.0.100/255.255.255.255(rw,async,no_root_squash,fsid=0,no_subtree_check)

クライアントのマウント状態。
$ nfsstat -m
/mnt/cogentoo-1 from 192.168.0.200:/
 Flags: rw,relatime,vers=4,rsize=8192,wsize=8192,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.0.100,minorversion=0,addr=192.168.0.200

chroot後に実行する。flock成功。
# cd
# pwd
/root
# date > date.txt
(chroot.nfs.cogentoo-1) amdgentoo ~ # php -r '$fp=fopen("date.txt","r+");$res=flock($fp, LOCK_EX); var_dump($res); print fread($fp, 4096);'
bool(true)
2011年  5月 16日 月曜日 00:51:36 JST

成功。/tmpがtmpfs=>マウント前の/tmpになっている。そのままにする。
# ll -A /tmp/
合計 8
drwxrwxrwt 2 root root 4096  1月 29  2010 .ICE-unix/
drwxrwxrwt 2 root root 4096  1月 29  2010 .X11-unix/

これが別のディレクトリの場合/etc/exportsに追加+fsid=0=>nohideなどにするらしい。

サーバー側。
$ sudo tail -f /var/log/messages

クライアント側。
# emerge --oneshot -avt wget

These are the packages that would be merged, in reverse order:

Calculating dependencies... done!
[ebuild   R   ] net-misc/wget-1.12-r3  USE="nls ssl -debug -idn -ipv6 -ntlm -static" 0 kB

Total: 1 package (1 reinstall), Size of downloads: 0 kB

Would you like to merge these packages? [Yes/No] no

Quitting.

サーバー側にnfs関連のエラーが出ない。
nfs4のflock成功。
エラーの場合、下記のようなものが出る。
May 15 17:33:03 cogentoo-1 rpc.statd[483]: STAT_FAIL to cogentoo-1 for SM_MON of 192.168.0.100
May 15 17:33:03 cogentoo-1 kernel: lockd: cannot monitor amdgentoo

コンパイル前。
$ wget www.example.com
...
$ ll
合計 4
-rw-r--r-- 1 usui usui 2945 2011-02-10 02:13:15 index.html
$ ll `which wget`
-rwxr-xr-x 1 root root 259356 2011-03-30 13:42:05 /usr/bin/wget*

クライアント側でコンパイルする。成功。
# emerge --oneshot -avt wget
...
yes
...
>>> Original instance of package unmerged safely.

* Messages for package net-misc/wget-1.12-r3:

* The /etc/wget/wgetrc file has been relocated to /etc/wgetrc
>>> Auto-cleaning packages...

>>> No outdated packages were found on your system.

* Regenerating GNU info directory index...
* Processed 106 info files.

コンパイル後。成功。
$ wget www.example.com
...
$ ll
合計 8
-rw-r--r-- 1 usui usui 2945 2011-02-10 02:13:15 index.html
-rw-r--r-- 1 usui usui 2945 2011-02-10 02:13:15 index.html.1
usui@cogentoo-1 /tmp/wget $ ll `which wget`
-rwxr-xr-x 1 root root 259356 2011-05-16 01:00:52 /usr/bin/wget*

結果として、distccで任せられるサーバーが1台の場合はnfsでまるごとマウントは効果的。
コンパイル時のchecking ... のあたりのdistccを使わない部分も扱えるので有利?
代わりにディスク性能+ネットワーク性能がボトルネックになる?
コンパイル時にcolinuxのmemをある程度上げないと、ものすごく遅いというのを回避できるかもしれない。
gccのコンパイルの場合300以上にしとかないとswapしすぎて遅い、など。
distccはもともと単体でも早いやつを更に早くする、のが得意。
元が遅いとdistccに処理を渡せる部分以外がすごく長い場合、体感できない、かもしれない。
cpuとコンパイルするソフトの種類によっては実際にcpuごとの独自の命令を要求するらしいので失敗するらしい。
インストール中に出来上がったバイナリで、なにかする、など。
それは元のほうでコンパイルするなどの対応。

なにかエラーが出ている。問題ない?
>>>> Emerging (1 of 1) net-misc/wget-1.12-r3
> openpty failed: 'out of pty devices'
>  * wget-1.12.tar.bz2 RMD160 SHA1 SHA256 size ;-) ...                     [ ok ]

クライアント側の利用メモリ結構増えたように思う。キャッシュ?

テスト。
distccで実行。nfsを止めていない。他のサービスも止めていない。
$ time sudo emerge --oneshot -vt wget
...
* Regenerating GNU info directory index...
* Processed 106 info files.

real    5m53.493s
user    1m39.190s
sys     2m44.820s

使っている。
$ sudo DISTCC_DIR=/var/tmp/portage/.distcc distccmon-text 1|grep 192.168.0.100
642  Preprocess  c-ctype.c                                 192.168.0.100[0]
650  Preprocess  xmalloc.c                                 192.168.0.100[1]
645  Preprocess  xalloc-die.c                              192.168.0.100[2]
647  Preprocess  getpass.c                                 192.168.0.100[3]
647  Preprocess  getpass.c                                 192.168.0.100[3]
...
796  Compile     url.c                                     192.168.0.100[1]
802  Preprocess  utils.c                                   192.168.0.100[2]
753  Preprocess  init.c                                    192.168.0.100[3]
804  Preprocess  exits.c                                   192.168.0.100[0]
802  Compile     utils.c                                   192.168.0.100[2]

実行後のメモリ。
$ free
total       used       free     shared    buffers     cached
Mem:         60584      37476      23108          0       9744      10872
-/+ buffers/cache:      16860      43724
Swap:      1048568      31704    1016864

nfsの場合。早くなった。cpuの能力が問題ない場合ディスクがネットワーク経由なので逆転するはず。
# time emerge --oneshot -vt wget
...
* Regenerating GNU info directory index...
* Processed 106 info files.

real    3m0.287s
user    0m29.970s
sys     0m7.570s

distccは動かない。なにかを判定しているとか?
$ sudo DISTCC_DIR=/var/tmp/portage/.distcc distccmon-text 1|grep -v ^$
^C
$

メモリはたぶん/procをマウントしているせいでクライアント側になっている。
# free
total       used       free     shared    buffers     cached
Mem:       8065896    7880360     185536          0    1072260     456600
-/+ buffers/cache:    6351500    1714396
Swap:     15631164          0   15631164

別にディスクの性能がいいわけではないので、場合にもよるだろうが早くなりそう。
distccの場合より問題が発生する事が多そう。
distccが関われない部分でcpuがボトルネックの場合には効果あり。
ホストのcpuが低性能で、distccのサーバーが1台の場合は、distccより確実に早くなる。
設定なしでdistcc自体が動いていないがこれは正常か?この場合、動いても意味はないが。

本当に成功かどうかは emerge -e world などをやってみないとわからない。
なにか問題がでるとおもう。
kvmなどで同じ設定にしたゲストOS上でbinpkg的なことをやってそれを入れたほうが良いかもしれない。

クライアント側。
nfs4の場合で手動の場合、rpcbind, rpc.idmapdだけでいいかもしれない。
init xxxで影響が出るかもしれないので全部登録した方がいい?
$ rc-update show | grep -iP "nfs|rpc"
            rpc.statd |                                   default # rpc.lockd関連?必要なし?nfsmountで必要?
              rpcbind |                                   default # rpc関連全般で必要?
           rpc.pipefs |                                   default # rpc.idmapdで必要?
             nfsmount |                                   default # /etc/fstab関連。
           rpc.idmapd |                                   default # ファイルのユーザー、グループ。

サーバー側。
$ rc-update show | grep -iP "nfs|rpc"
                  nfs |        default