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コマンドを発行した時のパケット |
コメント
hidaka.hiroshi
笹山さん
いつもお世話になっております。日高です。
> 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
笹山です。
> ところで、全パケット許可はちょっとまずいので、起動時から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/
hidaka.hiroshi
笹山さん
いつもお世話になっております。日高です。
> 当方の環境では、参考情報を基に 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サーバ側)での設定も必要という事ですね。
ありがとうございました。今、別の件でトラぶっているので、そちらの解決後に試してみたいと思います。
hidaka.hiroshi
at_takashi.sasayama
2016年7月7日 12時19分
笹山です。
> これって何が悪い(何が抜けている?)のでしょうか?
atmark-dist に含まれる mount の実体は busybox であり、
busybox-1.20 のデフォルトコンフィグでは NFS mount は無効となっています。
これを以下の手順で有効化してください。
次に、上記コンフィグを行ったイメージで起動し iptables の設定を行った後、NFS mount を行います。
蛇足ですが、Debian GNU/Linux 7(wheezy)ユーザーランド の場合は、
nfs-common をインストールすれば NFS mount が行えます。