0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Gerbera + DockerでDLNAサーバーを立てる

Last updated at Posted at 2019-10-12

概要

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
topology
┌───────────────────────────────────────────┐
│ 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配下にマウントする。

① Dockerイメージのダウンロード

shell
docker pull gerbera/gerbera

② イメージから設定ファイルを抜き出し

イメージから直接はコピーが出来ないので、一時的にコンテナを作成する。
(コンテナ名:gerbera-tmp)
設定ファイルをコピー、後コンテナを削除する。

※ ファイルを抜き出すだけならネットワークが無くても問題はないが
 コンテナの起動には失敗するため一応入れておく。
 必要があればshellを立ち上げて、調査目的にも使用できるので。

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という拡張子は、正式な仕様ではないので、
必要だと感じない場合は変更不要。

shell
vi config.xml
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)

shell
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の変換は不要なので、ロケール自体はさして重要ではない)

shell
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

⑨ 確認など

shell
# コンテナの確認
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などは特に問題なく再生できる。
  • 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って言葉使い続けるのかな・・・・?

参考 (感謝)

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?