Raspberry Pi をジュークボックスに(その4)

ジュークボックス専用機の場合、SDメモリカードへの書き込み回数が気になる所なので、書き込みを行う動作を極力減らしたい。そこで、書き込みを行う動作を削り、動作中は必要でも電源を落とした後はなくても良い物はRAMに配置する事でSDメモリカードへの書き込みの頻度を下げるようにする。

SDメモリカードへ不要(?)に書き込みを行っている物で変更しても比較的安全な部分としてswapファイルの作成をやめる事が上げられる。デフォルトでは自動的にswapファイルを作成する様になっているので、それを止めるのだ。

$ sudo chkconfig dphys-swapfile --list
dphys-swapfile 0:off 1:off 2:on 3:on 4:on 5:on 6:off
$ sudo chkconfig dphys-swapfile off
$ sudo chkconfig dphys-swapfile --list
dphys-swapfile 0:off 1:off 2:off 3:off 4:off 5:off 6:off

ログファイルも必要最低限にしておきます。これはrsyslogの設定ファイル(rsyslog.conf)を修正する事で実現させます。

$ sudo vi /etc/rsyslog.conf
$ diff -U3 /etc/rsyslog.conf.org /etc/rsyslog.conf
--- /etc/rsyslog.conf.org 2013-07-28 11:09:07.662226004 +0900
+++ /etc/rsyslog.conf 2013-06-14 20:57:00.530257328 +0900
@@ -60,34 +60,34 @@
#
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
-#cron.* /var/log/cron.log
-daemon.* -/var/log/daemon.log
-kern.* -/var/log/kern.log
-lpr.* -/var/log/lpr.log
-mail.* -/var/log/mail.log
-user.* -/var/log/user.log
+# cron.* /var/log/cron.log
+# daemon.* -/var/log/daemon.log
+# kern.* -/var/log/kern.log
+# lpr.* -/var/log/lpr.log
+# mail.* -/var/log/mail.log
+# user.* -/var/log/user.log

#
# Logging for the mail system. Split it up so that
# it is easy to write scripts to parse these files.
#
-mail.info -/var/log/mail.info
-mail.warn -/var/log/mail.warn
-mail.err /var/log/mail.err
+# mail.info -/var/log/mail.info
+# mail.warn -/var/log/mail.warn
+# mail.err /var/log/mail.err

#
# Logging for INN news system.
#
-news.crit /var/log/news/news.crit
-news.err /var/log/news/news.err
-news.notice -/var/log/news/news.notice
+# news.crit /var/log/news/news.crit
+# news.err /var/log/news/news.err
+# news.notice -/var/log/news/news.notice

#
# Some "catch-all" log files.
#
-*.=debug;\
- auth,authpriv.none;\
- news.none;mail.none -/var/log/debug
+# *.=debug;\
+# auth,authpriv.none;\
+# news.none;mail.none -/var/log/debug
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\

一時保存系のファイルをRAM上に配置するために、RAM上にディレクトリを作成して、マウントさせます。少々やることが多いですが、順を追って1つずつ確実に設定していけば何とかなります。

/tmpディレクトリと/var/tmpディレクトリがまさにその領域に当たるので、OSの起動時にRAMディスク上にマウントするように変更します。また、ログファイルもRAM上に配置します。ログファイルについては賛否両論ありそうですが、電源OFFしたら消えるという方向で割り切ろうと思います。

実は、ログファイルに関しては少々厄介な所があって、基本的にRAM上に配置する様に出来ていないので、ディレクトリ または ファイルが既に存在する事が前提になっているソフトがあります。なので、現状がどのようになっているか確認しておきます。

