2021年1月3日日曜日

CentOS7(Raspberry Pi 3)にDLNAサーバを導入する

Raspberry Piに構築したNASには写真・動画・音楽が無数に置いてある。
普段はWindowsの標準アプリの他、iTunesやAIMPといったアプリケーションからNAS上のディレクトリを直接参照して利用している。
それでも問題ないのだが、せっかくなのでDLNAサーバを構築して、リソースを有効活用してみようと思う。

■本日の目標

Raspberry Pi 3にDLNAサーバを構築する

■主な作業環境

・HW:Raspberry Pi 3 Model B
・OS:CentOS Linux release 7.9.2009 (AltArch)

■インストールするアプリケーション

・MiniDLNA

■参考サイト


■事前準備

色々なサイトで情報を集めていたところ、yumで簡単にインストールできるようだったのだが、「Raspberry Pi 3 + CentOS7」の環境が特殊だったせいか、リポジトリに見当たらず・・・泣く泣くソースからビルドしてインストールすることにした・・・。
ざっと調べたところ、必要なアプリケーションやライブラリは次の通り。
早速インストールして、開発環境を構築していく。
・libexif
・libjpeg
・sqlite3
・libid3tag
・libFLAC
・libvorbis
・libuuid
・flac
・ffmpeg

■不足ライブラリを追加する

「yum list」で探していく・・・。 無印版(devel無し)もあるにはあるのだが、あとの作業でうまくビルドできなかったので、開発版(develあり)で代替した。
$ yum install libexif-devel
$ yum install libjpeg-turbo-devel
$ yum install sqlite-devel
$ yum install libid3tag-devel
$ yum install flac-devel
$ yum install libvorbis-devel
$ yum install libuuid-devel
$ yum install flac-devel

■ffmpegをインストールする

これもリポジトリに無く・・・gitから入手したソースでインストールした。
$ git clone git://source.ffmpeg.org/ffmpeg.git
$ ./configure --enable-shared --disable-programs
$ make
$ make install
お決まりの「configure→make→make install」の3コマンドをポンポンポンと実行しているように見えるが、「make」が2時間くらい掛かった・・・。
↓インストール完了↓
$ ffmpeg
ffmpeg version N-86222-g9fb293c Copyright (c) 2000-2017 the FFmpeg developers
  built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-11)
  configuration: --enable-gpl --enable-nonfree --enable-libx264 --enable-libmp3lame --enable-libfdk-aac --enable-libfreetype
  libavutil      55. 63.100 / 55. 63.100
  libavcodec     57. 96.101 / 57. 96.101
  libavformat    57. 72.101 / 57. 72.101
  libavdevice    57.  7.100 / 57.  7.100
  libavfilter     6. 90.100 /  6. 90.100
  libswscale      4.  7.101 /  4.  7.101
  libswresample   2.  8.100 /  2.  8.100
  libpostproc    54.  6.100 / 54.  6.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

■MiniDLNAのインストール
一通り揃ったのでMiniDLNAをインストールする。
これもgitから。
$ git clone https://git.code.sf.net/p/minidlna/git minidlna-git
$  autoreconf -i
$ ./configure
$ make
$ make install
$ ll /usr/local/sbin/
・・・中略・・・
-rwxr-xr-x. 1 root root 868304  1月 25 19:55 minidlnad
$ /usr/local/sbin/minidlnad -V
Version 1.2.1

■ライブラリの参照箇所を追加する

インストール作業で各種モジュールが /usr/local/lib に配置されたので、MiniDLNA用にパスを通し、リロードする。
$ echo '/usr/local/lib' > /etc/ld.so.conf.d/minidlna.conf
$ ldconfig

■MiniDLNA:環境設定ファイルを配置する

gitから取得した環境設定ファイルを /etc/minidlna.conf にコピーする。
$ cp ./minidlna.conf /etc/

■MiniDLNA:環境設定ファイルに個別設定を加える

$ vi /etc/minidlna.conf
当方は次の3点を変更した。
・media_dir:MiniDLNAが読み込むディレクトリと、読み込み対象ファイルの種類を指定する。
・friendly_name:利用クライアント上での表示名
・notify_interval:データベースの更新間隔
※ファイル内のコメントを読めば要領はわかる

■MiniDLNA:Serviceファイルを作成する

中身は概ね参考サイトそのままだが、自動起動できなかったので、「Type」を「forking」に変更し、末尾に「Install」の記述を追加した。
$ touch /usr/lib/systemd/system/minidlna.service
$ chmod 755 /usr/lib/systemd/system/minidlna.service
$ vi /usr/lib/systemd/system/minidlna.service
[Unit]
Description=minidlna server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/var/run/minidlna/minidlna.pid
EnvironmentFile=/etc/sysconfig/minidlna
ExecStart=/usr/local/sbin/minidlnad -R -f $CONFIG_FILE
ExecStop=/bin/kill -SIGTERM $MAINPID
[Install]
WantedBy=multi-user.target

■MiniDLNA:Serviceファイルが読み込む設定ファイルを作成する

$ touch /etc/sysconfig/minidlna
$ vi /etc/sysconfig/minidlna
CONFIG_FILE=/etc/minidlna.conf

■MiniDLNA:Serviceを有効化&開始する

ここからはServiceの有効化&起動のお作法。
$ systemctl enable minidlna
$ systemctl start minidlna
$ systemctl status minidlna
● minidlna.service - minidlna server
   Loaded: loaded (/usr/lib/systemd/system/minidlna.service; enabled; vendor preset: disabled)
   Active: active (running) since 木 1970-01-01 09:00:26 JST; 51 years 0 months ago
  Process: 648 ExecStart=/usr/local/sbin/minidlnad -R -f $CONFIG_FILE (code=exited, status=0/SUCCESS)
Main PID: 678 (minidlnad)
   CGroup: /system.slice/minidlna.service
           tq678 /usr/local/sbin/minidlnad -R -f /etc/minidlna.conf
           mq685 /usr/local/sbin/minidlnad -R -f /etc/minidlna.conf

1月 01 09:00:26 WSTD-RPI3 systemd[1]: Starting minidlna server...
1月 01 09:00:26 WSTD-RPI3 systemd[1]: Started minidlna server.

■MiniDLNA:文字化け対策

日本語で指定したファイルやフォルダが文字化けしてしまった。
ビルドのやり直しみたいな記事も見たが、こちらの環境ではデータベースファイルを再作成しただけで解消した。
$ systemctl stop minidlna
$ rm /var/cache/minidlna/files.db
rm: 通常ファイル `/var/cache/minidlna/files.db' を削除しますか? y
$ systemctl start minidlna
PC、スマホ、その他AV機器からDLNAで参照できることを確認して終了。
ちなみにWindowsPCのエクスプローラー上には
のようなアイコンが表示されていて、
プロパティを開くと、
のように表示される。
Previous Post
Next Post

post written by: