Raspberry pi セットアップその10 DLNAサーバの設定

860

※全般的なことは公式サイトのFAQを参照。
 

1. 概要

 
私はゲームとか大量のムービーデータの所有とかホームシアターだとかには殆ど興味がなく、DLNAなんかも初めて触ってみたのですが、……いやあ、便利ですねえ。しかしさすがに DNS, DHCP, WEB, Proxy, sambaといろいろやらせている Raspberry pi に DLNAまでプラスしたら最大で load average 12だとか 14だとかになってインフラサービスを停止に追い込むほどになってしまったので、結局1台目の piに DNS, DHCP, WEB, Sambaを、2台目に Proxy, VPN, DLNAをやらせています。このため、設定は 1台目の sambaディレクトリをマウントするところから始めます。2台目のホスト名は tembikaiです。
 

2. sambaディレクトリのマウント

 

マウントポイントを作成します。

[root@tembikai]:~# mkdir /mnt/samba
[root@tembikai]:~# chmod -c 777 /mnt/samba

 
/etc/fstabを編集します。セキュリティ上の問題があるため、マウント時に必要なパスワードは別のファイルに保存して rootのみ読み書き可能にします。

[root@tembikai]:~# vi /etc/fstab

 

proc            /proc           proc    defaults          0       0
/dev/mmcblk0p1  /boot           vfat    defaults          0       2
/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1
//172.16.0.225/storage  /mnt/samba      cifs    credentials=/etc/sambapasswd 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

 
パスワードファイルを編集します。

[root@tembikai]:~# vi /etc/sambapasswd

 

username=username
password=password

[root@tembikai]:~# chmod -c 600 /etc/sambapasswd

 
ファイルのフルコントロールが行えるように、sambaサーバと同じようにユーザの所属グループを調整します。

[root@tembikai]:~# usermod -G www-data username

 
マウントして正常にファイルがみえるか確認します。

[root@tembikai]:~# mount -a

 

3. DLNAサーバソフトのインストール

 
minidlnaをインストールします。
 

[root@tembikai]:~# apt-get -y install minidlna

 
設定ファイルを編集します。キャッシュとログはそのままだと SDカードの寿命を縮めそうなので、せっかくマウントした sambaディレクトリに吐くようにします。
 
まず再生するディレクトリをジャンルごとに設定します。
 

(前略)
# If you want to restrict a media_dir to a specific content type, you can
# prepend the directory name with a letter representing the type (A, P or V),
# followed by a comma, as so:
#   * "A" for audio    (eg. media_dir=A,/var/lib/minidlna/music)
#   * "P" for pictures (eg. media_dir=P,/var/lib/minidlna/pictures)
#   * "V" for video    (eg. media_dir=V,/var/lib/minidlna/videos)
#
# WARNING: After changing this option, you need to rebuild the database. Either
#          run minidlna with the '-R' option, or delete the 'files.db' file
#          from the db_dir directory (see below).
#          On Debian, you can run, as root, 'service minidlna force-reload' instead.
media_dir=A,/mnt/samba/Media/music
media_dir=P,/mnt/samba/Media/Camera
media_dir=V,/mnt/samba/Media/movie

 
データベース、キャッシュ、ログを吐くディレクトリを設定します。
 

# Path to the directory that should hold the database and album art cache.
db_dir=/mnt/samba/DLNA

# Path to the directory that should hold the log file.
log_dir=/mnt/samba/DLNA

 
ネットワークの設定をします
 

# Network interface(s) to bind to (e.g. eth0), comma delimited.
network_interface=eth0

# IPv4 address to listen on (e.g. 192.0.2.1).
listening_ip=172.16.0.220

# Port number for HTTP traffic (descriptions, SOAP, media transfer).
port=8200

 
メディアを更新する設定を行います
 

# Automatic discovery of new files in the media_dir directory.
inotify=yes

(中略)

# Notify interval, in seconds.
notify_interval=1800

 
一度に参照できるファイル数にカーネルの制限(8192個)がありエラーとなるので、とりあえず10倍にしておきます。
 