$ ls -l /var/log/
total 885808
-rw-r--r-- 1 root root 29694 Jun 8 10:43 alternatives.log
drwxr-xr-x 2 root root 4096 May 26 01:37 apt
-rw-r----- 1 root adm 34998 Jun 14 20:57 auth.log
-rw-r----- 1 root adm 46265 Jun 10 06:25 auth.log.1
-rw-r--r-- 1 root root 282393 May 26 01:34 bootstrap.log
-rw-rw---- 1 root utmp 0 May 26 01:26 btmp
drwxr-xr-x 2 root root 4096 May 26 02:57 ConsoleKit
-rw-r----- 1 root adm 12676 Jun 14 20:26 daemon.log
-rw-r----- 1 root adm 52242 Jun 9 22:26 daemon.log.1
-rw-r----- 1 root adm 185592298 Jun 14 20:36 debug
-rw-r----- 1 root adm 185229511 Jun 9 18:56 debug.1
-rw-r----- 1 root adm 12669 Jun 14 20:26 dmesg
-rw-r----- 1 root adm 12669 Jun 14 20:17 dmesg.0
-rw-r----- 1 root adm 5008 Jun 13 23:01 dmesg.1.gz
-rw-r----- 1 root adm 4958 Jun 13 22:52 dmesg.2.gz
-rw-r----- 1 root adm 4950 Jun 13 22:48 dmesg.3.gz
-rw-r----- 1 root adm 4963 Jun 13 22:43 dmesg.4.gz
-rw-r--r-- 1 root root 444355 Jun 13 22:14 dpkg.log
-rw-r--r-- 1 root root 24048 Jun 8 08:56 faillog
-rw-r--r-- 1 root root 1654 May 26 02:13 fontconfig.log
drwxr-xr-x 2 root root 4096 May 26 01:30 fsck
-rw-r----- 1 root adm 185719573 Jun 14 20:36 kern.log
-rw-r----- 1 root adm 185552802 Jun 9 18:56 kern.log.1
-rw-rw-r-- 1 root utmp 292584 Jun 14 20:41 lastlog
-rw-r----- 1 root adm 0 May 26 02:57 lpr.log
-rw-r----- 1 root adm 0 May 26 02:57 mail.err
-rw-r----- 1 root adm 0 May 26 02:57 mail.info
-rw-r----- 1 root adm 0 May 26 02:57 mail.log
-rw-r----- 1 root adm 0 May 26 02:57 mail.warn
-rw-r----- 1 root adm 129421 Jun 14 20:26 messages
-rw-r----- 1 root adm 327024 Jun 10 06:25 messages.1
drwxr-xr-x 2 mpd audio 4096 Jun 8 08:56 mpd
drwxr-xr-x 2 root root 4096 May 26 02:57 news
drwxr-xr-x 2 ntp ntp 4096 May 19 2012 ntpstats
-rw-r--r-- 1 root root 158 Jun 7 21:35 regen_ssh_keys.log
drwxr-x--- 3 root adm 4096 Jun 8 10:51 samba
-rw-r----- 1 root adm 519018 Jun 14 20:36 syslog
-rw-r----- 1 root adm 146037926 Jun 14 06:25 syslog.1
-rw-r----- 1 root adm 753256 Jun 13 06:25 syslog.2.gz
-rw-r----- 1 root adm 2106097 Jun 12 06:25 syslog.3.gz
-rw-r----- 1 root adm 581 Jun 11 06:26 syslog.4.gz
-rw-r----- 1 root adm 13635896 Jun 10 06:25 syslog.5.gz
-rw-r----- 1 root adm 497 Jun 14 20:26 user.log
-rw-r----- 1 root adm 1268 Jun 9 11:07 user.log.1
-rw-rw-r-- 1 root utmp 336000 Jun 14 20:41 wtmp

ディレクトリになっているのは以下の項目 & 所有者、グループ

drwxr-xr-x 2 root root       4096 May 26 01:37 apt
drwxr-xr-x 2 root root 4096 May 26 02:57 ConsoleKit
drwxr-xr-x 2 root root 4096 May 26 01:30 fsck
drwxr-xr-x 2 mpd audio 4096 Jun 8 08:56 mpd
drwxr-xr-x 2 root root 4096 May 26 02:57 news
drwxr-xr-x 2 ntp ntp 4096 May 19 2012 ntpstats
drwxr-x--- 3 root adm 4096 Jun 8 10:51 samba

また、以下の3つは空ファイルでもよいので作っておく必要があるらしい。

-rw-rw---- 1 root utmp          0 May 26 01:26 btmp
-rw-rw-r-- 1 root utmp 292584 Jun 14 20:41 lastlog
-rw-rw-r-- 1 root utmp 336000 Jun 14 20:41 wtmp

さて、下準備にかかります。
RAMにそれぞれのディレクトリをマウントできる様にします。

$ df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 3.7G 2.4G 1.2G 68% /
/dev/root 3.7G 2.4G 1.2G 68% /
devtmpfs 212M 0 212M 0% /dev
tmpfs 44M 384K 44M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 88M 0 88M 0% /run/shm
/dev/mmcblk0p1 56M 19M 38M 33% /boot
/dev/sda1 1.9T 36G 1.8T 2% /mnt/share

$ sudo vi /etc/fstab
$ cat /etc/fstab
proc /proc proc defaults 0 0
/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
/dev/sda1 /mnt/share ntfs-3g defaults 0 0
tmpfs /tmp tmpfs defaults,size=32m 0 0
tmpfs /var/tmp tmpfs defaults,size=16m 0 0
tmpfs /var/log tmpfs defaults,size=32m 0 0
# a swapfile is not a swap partition, so no using swapon|off from here on, use dphys-swapfile swap[on|off] for that


