Raspberry pi セットアップその10 DLNAサーバの設定
※全般的なことは公式サイトの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を使用しました。クライアントとサーバは同一セグメントにないと動作しないので注意。
うちのテレビこういうことできたんだ(知らなかった)
合計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というものもあるようなので適宜触ってみようと思います。