前の続き
NFSサーバーのインストールと動作までできたけど、まだ問題があったのでメモ
問題その1 書き込めない
まずその前に前回のコマンドラインでの接続だとエクスプローラーで見れなかったので、
エクスプローラー開いて左PCを選択してメニューに出てくるネットワークドライブの割り当てでエクスプローラーに表示されるように。
んで試しにファイルをドラッグ&ドロップでなんかエラーが出て書き込めない。
新規作成でフォルダを作ってみる。
これはできた。
よくわからないのでサーバーの方を確認。
nfs rpc fragment too large ~ ってなのが流れてきてる。
ググってみると書き込みのサイズが大きすぎるっぽい。んで調べた結果windows側でnfsadminなるコマンドで設定を変えれるみたい
以下で現在の設定を確認
1 | > nfsadmin client config |
1024KBらしいとりあえず半分にしてみる.
1 | #書き込み |
これで書き込みができるようになりました。
GUIでもWindows管理ツールにNFSの設定できるのがあったんでだけど変更できるのはプロトコルとか再試行回数とかで、
書き込み、読み込みサイズはCUIからしかできないみたい。
問題2 文字化け
よしできたってことmusicフォルダをドラック&ドロップでぶち込んで、Volumoの方でも一度初期化してネットワークドライブの設定して音楽ファイルのスキャンを実行。
なんだけどなぜか一部の曲しか認識されない、エクスプローラーで確認してもちゃんと全部書き込まれてるし、再生もできる。
なんでじゃ???って思ってたんだけどサーバ側でファイル見たら一発解決ファイル名がめっちゃ文字化けしてる!!!
文字コードはWindowsはShft-JISでLinuxはUTF8なんでそりゃそうだですよねー。
ってとでファイル名の文字コード変換コマンドで変換。
1 | # cd /mnt/hdd1/music |
再度Volummioでスキャンしてみると全曲認識された。
で解決したとおもいきや、今度はWindows側で文字化け。
ですよねーってことでどうするか?
Linuxはmountコマンドのオプションで文字コード指定とかできるみたいだけど、Windowsはできないらしい。
クライアント側でどうにかできないならサーバー側でどうにかするしかないってことで調べるとfuse-convmvfsなるものが使えそう。
https://ja.osdn.net/projects/sfnet_fuse-convmvfs/
これは 1 つの文字セットから別にファイル名を変換するファイルシステムです。それはヒューズ (ユーザランドファイルシステム) を使用して実装されます。
これでsjisでマウントしたものをWindowsようにエクスポートすればいい。
ここでまた問題CentOSはこれのパッケージがない。。。
自分でビルドしなきゃなんだけどサーバー運用するマシンにビルド環境いれるのはなんか気持ち悪い。
なのでrpm作ってインストールしよう。
別のSDカードにもっかいCentOS焼いてラズパイにさしてそっちで作業。
http://rpmfind.net/linux/RPM/fedora/devel/rawhide/x86_64/f/fuse-convmvfs-0.2.6-16.fc28.x86_64.html
幸いfedora向けのrpmパッケージはあるみたいののでfuse-convmvfs-0.2.6-16.fc28.src.rpmをもらってくる。
1 | # curl -O -L https://download.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/source/tree/Packages/f/fuse-convmvfs-0.2.6-16.fc28.src.rpm |
展開1
2
3
4
5
6
7
8# rpm -ivh fuse-convmvfs-0.2.6-16.fc28.src.rpm
warning: fuse-convmvfs-0.2.6-16.fc28.src.rpm: Header V3 RSA/SHA256 Signature, key ID 429476b4: NOKEY
Updating / installing...
1:fuse-convmvfs-0.2.6-16.fc28 ################################# [100%]
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
warning: user mockbuild does not exist - using root
warning: group mockbuild does not exist - using root
ビルドに必要なパッケージのインストール
1 | # yum install gcc gcc-c++ make fuse-devel libattr-devel rpm-build |
ビルド
1 | # cd ~/rpmbuild |
fuse-convmvfs-0.2.6-16.el7.centos.armv7hl.rpm
こっちをいったん別マシンに引き上げて、またNFSサーバをインストールしたSDカードにいれかえて持ってきます。
インストール
1 | # yum localinstall fuse-convmvfs-0.2.6-16.el7.centos.armv7hl.rpm |
/binの下にインストールされました~。
使ってみる。
1 | # mkdir /mnt/hdd1_sjis |
これだと一回こっきりなので/etc/fstabに追記で自動マウントするように
1 | UUID=29b74cbb-382b-49ea-91c8-f1dcb9cae36c / ext4 defaults,noatime 0 0 |
/etc/exportsに追記1
2/mnt/hdd1 192.168.0.0/24(rw)
/mnt/hdd1_sjis 192.168.0.0/24(rw,fsid=1)
エクスポートもとがfuseだとfsidの指定が必要らしい。
これでようやく目的の環境が完成。