$ df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 3.7G 2.4G 1.2G 68% /
/dev/root 3.7G 2.4G 1.2G 68% /
devtmpfs 212M 0 212M 0% /dev
tmpfs 44M 524K 44M 2% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 88M 0 88M 0% /run/shm
/dev/mmcblk0p1 56M 19M 38M 33% /boot
/dev/sda1 1.9T 36G 1.8T 2% /mnt/share
tmpfs 32M 0 32M 0% /tmp
tmpfs 16M 4.0K 16M 1% /var/tmp
tmpfs 32M 108K 32M 1% /var/log

$ free
total used free shared buffers cached
Mem: 448776 436424 12352 0 205796 189716
-/+ buffers/cache: 40912 407864
Swap: 0 0 0

先に調べておいたディレクトリ、ファイルを起動時に作成するように rc.local を編集します。

$ cat /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi

exit 0


$ sudo vi /etc/rc.local
$ cat /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi

mkdir -p /var/log/apt
mkdir -p /var/log/ConsoleKit
mkdir -p /var/log/fsck
mkdir -p /var/log/mpd
mkdir -p /var/log/news
mkdir -p /var/log/ntpstats
mkdir -p /var/log/samba
chown mpd:audio /var/log/mpd
chown ntp:ntp /var/log/ntpstats
chown root:adm /var/log/samba

touch /var/log/btmp
touch /var/log/lastlog
touch /var/log/wtmp
chown root:utmp /var/log/btmp
chown root:utmp /var/log/lastlog
chown root:utmp /var/log/wtmp

exit 0

リブートして、マウント出来ているか、ディレクトリ、ファイルは作成出来ているか確認します。リブートして立ち上がらなかったらショックですが、勇気を出して実行します。

$ df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 3.7G 2.4G 1.2G 68% /
/dev/root 3.7G 2.4G 1.2G 68% /
devtmpfs 212M 0 212M 0% /dev
tmpfs 44M 360K 44M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 88M 0 88M 0% /run/shm
/dev/mmcblk0p1 56M 19M 38M 33% /boot
/dev/sda1 1.9T 36G 1.8T 2% /mnt/share
tmpfs 32M 0 32M 0% /tmp
tmpfs 16M 0 16M 0% /var/tmp
tmpfs 32M 76K 32M 1% /var/log

$ ls -l /var/log
total 72
drwxr-xr-x 2 root root 40 Jun 14 21:52 apt
-rw-r----- 1 root adm 272 Jun 14 21:53 auth.log
-rw-r--r-- 1 root utmp 0 Jun 14 21:52 btmp
drwxr-xr-x 2 root root 40 Jun 14 21:52 ConsoleKit
-rw-r--r-- 1 root adm 12794 Jun 14 21:52 dmesg
drwxr-xr-x 2 root root 40 Jun 14 21:52 fsck
-rw-r--r-- 1 root utmp 292584 Jun 14 21:53 lastlog
-rw-r----- 1 root adm 18282 Jun 14 21:52 messages
drwxr-xr-x 2 mpd audio 40 Jun 14 21:52 mpd
drwxr-xr-x 2 root root 40 Jun 14 21:52 news
drwxr-xr-x 2 ntp ntp 40 Jun 14 21:52 ntpstats
drwxr-xr-x 2 root adm 60 Jun 14 21:53 samba
-rw-r----- 1 root adm 22497 Jun 14 21:52 syslog
-rw-r--r-- 1 root utmp 3072 Jun 14 21:53 wtmp

ちゃんとマウントされて、ディレクトリ、ファイルも作成されているっポイです。よかったよかった……と一安心したのもつかの間。スマホからMPDに繋がらないのです。試しにコマンドラインで、サービスをリスタートすると繋がるようになります。rc.local の呼ばれるタイミングが MPD を起動した後なのがダメなのかな~と、ものすごく安直に考え、MPDの起動を遅らせてみました。

$ sudo chkconfig mpd off
$ sudo vi /etc/rc.local

$ cat /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi

mkdir -p /var/log/apt
mkdir -p /var/log/ConsoleKit
mkdir -p /var/log/fsck
mkdir -p /var/log/mpd
mkdir -p /var/log/news
mkdir -p /var/log/ntpstats
mkdir -p /var/log/samba
chown mpd:audio /var/log/mpd
chown ntp:ntp /var/log/ntpstats
chown root:adm /var/log/samba

touch /var/log/btmp
touch /var/log/lastlog
touch /var/log/wtmp
chown root:utmp /var/log/btmp
chown root:utmp /var/log/lastlog
chown root:utmp /var/log/wtmp

service mpd start

exit 0

自動起動を止めて、rc.local の最後で起動させるようにしてみました。これで再びリブートしてみます……。

スマホから繋がる様になりました!!!!!
どうやら、MPDは起動時に所定のフォルダが存在しないとマズイようです。
スポンサーサイト

tag : RaspberryPi

tag : MPD

Raspberry Pi をジュークボックスに(その3)

