RaspyFiを試す(補足編)

その他の雑記です。

Raspberry PiをMPD(Music Player Daemon)サーバにする

再生音がたまに途切れたり、SDカードの寿命を縮める恐れがありますので、このログ出力を抑止するために、上に書いたとおり alsa-base.conf におまじないを記述します。 options snd-usb-audio nrpacks=1 と書いて再起動すると、無駄なログ出力が停止し、CPU負荷が下がります。また、この対策により、再生中にときどきプツッと音飛び/音切れが発生していた問題が解消されました。

NASの負荷が大きいとか、ネットワークが劣悪ということがなければ、音切れが起きることは少ないと思いますが、念のため追記しておきました。

root@Raspyfi:/etc# cd /etc/modprobe.d
root@Raspyfi:/etc/modprobe.d# ls
alsa-base-blacklist.conf  alsa-base.conf  fbdev-blacklist.conf  local.conf
root@Raspyfi:/etc/modprobe.d# vi alsa-base.conf
(略)
root@Raspyfi:/etc/modprobe.d# cat alsa-base.conf
# autoloader aliases
install sound-slot-0 /sbin/modprobe snd-card-0
install sound-slot-1 /sbin/modprobe snd-card-1
install sound-slot-2 /sbin/modprobe snd-card-2
install sound-slot-3 /sbin/modprobe snd-card-3
install sound-slot-4 /sbin/modprobe snd-card-4
install sound-slot-5 /sbin/modprobe snd-card-5
install sound-slot-6 /sbin/modprobe snd-card-6
install sound-slot-7 /sbin/modprobe snd-card-7
# Cause optional modules to be loaded above generic modules
install snd /sbin/modprobe --ignore-install snd && { /sbin/modprobe --quiet snd-ioctl32 ; /sbin/modprobe --quiet snd-seq ; : ; }
install snd-rawmidi /sbin/modprobe --ignore-install snd-rawmidi && { /sbin/modprobe --quiet snd-seq-midi ; : ; }
install snd-emu10k1 /sbin/modprobe --ignore-install snd-emu10k1 && { /sbin/modprobe --quiet snd-emu10k1-synth ; : ; }
# Keep snd-pcsp from beeing loaded as first soundcard
options snd-pcsp index=-2
# Keep snd-usb-audio from beeing loaded as first soundcard
#options snd-usb-audio index=-2
# Prevent abnormal drivers from grabbing index 0
options bt87x index=-2
options cx88_alsa index=-2
options snd-atiixp-modem index=-2
options snd-intel8x0m index=-2
options snd-via82xx-modem index=-2
options snd-usb-audio nrpacks=1
root@Raspyfi:/etc/modprobe.d#

このおまじないでも、NAS遅延による音切れは防げません。


Sambaの代わりにNFSでマウント出来ないか?ということですが、ターミナルからの作業が必要ですが可能です(参考サイト3)。
NFSサーバ側のエクスポート設定が終わっているものと仮定します。

root@Raspyfi:~# service rpcbind start
[ ok ] Starting rpcbind daemon....
root@Raspyfi:~# rpcinfo -p
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
root@Raspyfi:~# mkdir /mnt/NFS
root@Raspyfi:~# mount -t nfs 192.168.1.64:/pool04/music /mnt/NFS
root@Raspyfi:~# df -h
Filesystem                     Size  Used Avail Use% Mounted on
rootfs                         1.5G  671M  751M  48% /
/dev/root                      1.5G  671M  751M  48% /
devtmpfs                       108M     0  108M   0% /dev
tmpfs                           24M  504K   23M   3% /run
tmpfs                          5.0M     0  5.0M   0% /run/lock
tmpfs                          256M     0  256M   0% /run/shm
/dev/mmcblk0p1                  75M   19M   56M  26% /boot
Ramdisk                        256M     0  256M   0% /run/shm
//192.168.1.201/share2/iTunes  1.9T  788G  1.1T  43% /mnt/NAS/NASNE2
/dev/sda1                       30G  2.2G   28G   8% /mnt/USB/usb1
192.168.1.64:/pool04/music     1.2T  500G  696G  42% /mnt/NFS
root@Raspyfi:~# ln -s /mnt/NFS /var/lib/mpd/music/NFS
root@Raspyfi:~# ls -l /var/lib/mpd/music
total 4
lrwxrwxrwx 1 root root    9 Jul 14 05:27 NAS -> /mnt/NAS/
lrwxrwxrwx 1 root root    8 Oct 16 19:12 NFS -> /mnt/NFS
lrwxrwxrwx 1 root root    9 May 21 01:41 ramplay -> /run/shm/
lrwxrwxrwx 1 pi   pi      8 Jul 30 11:05 USB -> /mnt/USB
drwxrwxrwx 2 pi   pi   4096 Sep  7 21:02 WEBRADIO
root@Raspyfi:~#

