Armadilloフォーラム

ATDE上でのNFSサーバが正しく動かない

hidaka.hiroshi

2016年6月23日 16時20分

いつもお世話になります。日高です。

Windows7上のVMwareでATDEを動かして、NFSサーバを構築してArmadillo-IoT(以下iotgと書きます)
のリモートデバッグを行おうとしているのですが、iotgからのnfsマウントが正しく動きません。
何が原因かアドバイスを頂けないでしょうか?

[やった事]

1.nfs-kernel-serverパッケージのダウンロード
 社内のセキュリティ上VMware上から社内ネットワークにアクセスする事が禁止されているため、Win7
 上から http://ftp.jp.debian.org/debian/pool/main/n/nfs-utils/ 内の nfs-kernel-server_1.2.6-4_i386.deb
 をローカルにダウンロード

2.ダウンロードしたdebファイルをVMwareの共有フォルダ(./share)にコピーし、以下の操作を行う。
┌───────────────────────────────────────────
│ atde5:$ su
│ atde5:# cd /usr/src
│ atde5:# mkdir deb
│ atde5:# cd deb
│ atde5:# cp /media/hgfs/nfs-kernel-server_1.2.6-4_i386.deb .
│ atde5:# apt-ftparchive packages . | gzip -c9 > Packages.gz
│ atde5:# apt-ftparchive sources . | gzip -c9 > Sources.gz
└───────────────────────────────────────────

3./usr/src/deb以下のパッケージをapt-getで扱える様に以下の変更を加える。
 /etc/apt/sources.list に以下の行を追加
 dev file:/usr/src/deb/ ./
 
4.apt-getで nfs-kernel-server を実行
┌───────────────────────────────────────────
│ atde5:# apt-get install nfs-kernel-server
│ パッケージリストを読み込んでいます... 完了
│ 依存関係ツリーを作成しています
│ 状態情報を読み取っています... 完了
│ 以下のパッケージが新たにインストールされます:
│ nfs-kernel-server
│ アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
│ 154 kB 中 0 B のアーカイブを取得する必要があります。
│ この操作後に追加で 502 kB のディスク容量が消費されます。
│ 警告: 以下のパッケージは認証されていません!
│ nfs-kernel-server
│ 検証なしにこれらのパッケージをインストールしますか [y/N]? y
│ 以前に未選択のパッケージ nfs-kernel-server を選択しています。
│ (データベースを読み込んでいます ... 現在 179369 個のファイルとディレクトリがインストールされています。)
│ (.../nfs-kernel-server_1.2.6-4_i386.deb から) nfs-kernel-server を展開しています...
│ man-db のトリガを処理しています ...
│ nfs-kernel-server (1:1.2.6-4) を設定しています ...

│ Creating config file /etc/exports with new version

│ Creating config file /etc/default/nfs-kernel-server with new version
│ [ ok ] Starting NFS common utilities: statd idmapd.
│ [warn] Not starting NFS kernel daemon: no exports. ... (warning).
│ atde5:#
└───────────────────────────────────────────

5.exports ファイルを修正
 /etc/exportsファイルに以下の行を追加
┌───────────────────────────────────────────
│ /home 192.168.0.0/24(rw,sync,no_root_squash,no_subtree_check)
└───────────────────────────────────────────
  ※/24を/255.255.255.0 としても同じでした。

6.ATDEを再起動

7.iotgにNFSクライアント機能を追加
 make menuconfigで以下を有効にする
  Custmize Kernel Settings > File systems >
┌───────────────────────────────────────────
│  <*> NFS client support
│  <*> NFS client support for NFS version 2
│  <*> NFS client support for NFS version 3
│  [*]   NFS client support for the NFSv3 ACL protocol extension
│  [*]  Provide swap over NFS support
└───────────────────────────────────────────
 その後、makeして linux.bin.gz/romfs.img.gz を生成し、これを使用してiotgをブート

[問題点]

iotgで #mount -t nfs 192.168.0.10:/home /mnt とすると、暫く経ってから以下のメッセージが出る。

 mount: mounting 192.168.0.10:/home on /mnt failed: Connection timed out

但し、ATDE上で /etc/init.d/nfs-kernel-server status とすると、”nfsd running" と表示され、
exportfs -v とすると "/home 192.168.0.0/24(rw,wdelay,no_root_squash,no_subtree_check)"
と表示されているのでnfsサーバは動いている様に見える。
また、/etc/init.d/nfs-kernel-server stop として iotgからmountを実行すると、
”failed: Operation not supported” と表示されている事から、それなりに動いていると思われる。

そこで、パケットを確認してみたら、どうやらATDEからのNFSサーバからの応答が正しくiotgに伝達
されていない様な感じなのです。portmap要求までは動いているが、実際の取得したポートに対して
リクエストを行った時にそのレスポンスがiotg側で正しく読めていないようです。
(Wiresharkの画面を添付します)

これって何が悪い(何が抜けている?)のでしょうか?

ちなみに、ネットワーク環境は以下の様になっています。

ホスト:192.168.0.1 (Windows7) 2ndイーサ
ゲスト:192.168.0.10 (ATDE) ネットワーク接続:ブリッジ(物理ネットワーク接続の状態を複製)
iotg:192.168.0.20

長文で申し訳ありませんが、宜しくお願い致します。

ファイル ファイルの説明
nfs-mount_error.png iotgからmountコマンドを発行した時のパケット
コメント

at_takashi.sasayama

2016年7月7日 12時19分

笹山です。

> これって何が悪い(何が抜けている?)のでしょうか?