音楽再生(MPD)専用機として作成している本機ですが、オリジナル設定に色々とプラスしていく一方でした。raspbian はデフォルトでは軽量PCとして使用する様に最適化されているので、サーバ用途(MPD, samba, SSH)で使うのに限定する場合、余分なプログラムが起動していたりします。なので、これらを停止(起動させないようにする)させようと試みました。

使用するのがSSH経由のアクセスのみなので、それ以外の部分はカットしておきます。具体的にはデフォルトでtty1~6が有効になっているのを使用するtty1以外を停止させます。

$ sudo vi /etc/inittab
$ cat /etc/inittab


# /sbin/getty invocations for the runlevels.
#
# The "id" field MUST be the same as the last
# characters of the device (after "tty").
#
# Format:
# :::
#
# Note that on most Debian systems tty7 is used by the X Window System,
# so if you want to add more getty's go ahead but skip tty7 if you run X.
#
1:2345:respawn:/sbin/getty --noclear 38400 tty1
#2:23:respawn:/sbin/getty 38400 tty2
#3:23:respawn:/sbin/getty 38400 tty3
#4:23:respawn:/sbin/getty 38400 tty4
#5:23:respawn:/sbin/getty 38400 tty5
#6:23:respawn:/sbin/getty 38400 tty6




デーモンにも不要なのがあります。電源を入れた時に有効になるデーモンで不要と思われるものは起動しないようにしておきます。

先ず、どんな設定になっているのか確認するために、chkconfigを入れて現状を確認してみました。

$ sudo apt-get install chkconfig
$ chkconfig --list
alsa-utils 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
bootlogs 0:off 1:on 2:on 3:on 4:on 5:on 6:off
bootmisc.sh 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
checkfs.sh 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
checkroot-bootclean.sh 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
checkroot.sh 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
console-setup 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
cron 0:off 1:off 2:on 3:on 4:on 5:on 6:off
dbus 0:off 1:off 2:on 3:on 4:on 5:on 6:off
dphys-swapfile 0:off 1:off 2:on 3:on 4:on 5:on 6:off
fake-hwclock 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
hostname.sh 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
hwclock.sh 0:off 1:off 2:off 3:off 4:off 5:off 6:off
ifplugd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
kbd 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
keyboard-setup 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
killprocs 0:off 1:on 2:off 3:off 4:off 5:off 6:off
kmod 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
lightdm 0:off 1:off 2:off 3:on 4:on 5:on 6:off
motd 0:off 1:on 2:on 3:on 4:on 5:on 6:off
mountall-bootclean.sh 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
mountall.sh 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
mountdevsubfs.sh 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
mountkernfs.sh 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
mountnfs-bootclean.sh 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
mountnfs.sh 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
mpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
mtab.sh 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
networking 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
nfs-common 0:off 1:off 2:off 3:off 4:off 5:off 6:off
ntp 0:off 1:off 2:on 3:on 4:on 5:on 6:off
plymouth 0:off 1:off 2:on 3:on 4:on 5:on 6:off
plymouth-log 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
procps 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
rc.local 0:off 1:off 2:on 3:on 4:on 5:on 6:off
rcS 0:off 1:off 2:off 3:off 4:off 5:off 6:off
rmnologin 0:off 1:off 2:on 3:on 4:on 5:on 6:off
rpcbind 0:off 1:off 2:off 3:off 4:off 5:off 6:off
rsync 0:off 1:off 2:on 3:on 4:on 5:on 6:off
rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
samba 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sendsigs 0:off 1:off 2:off 3:off 4:off 5:off 6:off
ssh 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sudo 0:off 1:off 2:on 3:on 4:on 5:on 6:off
triggerhappy 0:off 1:off 2:on 3:on 4:on 5:on 6:off
udev 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
udev-mtab 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
umountfs 0:off 1:off 2:off 3:off 4:off 5:off 6:off
umountnfs.sh 0:off 1:off 2:off 3:off 4:off 5:off 6:off
umountroot 0:off 1:off 2:off 3:off 4:off 5:off 6:off
urandom 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
x11-common 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on

$ runlevel
N 2


それぞれのランレベルに応じたデーモンの起動設定になります。で、SSHで入った時のランレベルはというと、"2"になっていました。先頭に"N"が付いているので、"2"で立ち上がってそのまま"2"を継続(それ以外のランレベルに変わっていない)している事を指します。

私は普段Windowsを使っていて、Linuxをガッツリと使い込んでいる訳ではないので、正直言ってどれが必要でどれが不要なのか判断がつかないのもありますが、そこはググってみて不要そうなものを止めて見ました。

$ sudo chkconfig plymouth off
$ sudo chkconfig triggerhappy off
$ sudo chkconfig motd off
$ sudo chkconfig dbus off