/var/lib/mpd/music というのが mpdが認識する楽曲ファイルの置き場です。 「Browse」で出てくる最初のリストですね。
「UPDATE MPD DATABASE」をクリックしてしばらくすると、「NFS」という項目が出てくるはずです。

raspyfi21.jpg

あとは rpcbindが自動起動するようにして、/etc/fstabにNFSを追加すればOK、のはずなんですが上手くいっていません。

RaspbianFAQ - Raspbian

On the current version of Raspbian, rpcbind (part of the portmap package) does not start by default. This is presumably done to control memory consumption on our small systems. However, it isn't very big and we need it to make an NFS mount. To enable it manually, so we can mount our directory immediately:
sudo service rpcbind start
To make rpcbind start automatically at boot:
sudo update-rc.d rpcbind enable

update-rc.d コマンドだと「update-rc.d: using dependency based boot sequencing」とか言われてしまいます。
Debian/GNU Linux 6.0からはサービスの自動起動は insservコマンドを使うようなので、

root@Raspyfi:~# insserv rpcbind
insserv: warning: script 'K02shairport' missing LSB tags and overrides
insserv: warning: script 'shairport' missing LSB tags and overrides
root@Raspyfi:~# find /etc/ -name "*rpcbind"
/etc/rc5.d/S13rpcbind
/etc/rc2.d/S13rpcbind
/etc/rc6.d/K07rpcbind
/etc/rcS.d/S13rpcbind
/etc/rc4.d/S13rpcbind
/etc/rc3.d/S13rpcbind
/etc/insserv.conf.d/rpcbind
/etc/init.d/rpcbind
/etc/rc1.d/K07rpcbind
/etc/rc0.d/K07rpcbind

とやってみるのですが、リブートさせても

root@Raspyfi:~# rpcinfo -p
rpcinfo: can't contact portmapper: RPC: Remote system error - Connection refused

自動起動してくれてません。 ただ Sambaに対してNFSの方がメリットがあるかというと特にないので、そのまま放置しています。


NTP(Network Time Protocol)に、日本のサーバーを追加します。 /etc/ntp.conf の編集が終わったら、ntpdを再起動します。

root@Raspyfi:~# vi /etc/ntp.conf
(略)
root@Raspyfi:~# cat /etc/ntp.conf
# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help

driftfile /var/lib/ntp/ntp.drift
(中略)
# pool.ntp.org maps to about 1000 low-stratum NTP servers. Your server will
# pick a different set every time it starts up. Please consider joining the
# pool: <http://www.pool.ntp.org/join.html>
#server 0.debian.pool.ntp.org iburst
#server 1.debian.pool.ntp.org iburst
#server 2.debian.pool.ntp.org iburst
#server 3.debian.pool.ntp.org iburst
server ntp.nict.jp iburst
server ntp.jst.mfeed.ad.jp iburst

(以下、略)
root@Raspyfi:~# /etc/init.d/ntp restart
[ ok ] Stopping NTP server: ntpd.
[ ok ] Starting NTP server: ntpd.
root@Raspyfi:~# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
ntp-b3.nict.go. .NICT. 1 u 1 64 1 7.323 3614756 0.448
ntp3.jst.mfeed. 172.29.3.60 2 u 2 64 1 8.567 3614756 0.001

あとは「dpkg-reconfigure tzdata」 コマンドでタイムゾーンを設定したりしたくらいです。