概要
miniDLNAを試食してみたものの、なんとなくスキャン精度に難があった。
別のDLNAサーバー クライアントを探していたところで、
現在進行系のプロダクトのGerberaを試してみようと思った。
しかし、CentOS 7では手近なパッケージもなく。
ビルドしようにもCMAKEの要求バージョンを満たすことも出来なかった。。。。
(Raspberry Pi向けCentOS 8もまだ来ていないので、8は手が出せない。。。)
しかし、Gerberaコンテナもあったので、Dockerの勉強も兼ねて、
転がっていた仮想環境のCentOS 7でGerberaコンテナにチャレンジした次第。
そんな、Docker処女童貞の備忘録です。
環境
- x86_64 (Virtual Box上の仮想マシンでテスト)
- CentOS 7 (≒ 7.7.1908)
- Docker
- Gerbera (Docker image)
- cifs-utils
┌───────────────────────────────────────────┐
│ Virtual Box │
├───────────────────────────────────────────┤
│ ┌───────────────────────────────────────┐ │
│ │ Cent OS 7 (x86_64) │ │
│ ├───────────────────────────────────────┤ │
│ │ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ │ │
│ │ ┃ media folder ┃----------(SMB)---------->
│ │ ┃ (mount from external file server) ┃ │ │
│ │ ┗━━━━━━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━┛ │ │
│ │ ┌───────── │ ───────────────────────┐ │ │
│ │ │ docker │ │ │ │
│ │ ├───────── │ ───────────────────────┤ │ │
│ │ │ ┏━━━━━━━━┷━━━━━━━━━━━━━━━━━━━━━━┓ │ │ │
│ │ │ ┃ Gerbera container ┠─┼─┼ <-----(udp:1900)--------
│ │ │ ┃ ┠─┼─┼ <-----(tcp/udp:49152)---
│ │ │ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ │ │ │
│ │ └───────────────────────────────────┘ │ │
│ └───────────────────────────────────────┘ │
└───────────────────────────────────────────┘
構築
⓪ 方針
- オリジナルのイメージを使う(再ビルドなし)。
- 設定ファイルの変更あり。dockerからマウントして使用する。
- ポートはデフォルトから変更なし。
- udp:1900
- tcp/udp:49152
- メディア フォルダのパスの追加・変更もなし。
- ポートはデフォルトから変更なし。
- メディア フォルダ(実体)もdockerからマウントする。
- /rootがデフォルトで自動更新対象のパスになっているため、
/root配下にマウントする。
- /rootがデフォルトで自動更新対象のパスになっているため、
① Dockerイメージのダウンロード
- gerbera/gerbera - Docker Hub
https://hub.docker.com/r/gerbera/gerbera
docker pull gerbera/gerbera
② イメージから設定ファイルを抜き出し
イメージから直接はコピーが出来ないので、一時的にコンテナを作成する。
(コンテナ名:gerbera-tmp)
設定ファイルをコピー、後コンテナを削除する。
※ ファイルを抜き出すだけならネットワークが無くても問題はないが
コンテナの起動には失敗するため一応入れておく。
必要があればshellを立ち上げて、調査目的にも使用できるので。
docker run -dit --net=host --name gerbera-tmp gerbera/gerbera
docker ps -a
docker cp gerbera-tmp:/root/.config/gerbera/config.xml config.xml
docker stop gerbera-tmp
docker rm gerbera-tmp #早速コンテナ削除
③ 設定ファイルを編集
いくつか設定を変更する。
ここでは、デフォルトでの設定ではm4aの扱いがなく、
mp4がvideoとしてもaudioとしても扱われるため、その修正を行う。
(他サーバー名とか必要があれば、適宜修正を)
※ 注意
m4aは単純に動画のない音声トラックのみのmp4。
Appleが勝手に決めたm4aという拡張子は、正式な仕様ではないので、
必要だと感じない場合は変更不要。
vi config.xml
<?xml version="1.0" encoding="UTF-8"?>
<config version="2" xmlns="http://mediatomb.cc/config/2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mediatomb.cc/config/2 http://mediatomb.cc/config/2.xsd">
<import hidden-files="no">
<mappings>
<extension-mimetype ignore-unknown="no">
<!-- .mp4をvideoとして定義. -->
+ <map from="mp4" to="video/mp4"/>
<!-- .m4aをaudioとして定義. -->
+ <map from="m4a" to="audio/mp4"/>
<!-- .aacをaudioとして定義. -->
+ <map from="aac" to="audio/aac"/>
</extension-mimetype>
<mimetype-contenttype>
<!-- 音声コンテンツのMP4はm4aに変更. -->
- <treat mimetype="audio/mp4" as="mp4"/>
+ <treat mimetype="audio/mp4" as="m4a"/>
<!-- aac (ADTS AAC)を追加. -->
+ <treat mimetype="audio/aac" as="aac"/>
</mimetype-contenttype>
</mappings>
</import>
</config>
④ 編集した設定ファイルをホストOSに配置
環境に応じて、良い感じの場所に。
今回はイメージと同様のパスに配置。
(パーミッションも同様に664)
mkdir -p /root/.config/gerbera/
cp config.xml /root/.config/gerbera/config.xml
chmod 644 /root/.config/gerbera/config.xml
ls -la /root/.config/gerbera/config.xml
⑤ コンテナ起動
言語を指定しないで起動すると、国際文字の含むファイル名を
iconvで変換かけようとしてエラーになり、DBに登録されない。
しかし、コンテナにインストールされているロケールも最小限しかないため環境変数に「C.UTF-8」を指定する。
(そもそもUTF-8で処理が正しく進行していればiconvの変換は不要なので、ロケール自体はさして重要ではない)
docker run \
--privileged \
-dit \
-e LANG=C.UTF-8 \
--restart=always \
--net=host \
-p 1900:1900/udp \
-p 49152:49152 \
-p 49152:49152/udp \
-v /root/.config/gerbera/config.xml:/root/.config/gerbera/config.xml \
-v ${ホストのメディア フォルダ}:/root/${任意のフォルダ名} \
--name gerbera \
gerbera/gerbera
ロシア語でもiconvエラーが発生していた様なので、割とハマりやすい問題?
(デフォルトはPOSIX?ISO-8859-1?)
・Invalid or incomplete multibyte or wide character · Issue #170 · gerbera/gerbera
https://github.com/gerbera/gerbera/issues/170#issuecomment-354635224
⑨ 確認など
# コンテナの確認
docker ps -a
# log確認
docker logs -f gerbera
# shell起動
docker exec -it gerbera /bin/bash
感触
- 総括としては、あまり魅力がない
- 相性が悪いクライアントが多い
- DLNA
- Windows Media Player ⇒ 一覧の参照すらできない。
- windows版 MediaMonkey ⇒ 参照はできるが、再生ができない。
- Browser
- windows版 chrome ⇒ MP4(H264+AAC) などの動画が再生できない(ものがある)。
※ windows版 firefox、android版chromeなどは特に問題なく再生できる。
- windows版 chrome ⇒ MP4(H264+AAC) などの動画が再生できない(ものがある)。
- DLNA
- BubbleUPnP ServerのProxy経由では割と安定的 (BubbleUPnP Server 優秀すぎる)
- 折角のWEB UIの操作性が悪すぎ
- Ajaxメインで作られているため、メディアを開いたあと戻ると最初からやり直し。
- 今どきの時代で、、、そのUIて。。。
- サーバーとしての動作は、miniDLNAのほうが安定している様に感じる。。。
余談
- CIFSってSMBv1の中のDialectだったと思うのだけど。。。
- Windows 10ではSMBv1系の機能を「SMB1.0 / CIFS」と表現して、SMBv1もろとも殺しにかかっているんだけど。
- SMB2.0以降もSamba(UNIX系プロダクト)ではCIFSって言葉使い続けるのかな・・・・?
参考 (感謝)
-
Gerbera - A free media server. Stream your media to devices on your home network.
https://gerbera.io/ -
gerbera/gerbera - Docker Hub
https://hub.docker.com/r/gerbera/gerbera -
Dockerコンテナの作成、起動~停止まで - Qiita
https://qiita.com/kooohei/items/0e788a2ce8c30f9dba53 -
Docker上 で MiniDLNA を動かす - Qiita
https://qiita.com/flny/items/63976669a6f58976fa93 -
Dockerであそぶ(4)Apacheの設定を変える | TECH Projin
https://tech.pjin.jp/blog/2015/12/03/docker%E3%81%A7%E3%81%82%E3%81%9D%E3%81%B6%EF%BC%88%EF%BC%94%EF%BC%89apache%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%82%92%E5%A4%89%E3%81%88%E3%82%8B/ -
複数のMiniDLNAインスタンスを起動して、アクセス制御する - Qiita
https://qiita.com/flny/items/e328941d421a78669704