$ chkconfig --list
alsa-utils 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
bootlogs 0:off 1:on 2:on 3:on 4:on 5:on 6:off
bootmisc.sh 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
checkfs.sh 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
checkroot-bootclean.sh 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
checkroot.sh 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
console-setup 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
cron 0:off 1:off 2:on 3:on 4:on 5:on 6:off
dbus 0:off 1:off 2:off 3:off 4:off 5:off 6:off
dphys-swapfile 0:off 1:off 2:off 3:off 4:off 5:off 6:off
fake-hwclock 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
hostname.sh 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
hwclock.sh 0:off 1:off 2:off 3:off 4:off 5:off 6:off
ifplugd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
kbd 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
keyboard-setup 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
killprocs 0:off 1:on 2:off 3:off 4:off 5:off 6:off
kmod 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
lightdm 0:off 1:off 2:off 3:on 4:on 5:on 6:off
motd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
mountall-bootclean.sh 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
mountall.sh 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
mountdevsubfs.sh 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
mountkernfs.sh 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
mountnfs-bootclean.sh 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
mountnfs.sh 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
mpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
mtab.sh 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
networking 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
nfs-common 0:off 1:off 2:off 3:off 4:off 5:off 6:off
ntp 0:off 1:off 2:on 3:on 4:on 5:on 6:off
plymouth 0:off 1:off 2:off 3:off 4:off 5:off 6:off
plymouth-log 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
procps 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
rc.local 0:off 1:off 2:on 3:on 4:on 5:on 6:off
rcS 0:off 1:off 2:off 3:off 4:off 5:off 6:off
rmnologin 0:off 1:off 2:on 3:on 4:on 5:on 6:off
rpcbind 0:off 1:off 2:off 3:off 4:off 5:off 6:off
rsync 0:off 1:off 2:on 3:on 4:on 5:on 6:off
rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
samba 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sendsigs 0:off 1:off 2:off 3:off 4:off 5:off 6:off
ssh 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sudo 0:off 1:off 2:on 3:on 4:on 5:on 6:off
triggerhappy 0:off 1:off 2:off 3:off 4:off 5:off 6:off
udev 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
udev-mtab 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
umountfs 0:off 1:off 2:off 3:off 4:off 5:off 6:off
umountnfs.sh 0:off 1:off 2:off 3:off 4:off 5:off 6:off
umountroot 0:off 1:off 2:off 3:off 4:off 5:off 6:off
urandom 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on
x11-common 0:off 1:off 2:off 3:off 4:off 5:off 6:off S:on


念の為、再起動して一通りの動作を確認できたので、必要な処理を削ったりはしてなさそうです。

tag : RaspberryPi

tag : MPD

Raspberry Pi をジュークボックスに(その2)

その1MPDをインストールし、Raspbianに入っていたWAVファイルを再生することができました。しかし、このままでは曲を入れる場所がSDメモリカードだけというのと、外部から曲を入れるのに難儀しますので、USB-HDDを接続するのと、sambaをインストールしてLAN内からUSB-HDDへアクセス出来る様にします。

先ずはUSB-HDDをRaspbianに認識させます。と、その前に、今回使用するUSB-HDD(HD-LBF2.0TU2)は出荷時状態でFAT32でフォーマットされているので、Windowsに繋いで説明書にしたがい、NTFSでフォーマットします。曲データは1ファイルあたり数十MB単位になるので、小さいファイルを扱える必要はないでしょう。2TBもあるし…。

RaspbianにはNTFSを認識させる為に ntfs-3g をインストールします。

$ sudo apt-get install ntfs-3g

USB-HDDを繋いでrebootさせます。正確には、shutdownしてUSB-HDDを Raspberry Pi に繋いでUSB-HDDの電源を入れてから Raspberry Pi の電源を入れました。

$ dmesg
[ 0.000000] Booting Linux on physical CPU 0
[ 0.000000] Initializing cgroup subsys cpu
 :
 省略
 :
[ 3.448251] scsi0 : usb-storage 1-1.3:1.0
[ 3.919262] udevd[156]: starting version 175
[ 4.453669] scsi 0:0:0:0: Direct-Access BUFFALO External HDD 0000 PQ: 0 ANSI: 3
[ 8.925076] sd 0:0:0:0: [sda] 3907029168 512-byte logical blocks: (2.00 TB/1.81 TiB)
[ 8.939918] sd 0:0:0:0: [sda] Write Protect is off
[ 8.947000] sd 0:0:0:0: [sda] Mode Sense: 3b 00 00 00
[ 8.948173] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 8.990370] sda: sda1
[ 9.004826] sd 0:0:0:0: [sda] Attached SCSI disk
[ 9.014321] Registered led device: led0
[ 13.971836] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
[ 14.404269] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
[ 23.221257] smsc95xx 1-1.1:1.0: eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
[ 28.138587] Adding 102396k swap on /var/swap. Priority:-1 extents:2 across:507900k SS

どうやら、sda1として認識してくれたみたいです。
マウントしてみて中身を見られるか試してみます。