[root@tembikai]:~# sysctl fs.inotify.max_user_watches=81920

 
 
再起動しても有効になるように /etc/syscl.confにも記述します。
 

[root@tembikai]:~# vi /etc/sysctl.conf

 
末尾にこの行を加えます。
 

fs.inotify.max_user_watches = 81920

 
sambaでマウントしたディレクトリにデータベース、キャッシュ、ログを吐くディレクトリを作成します。
 

[root@tembikai]:~# mkdir /mnt/samba/DLNA

 
minidlnaユーザと(念のため)rootに、sambaディレクトリに書き込めるグループを設定します。
 

[root@tembikai]:~# usermod -G www-data minidlna
[root@tembikai]:~# usermod -G www-data root

 
すでに起動している minidlnaサーバに下記コマンドを送れば新しい設定で再起動されます。問題がなければ設定したディレクトリにデータベース、キャッシュ、ログが生成されます。すべてスキャンが終わるまでかなりの時間がかかりますので、ゆっくり待ちましょう。

[root@tembikai]:~# service minidlna force-reload

 

4. クライアントの動作確認

 
今回、クライアント(リモコン)は Android上で動く MediaHouse-Proを使用しました。クライアントとサーバは同一セグメントにないと動作しないので注意。
 
Screenshot_2013-09-29-16-14-51 Screenshot_2013-09-29-17-29-48
 
うちのテレビこういうことできたんだ(知らなかった)
 
DSC_2484
 
合計50GB程度のメディアの更新にだいたい50分くらいかかりました。
 

[2013/09/29 17:06:33] minidlna.c:926: warn: Creating new database...
[2013/09/29 17:06:34] minissdp.c:71: error: setsockopt(udp, IP_ADD_MEMBERSHIP): ????????????
[2013/09/29 17:06:34] minissdp.c:121: warn: Failed to add multicast membership for address 172.16.0.220
[2013/09/29 17:06:34] minidlna.c:1006: warn: HTTP listening on port 8200
[2013/09/29 17:06:34] scanner.c:727: warn: Scanning /mnt/samba/Media/music
[2013/09/29 17:21:30] tagutils/tagutils-mp3.c:586: warn: File too small. Probably corrupted. [/mnt/samba/Media/music/notag_mp3/march/bunretu.mp3]
[2013/09/29 17:21:30] metadata.c:373: warn: Cannot extract tags from /mnt/samba/Media/music/notag_mp3/march/bunretu.mp3!
[2013/09/29 17:21:30] scanner.c:499: warn: Unsuccessful getting details for /mnt/samba/Media/music/notag_mp3/march/bunretu.mp3!
[2013/09/29 17:24:53] scanner.c:798: warn: Scanning /mnt/samba/Media/music finished (1301 files)!
[2013/09/29 17:24:53] scanner.c:727: warn: Scanning /mnt/samba/Media/Camera
[2013/09/29 17:50:50] scanner.c:798: warn: Scanning /mnt/samba/Media/Camera finished (4776 files)!
[2013/09/29 17:50:50] scanner.c:727: warn: Scanning /mnt/samba/Media/movie
[2013/09/29 17:52:37] scanner.c:499: warn: Unsuccessful getting details for /mnt/samba/Media/movie/anime/lumi_schooldays_cm.mpg.mpg!
[2013/09/29 17:54:00] scanner.c:798: warn: Scanning /mnt/samba/Media/movie finished (5030 files)!
[2013/09/29 17:54:04] playlist.c:125: warn: Parsing playlists...
[2013/09/29 17:54:24] playlist.c:258: warn: Finished parsing playlists.

 
気になる負荷ですが、初回のメディアスキャン中は sambaサーバ側 DLNAサーバ側ともに 1.5~1.7程度、プレイ時は大きなデータを頻繁にうごかしても sambaサーバ側で 0.6、DLNAサーバ側で 0.1程度でした。これは sambaも 2号機にやらせたほうがいいかな?
 
minidlnaのデータベース操作は minidlna editorというものもあるようなので適宜触ってみようと思います。