2015年1月26日月曜日

LOOX-U/C40 への Voyage MPD 0.9.5 の導入(2) sshfsとautofsによる接続

(前回の続き)
(2016.1.29 追記あり)

sshfs を使ってデータの入っている NAS に接続する 編.

やろうとしていることのイメージ図.

ssh でつながった先にあるサーバにマウントされている NAS のデータを,Voyage から読む.

yjo.domain.net に ユーザ yjo で ssh 接続できることが前提.
現時点では未完成.(read only マウントまでできたので一応一区切り)



公開鍵認証によるパスワードレス ssh 接続
ssh接続を公開鍵認証でパスワードレスで行うようにする.
まず,鍵を作る.

# ssh-keygen

passphrase はなし.これで /root/.ssh/ の下に id_rsa と id_rsa.pub が作成される.
id_rsa.pub を yjo.domain.net に転送しておく.

# scp /root/.ssh/id_rsa.pub yjo@yjo.domain.net:/home/yjo

yjo.domain.net にユーザ yjo でログインし,公開鍵を信頼できるキーに追加する.

yjo$ cat id_rsa.pub >> .ssh/authorized_keys

Voyage に戻って,ssh 接続のための設定ファイルを作る.

# nano /root/.ssh/config

中身は以下の通り.

Host yjo.domain.net
  user root
  Hostname yjo.domain.net
  IdentityFile /root/.ssh/id_rsa

これで ssh で Voyage から yjo.domain.net にパスワードなしで接続できるはず.

# ssh yjo@yjo.domain.net

これでいきなり接続できることを確認.

sshfs と autofs のインストール
ここからが今回のキモとなるところ.
音源データの入ったNASは,ssh で外からも接続できるようにしてあるサーバにマウントされている.そこで,sshfs を使って mpd マシンからこれをマウントして使うようにすれば,ssh接続の可能なところからならどこからでも使えるようになるはず,という作戦.
接続先のサーバのURLを yjo.domain.net とし,/mnt/NAS/music/mp3 以下を,mpd のデフォルトのデータディレクトリ /var/lib/mpd/music/ の下の mp3 にマウントする.このサーバにはユーザ yjo が ssh でログインでき,もちろん,yjo がデータディレクトリが読めるようになっている.

まず,sshfs と autofs をインストール.

# apt-get install sshfs
# apt-get install autofs

試した時点では最新版がすでにインストールされていた.これでautofsサービスもとりあえずスタートする (設定されていないのでこの時点では役に立たない).

/etc/auto.master の最後に次の行を追記.

/var/lib/mpd/music /etc/auto.sshfs --timeout 0 --ghost

これで,最初のディレクトリの下に,その後の指定に従ったディレクトリがマウントされるようになる.--timeout 0 は自動切断なし,--ghost はマウント前でもとりあえず当該名のディレクトリは見える状態になっている.細かい設定は /etc/auto.sshfs の方で.

/etc/auto.sshfs を作成.中身は,

mp3 -fstype=fuse,ro,allow_other :sshfs\#yjo@yjo.domain.net\:/mnt/NAS/music/mp3/

これで auto.master で指定したベースディレクトリの下に mp3 というサブディレクトリができ,その中身が yjo.domain.net の /mnt/NAS/music/mp3/ 以下となる.

本当はこれを read only でマウントしたいのだが,書式が不明.sshfs コマンドの場合は -o ro でいけるので,ここでの書き方を調べているところ.(赤字の ro オプションを付ければOK)

autofs を再起動.

# /etc/init.d/autofs restart

ls で /var/lib/mpd/music/mp3 以下が見えることを確認.

これで mpd は認識できるはずなので,適当なクライアントからデータベースの構築をしてみる.

(2016.1.29追記)
autofs の方は timeout なしにしているが,データのやりとりが何もおこらないでいると,そもそもの ssh の方が切断されてしまうことがある.その結果,ポーズや停止の時間が長いとファイルが読めなくなることがおこる.これを抑止するために,定期的にサーバ側とパケットのやりとりを行う必要がある.これは /etc/ssh/ssh_config を修正して,以下の行を加えてやればよい.

ServerAliveInterval 30

これで30秒に1回,パケットのやりとりがおこって接続が維持される.
(nmuraoka師の示唆による)


0 件のコメント:

コメントを投稿