$ sudo mkdir /mnt/share
$ sudo mount -t ntfs-3g /dev/sda1 /mnt/share
$ ls -l /mnt/share

// ログを録るのを忘れていました…。

起動時にマウント出来る様にしてrebootしてみます。

$ sudo vi /etc/fstab
$ cat /etc/fstab
proc /proc proc defaults 0 0
/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
/dev/sda1 /mnt/share ntfs-3g defaults 0 0
# a swapfile is not a swap partition, so no using swapon|off from here on, use dphys-swapfile swap[on|off] for that

$ sudo shutdown -r now

再起動したのをみはからいSSHで接続し、マウントされている事を確認します。

$ df -k
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 3872456 1622724 2074036 44% /
/dev/root 3872456 1622724 2074036 44% /
devtmpfs 216132 0 216132 0% /dev
tmpfs 44880 364 44516 1% /run
tmpfs 5120 0 5120 0% /run/lock
tmpfs 89740 0 89740 0% /run/shm
/dev/mmcblk0p1 57288 18888 38400 33% /boot
/dev/sda1 1953512000 394276 1953117724 1% /mnt/share

続いて、sambaをインストールし、USB-HDDをLAN内のWindowsマシンからアクセス出来る様に設定ファイルを編集し、sambaをリスタートします。

$ sudo apt-get install samba
$ sudo vi /etc/samba/smb.conf
$ cat /etc/samba/smb.conf

 :
 省略
 :

[share]
comment = USB-HDD
path = /mnt/share
public = Yes
read only = No
writable = Yes
hosts allow = 192.168.3.
guest ok = Yes
force user = jujurou
create mode = 0666
directory mode = 0777

$ sudo service samba restart

これでLAN内のPCからUSB-HDDへアクセス出来る様になったはずです。
Windows PCから見えるか試してみました。

rpimpd_smb_share.png

見えているみたいです。
Windowsからフォルダ、ファイルの新規作成等もできました。このままNASとして使用するのも良しですが、今回はジュークボックス専用機とするので、USB-HDDには音楽データしか入れません。

USB-HDDの領域に音楽データ置き場を作り、MPDに認識させます。

$ mkdir /mnt/share/Music
$ cd /var/lib/mpd/music
$ sudo ln -s /mnt/share/Music .

これでMusicディレクトリ配下に置いた音楽データをMPDが認識出来る様になります。私の場合、音楽データの管理はソフトに任せるので、iTunesのMediaフォルダをこの場所に割り当てています。

iTunes_Media_folder.png

これで、音楽データを入れるところから再生までできた訳です。が、常に電源をONにしておくのももったいないし、Raspbianを少し最適化してみたいと思ってます。

Linuxをいきなり電源OFFするわけにもいかないので、一時しのぎとしてスマホにSSHソフト(JuiceSSH)をインストールして、shutdownしてます。

Screenshot_2013-06-26-21-41-53.png

tag : RaspberryPi

tag : MPD

Raspberry Pi をジュークボックスに(その1)

音楽再生用にSDメモリカード・トランスポートを作って結構月日がたった。作成当初はSDメモリカードの値段が安くなってきていたこともあり、CD感覚で入れ替えればいいや的に思っていたが、何かと不便になってきていた。ぶっちゃけるとSDメモリカードの入れ替えがめんどくさいのと、どのSDメモリカードにどの曲を入れたか忘れちゃうんですね。

PCで再生すれば入れ替え作業がなくなり良い感じになりそうな気もするのですが、音楽を聞くためにPCを起ち上げないといけないという煩わしさがネックとなるのです。それと、PCを使う場所が複数ある(ノートPCを使っているので)、というのもあります。

ふとした時、2つ買ってしまっていた Raspberry Pi の1つを何かに有効活用出来ないかとググっていると、いくつかの記事で「MPDで音楽再生」という内容が書かれていました。「MPD」って何だ? と思ったが「Music Player Daemon」のことで、ようは音楽プレーヤ(サーバ)なのです。「Daemon」なので実際に使う時はフロントエンドとなる「client」ソフトが必要となります。client側はネット経由でも操作できるので、スマートフォンからも操作できたりするみたいです(MPDriud, DroidMPD…等)。

MPDriud と DroidMPD (クリックでそれぞれのHPへ飛びます)

Screenshot_2013-06-24-20-15-46.png  Screenshot_2013-06-24-20-14-34.png

今更気がついのだけれども、巷で流行っている「Voyage Linux」の根幹は結局 MPD なのです。音楽再生に不要な要素を極力なくしたLinuxディストリビューションって事なんですね~。

