sshfsマウントによるmpd再生できるシステム備忘録 - takobozu/NanoPi-NEO2 GitHub Wiki

作成に当たっての留意点

kernel build

カーネルのmenuconfigで以下のところにチェック

File system ---> [*]FUSE(Filesystem in Userspace) support

buildroot

buildrootのmenuconfigで以下のところにチェック

Target packages ---> Filesystem and flash utilities ---> [*] sshfs (FUSE)

QNAPに公開鍵認証でアクセスするための準備

NanoPi-NEO2へssh接続

出来上がったシステムをmicroSDカードに転送してNanoPi-NEO2を起動する。dhcpcdを走らせているので無事起動できていればsshクライアントからアクセスできるはず。ここではPuTTYを使う。

WARNING-POTENTIAL SECURITY BREACH!

なんてメッセージが出るが構わず はい(Y)。ユーザー:root パスワード:takobozuでログイン。俺がつくるシステムは完全にメモリ上で動作するため電源を落とせばknown_hostsなどの情報が吹き飛ぶため、毎回このログイン手続きを踏む必要がある。

公開鍵、秘密鍵の作成

# ssh-keygen -t rsa -b 4096(まあお好きに)

これで /root/.sshにid_rsa(秘密鍵),id_rsa.pub(公開鍵),known_hostsができる。このとき秘密鍵のパスフレーズをどうするか聞かれるがこれを設定すると起動時に公開鍵認証によるsshfsマウントができなくなるため何も入力せずエンターキーを押してやり過ごす。

公開鍵をQNAPにコピー

# ssh-copy-id [email protected](takobozuはQNAPのローカルユーザー名、192.168.xxx.xxxはQNAPのIPアドレス)

これでQNAPの/share/homes/takobozu/.sshにauthorized_keysができる。

あとでQNAPにtakobozuでログインして chmod 600 /share/homes/takobozu/.ssh/authorized_keysと権限設定しておく。

公開鍵等を一旦microSDカードへ退避

# mount -t vfat /dev/mmcblk1p1 /mnt

# cp /root/.ssh/* /mnt

# umount /mnt

rootfs.cpio.gzの展開

退避したid_rsa,id_rsa.pub,known_hostsは、上記の起動に使ったルートファイルシステム rootfs.cpio.gzを展開して入れ込む。

$ mkdir rootfs

$ cd rootfs

$ fakeroot

# zcat ../rootfs.cpio.gz | cpio -id(これで,rootfsディレクトリにルートファイルシステムが展開される。)

# mkdir -p mnt/music

# mkdir -p mnt/mpd

# mkdir -p var/lib/mpd/playlists

# cd var/lib/mpd

# ln -s ../../../mnt/music

# cd ../../../

# mkdir root/.ssh

# mv ../id_rsa root/.ssh

# mv ../id_rsa.pub root/.ssh

# mv ../known_hosts root/.ssh

# chmod 600 root/.ssh

# chmod 600 root/.ssh/id_rsa

configの作成

QNAPに次回から公開鍵認証(パスワードなど一切打つことなくログイン)できるようにするために準備する。

# nano root/.ssh/config

(中身の例)

Host NanoPiNEO2

User takobozu

Hostname 192.168.xxx.xxx

IdentityFile ~/.ssh/id_rsa

# nano etc/sshfsmount.sh(起動時にsshfsマウントするためのシェルスクリプト)

(中身の例)

#!/bin/sh

if ping -c 1 $1

then

sleep 1

sshfs NanoPiNEO2:/share/HDA_DATA/Multimedia/music /mnt/music

else

sleep 90

/etc/sshfsmount.sh 192.168.xxx.xxx

fi

# chmod 744 /etc/sshmount.sh

# echo /etc/sshfsmount.sh >> etc/init.d/S98prio

# find . | cpio --quiet -o -H newc | gzip -9 > ../rootfs.cpio.gz(rootfs.cpio.gzに固めなおし)

雑感

備忘録なので俺がわかるようにしか書いていないのであしからず。あと、autofsとの組み合わせをしたくて試してみたのだがどうしても自動マウントしてくれない。cifsやnfsとautofsの組み合わせは問題ないのだが、どこが悪くて自動マウントできないのかよくわからない。cat /var/log/messages してもそれらしいエラーもないしね。 とりあえず試したautofsの設定を簡単に書いておく。

(auto.master)

/- /etc/auto.misc timeout=90 --ghost

(auto.misc)

/mnt/music -fstype=fuse,ro :sshfs\#[email protected]\:/share/HDA_DATA/Multimedia/music

まあ、上記の要領で無事sshfsマウントによるシステムは完成した。起動時にはsshfsマウントによりQNAPの共有ディレクトリがNanoPi-NEO2の/mnt/musicディレクトリにマウントされて音楽再生もちゃんとできる。やったあ! めんどくさいけど一度作ってしまえばあとはbuildrootのrootfs-overlayを使って手抜きできるし。cantataで操作して音が出たときは感動もん。苦労した甲斐はあるというわけ。

2018/09/27追記 autofsが使えるようになったぞ

davfsをやっていて気づいたんだが、もしかしてmake busybox-menuconfigで

Linux System Utilities---> [*] mount----> [*]Support mount helpersという具合にチェックいれないといけないんじゃね?

と思ってシステムを作り直してやってみたら、ドンピシャ!

上記の (auto.misc)のように正確に入力すれば、エスケープシーケンスがちゃんと効いてautomountされたぜ。やったあ!

これで、cifs,sshfs,davfs,nfsとaudofsを組み合わせて自動マウントが行えるシステムができるようになった。めでたしめでたし。 いやー、すっきりした。

2018/09/29追記 sshfs+autofsによるmpd再生システムをリポジトリにアップ

ここにバックアップ用としてシステムをおいておく。 sshfsのくせにsshdデーモンは走らせていないので、sshによるログインはできない。ただし、telnetdデーモンが走っているのでtelnetによるログインはできるという変態仕様。(作者も変態なのでお似合いだ、root,パスワードなし) 詳しい人はこの状態でも使えるようにできると思うが、他人に使ってもらうためにアップしているわけではないのであしからず。

2018/09/30追記 scaling_cur_freqを固定する

Timer frequency 100Hzのカーネルを使って、NanoPi-NEO2のcpuクロックを最低にして音質の確認を行っている。NanoPi-NEO2ではアベイラブルな最低クロックは120MHz(120000) 最高クロックは1.008GHz(1008000)だ。そこで120MHzでどうなるかを確認した。

cd音源はなんの問題もない。24bit96KHz以上の音源になるとcantataで再生ボタンや停止ボタンをクリックしたときのみブツブツと2回くらい連続してノイズが入るが、アルバムの再生途中や曲の切り替わり時にもノイズは出ずに再生される。そこで、少しクロックを上げて240MHzにしてみた。

これはいい。なんの問題もなく再生される。音もなかなか。雰囲気がかわるのが面白い。省電力にもなっていい。

この設定は俺の場合こういうふうにしている。この設定を反映したルートファイルシステムを近々アップする。

echo powersave | tee /sys/devices/system/cpu/cpufreq/policy0/scaling_governor &>/dev/null

echo 240000 | tee /sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq &>/dev/null

2018/09/30追記2

うーん、24bit 192kHzの音源だとどうしてもcantataで再生ボタンをクリックしたときにブツとノイズが走る。scaling_min_freqを480MHzにしたらやっとなくなった。kernelはTimer frequency 100Hzのままだ。まあ、ハイレゾのコレクションの数は少ないので俺の場合は、240MHzで十分だ。 なんだろうなあ、この弦の音色。癖になる。