atmark-dist に含まれる mount の実体は busybox であり、
busybox-1.20 のデフォルトコンフィグでは NFS mount は無効となっています。
これを以下の手順で有効化してください。

Userland Configuration
     BusyBox  --->
        Configuration menu  --->
            Linux System Utilities  ---> 
                [*] mount
                    :
                    [*]   Support mounting NFS file systems on Linux < 2.6.23 # チェックを入れます

次に、上記コンフィグを行ったイメージで起動し iptables の設定を行った後、NFS mount を行います。

armadillo:~# iptables -F                # 設定を全消去
armadillo:~# iptables -P INPUT ACCEPT   # (強引ですが)全パケット受信許可
armadillo:~# iptables -P OUTPUT ACCEPT  # (強引ですが)全パケット送信許可
 
armadillo:~# mount -t nfs -o nolock  ... # nolock オプションを付加して NFS mount を実行してください。

蛇足ですが、Debian GNU/Linux 7(wheezy)ユーザーランド の場合は、
nfs-common をインストールすれば NFS mount が行えます。

root@debian:~# apt-get install nfs-common # Armadillo上のDebianで実行する

笹山さん

いつもお世話になっております。日高です。

> atmark-dist に含まれる mount の実体は busybox であり、
> busybox-1.20 のデフォルトコンフィグでは NFS mount は無効となっています。
> これを以下の手順で有効化してください。
>
>

> Userland Configuration
>      BusyBox  --->
>         Configuration menu  --->
>             Linux System Utilities  ---> 
>                 [*] mount
>                     :
>                     [*]   Support mounting NFS file systems on Linux < 2.6.23 # チェックを入れます
> 

これは行っていました。しかし、

> 次に、上記コンフィグを行ったイメージで起動し iptables の設定を行った後、NFS mount を行います。
>

> armadillo:~# iptables -F                # 設定を全消去
> armadillo:~# iptables -P INPUT ACCEPT   # (強引ですが)全パケット受信許可
> armadillo:~# iptables -P OUTPUT ACCEPT  # (強引ですが)全パケット送信許可
> 
> armadillo:~# mount -t nfs -o nolock  ... # nolock オプションを付加して NFS mount を実行してください。
> 

この二つは行っていませんでした。

早速、試してみた結果、iptableで全パケット送受信許可にして、nolockオプションを付けるとマウント出来ました。
そのどちらか片方だけでは、ダメでした。
という事で、この両方の設定が必要な様ですね。

ありがとうございました。

ところで、全パケット許可はちょっとまずいので、起動時からnfsパケットも有効になる様にしたいのですが、
どこの設定ファイルを修正すれば良いのでしょうか?

at_takashi.sasayama

2016年7月11日 13時59分

笹山です。

> ところで、全パケット許可はちょっとまずいので、起動時からnfsパケットも有効になる様にしたいのですが、
> どこの設定ファイルを修正すれば良いのでしょうか?

iptables の設定は atmark-dist/romfs/etc/init.d/firewall スクリプトに集約されていますので、
このファイルを修正することをオススメします。
修正後、make image でイメージファイルを作成してください。

当方の環境では、参考情報を基に NFSサーバーのポート番号を固定にした上で、
以下の様に修正すると NFS mount の動作が確認できました。

atmark-dist/romfs/etc/init.d/firewall に以下の内容を追加
----------------------------------------------------------
 # nfs
  iptables -A INPUT -i $EXT -p tcp --dport 2049 -j ACCEPT
  iptables -A INPUT -i $EXT -p tcp --sport 2049 -j ACCEPT
  # nfs mountd port
  iptables -A INPUT -i $EXT -p tcp --dport 32767 -j ACCEPT
  iptables -A INPUT -i $EXT -p tcp --sport 32767 -j ACCEPT
----------------------------------------------------------

注意点としましては、romfs 配下のファイルは make, make romfs を実行する度に
修正した内容が元に戻ってしまいます。恒久的に変更する場合は、
atmark-dist/vendors/AtmarkTechno/Armadillo-IoTG-Std/etc/init.d/firewall
を修正してください。

■参考情報
Debian 7 Wheezy - NFS サーバのポート固定!
http://www.mk-mode.com/octopress/2013/10/21/debian-7-fix-nfs-port/

笹山さん

いつもお世話になっております。日高です。

> 当方の環境では、参考情報を基に NFSサーバーのポート番号を固定にした上で、
> 以下の様に修正すると NFS mount の動作が確認できました。

動作確認して頂き、ありがとうございました。

> 注意点としましては、romfs 配下のファイルは make, make romfs を実行する度に
> 修正した内容が元に戻ってしまいます。恒久的に変更する場合は、
> atmark-dist/vendors/AtmarkTechno/Armadillo-IoTG-Std/etc/init.d/firewall
> を修正してください。

なるほど。そんなところに設定ファイルがあったのですね。

> ■参考情報
> Debian 7 Wheezy - NFS サーバのポート固定!
> http://www.mk-mode.com/octopress/2013/10/21/debian-7-fix-nfs-port/

NFSサーバのポート固定の方法、ありがとうございました。
ATDE側(NFSサーバ側)での設定も必要という事ですね。

ありがとうございました。今、別の件でトラぶっているので、そちらの解決後に試してみたいと思います。

笹山さん

いつもお世話になっております。日高です。

> ありがとうございました。今、別の件でトラぶっているので、そちらの解決後に試してみたいと思います。

確認しました。
正しくマウント出来る様になりました。

ありがとうございました。