Raspberry Pi で実現するには、USB-DAC、USB-HDD(NASでも可)があれば良く、clientはスマートフォンを使う事で簡素化するという構成でいけそうと判断しました。USB-DACはちょうど持て余し気味だった「トランス式USB-DAC」があります。USB-HDDは持ってないので購入する事にしました。欲張って2TBのHDD(HD-LBF2.0TU2)をポチりましたが、もっと減らせば一式丸々新規購入したとしても手頃な値段でそろえられます。

3点セットです。
構成としてはこれだけです。もちろん、電源とケーブル類はいりますが。

RIMG0472.jpg

Raspberry Pi には 公式ページからRaspbian(2013-05-25-wheezy-raspbian.zip)を取ってきてSDメモリカード(4GB)へ書き込みました。最低限の設定をしておきます。GUI何て眼中にないのでSSHから入って設定しています。

// アップグレード
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo raspi-config

// ユーザ追加
$ sudo adduser jujurou
$ sudo visudo
jujurou ALL=(ALL) NOPASSWD:ALL

// 初期ユーザ(pi)の停止
$ sudo userdel -r pi

// NTP設定
$ sudo vi /etc/ntp.conf
$ sudo /etc/init.d/ntpd restart

// ホスト名の変更
$ sudo vi /etc/hostname
$ sudo vi /etc/hosts

次に、USB-DAC(PCM2704)を認識させます。
先ずは何も繋いでいない現状を確認。

$ lsusb
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.

$ lsmod
Module Size Used by
snd_bcm2835 16304 0
snd_pcm 77560 1 snd_bcm2835
snd_seq 53329 0
snd_timer 19998 2 snd_pcm,snd_seq
snd_seq_device 6438 1 snd_seq
snd 58447 5 snd_bcm2835,snd_timer,snd_pcm,snd_seq,snd_seq_device
snd_page_alloc 5145 1 snd_pcm
leds_gpio 2235 0
led_class 3562 1 leds_gpio

$ aplay -l
aplay: device_list:252: no soundcards found...

$ cat /proc/asound/cards
0 [ALSA ]: BRCM bcm2835 ALSbcm2835 ALSA - bcm2835 ALSA
bcm2835 ALSA

一度電源を落としてUSB-DAC(PCM2704)を繋いで電源ONしました(無線LANのドングルを電源を落とさずに刺すと Raspberry Pi 自体がリセットされるというのに遭遇してからホットプラグを充てにしてません)。

$ lsusb
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 08bb:2704 Texas Instruments Japan

$ lsmod
Module Size Used by
snd_bcm2835 16304 0
snd_usb_audio 104097 0
snd_pcm 77560 2 snd_bcm2835,snd_usb_audio
snd_page_alloc 5145 1 snd_pcm
snd_hwdep 5929 1 snd_usb_audio
snd_usbmidi_lib 18067 1 snd_usb_audio
snd_seq_midi 4591 0
snd_seq_midi_event 6544 1 snd_seq_midi
snd_rawmidi 21160 2 snd_usbmidi_lib,snd_seq_midi
snd_seq 53329 2 snd_seq_midi_event,snd_seq_midi
snd_timer 19998 2 snd_pcm,snd_seq
snd_seq_device 6438 3 snd_seq,snd_rawmidi,snd_seq_midi
snd 58447 9 snd_bcm2835,snd_usb_audio,snd_hwdep,snd_timer,snd_pcm,snd_seq,snd_rawmidi,snd_usbmidi_lib,snd_seq_device
evdev 9426 1
leds_gpio 2235 0
led_class 3562 1 leds_gpio

$ aplay -l
aplay: device_list:252: no soundcards found...

$ cat /proc/asound/cards
0 [ALSA ]: BRCM bcm2835 ALSbcm2835 ALSA - bcm2835 ALSA
bcm2835 ALSA
1 [DAC ]: USB-Audio - USB Audio DAC
Burr-Brown from TI USB Audio DAC at usb-bcm2708_usb-1.2, full speed

何か、自動で認識して色々と起動してくれたみたいです。サウンドカード(?)としては1番が割り振られたみたいです。ただ、今まで Raspberry Pi にはSSHからしか繋いだことがなく、音出し確認の方法が分かりません。どうせMPDで再生する事になるのだし、わざわざ他のソフトで試してあげくにそれが原因で何かが起こるってのも嫌だったので、この段階での音出し確認はパスする事にしました。

$sudo apt-get install mpd mpc

[....] Starting Music Player Daemon: mpdlisten: bind to '[::1]:6600' failed: Failed to create socket: Address family not supported by protocol (continuing anyway, because binding to '127.0.0.1:6600' succeeded)
Failed to load database: Failed to open database file "/var/lib/mpd/tag_cache": No such file or directory
. ok

MPDをインストールすると自動的にサーバを起動するみたいなのだが、何かさりげなく、ほんとさりげなく上記メッセージを吐いてくれました。それも、最終的には"ok"と表示されるのがいやらしいです。ま~、何も設定してませんしね。

MPDの設定をしていきます。

$ sudo vi /etc/mpd.conf

// コメントアウト
#bind_to_address "localhost"

// デフォルトの出力はMPDでは使わないのでコメントアウト
#audio_output {
# type "alsa"
# name "My ALSA Device"
# device "hw:0,0" # optional
# format "44100:16:2" # optional
# mixer_device "default" # optional
# mixer_control "PCM" # optional
# mixer_index "0" # optional
#}

// 追加
audio_output {
type "alsa"
name "PCM2704 analog"
device "hw:1,0"
}

// コメントアウトしてあったのを復活させた
auto_update "yes"

audio_output は何個書いてもいいみたいだけど、MPDとして使用する場合はUSB-DAC(アナログ出力)からしか出力させないので、1つ分しか書いてないです。複数書いておくとクライアントソフト側で選択する事ができるので、そういった使い方をする人は使うデバイス全て列挙しておくと良いかもです。

"hw:1,0" の部分は左の数字が /proc/asound/cards にあった数字で、右の数字は…PCM2704の場合、0がアナログ出力、1がSPDIF出力みたいです。

サービス(デーモン)の開始と音出し確認(ようやく)をします。
USB-DACの先にオーディオアンプを繋いで…。

$ sudo service mpd start
$ sudo cp /usr/share/sounds/alsa/Front_Center.wav /var/lib/mpd/music/
$ mpc clear
$ mpc update
$ mpc ls | mpc add
$ mpc play

音声が再生されました。
音がでるとホッとしますね。

MPDはデフォルトで /var/lib/mpd/music 配下にあるファイルを検索するので、そこにテスト用にraspbianに入っている音声データをコピーしてみました。検索先は /etc/mpd.conf で変更が出来ます。

MPDの対応フォーマットは以下のコマンドで調べられます。
WAVとApple Lossless(.m4a)は対応しているみたいです(その他もインパイ)。

$ mpd -V
mpd (MPD: Music Player Daemon) 0.16.7

Copyright (C) 2003-2007 Warren Dukes
Copyright (C) 2008-2010 Max Kellermann
This is free software; see the source for copying conditions. There is NO
warranty; not even MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Supported decoders:

[mad] mp3 mp2
[vorbis] ogg oga
[oggflac] ogg oga
[flac] flac
[audiofile] wav au aiff aif
[faad] aac
[mpcdec] mpc
[wavpack] wv
[mikmod] amf dsm far gdm imf it med mod mtm s3m stm stx ult uni xm
[ffmpeg] 16sv 3g2 3gp 4xm 8svx aa3 aac ac3 afc aif aifc aiff al alaw amr anim apc ape asf atrac au aud avi avm2 avs bap bfi c93 cak cin cmv cpk daud dct divx dts dv dvd dxa eac3 film flac flc fli fll flx flv g726 gsm gxf iss m1v m2v m2t m2ts m4a m4b m4v mad mj2 mjpeg mjpg mka mkv mlp mm mmf mov mp+ mp1 mp2 mp3 mp4 mpc mpeg mpg mpga mpp mpu mve mvi mxf nc nsv nut nuv oga ogm ogv ogx oma ogg omg psp pva qcp qt r3d ra ram rl2 rm rmvb roq rpl rvc shn smk snd sol son spx str swf tgi tgq tgv thp ts tsp tta xa xvid uv uv2 vb vid vob voc vp6 vmd wav wma wmv wsaud wsvga wv wve

Supported outputs:

shout null fifo pipe alsa ao oss pulse jack httpd recorder

Supported encoders:

null vorbis lame wave flac

Supported protocols:

file:// http:// mms:// mmsh:// mmst:// mmsu:// gopher:// rtp:// rtsp:// rtmp:// rtmpt:// rtmps://

音出しまで出来ましたが、もっと利便性を良するために色々と設定していきます。USB-HDDをまだ繋いでないですしね。

tag : RaspberryPi

tag : MPD

黒ねこ時計 くろック D02
プロフィール

jujurou

Author:jujurou
運営HP:チャコの部屋
Twitter:jujurou

カレンダー
01 | 2017/02 | 03
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 - - - -
最新記事
最新コメント
カテゴリ
ユーザタグ

RaspberryPi ぺるけ Linux TRminiWatterPart4 トランジスタ式ミニワッター MPD イーサネットコンバータ OpenOCD DAC FON2405E buildroot FM3ペリフェラル BeagleBoneBlack library FM3評価ボード ODROID-U2 mingw OpenGL TL-WR700N Edison bitbake KiCad VMware シングル FM4 ミニワッター 6N6P 計測 

月別アーカイブ
ランキング

FC2 Blog Ranking

カウンター
検索フォーム
リンク
RSSリンクの表示
QRコード
QRコード
ライセンス
クリエイティブ・コモンズ・ライセンス
Twitter