LoginSignup
0
0

DLNA を使った動画共有サーバーを作成する (Alma Linux / minidlna / Samba / Old PC)

Last updated at Posted at 2024-05-13

やりたいこと

Alma Linix で DLNA Server を自作する。

・指示どおり作業すれば、誰でも作れる手順にする。
・実用性が欲しいので、一度作ってしまえば運用しやすい仕組みにする。

尚、ハードウェアは古いPCを再利用する。

[0] DLNA とは ?

そもそもDLNAって何だったっけ?という場合に備えて、引用させていただきました。

DLNA (Digital Living Network Alliance) は、
ホーム ネットワークを介して音楽、画像、動画 (HD コンテンツ) をストリームすることができます。

このページの説明のうち、一番上に記載のある、DMP機能のサーバーを作ります。

DMP (デジタル メディア プレーヤー)
UPnP/DLNA ネットワークを介して、他のデバイスから HD 動画、画像、音楽をストリームします。

※ 引用は、いずれもCyperLink社さんの上記のHPより。

[1] 構成図

DLNA構成 3.png

[2] 利用するOS/パッケージについて

Function OS / Package Version
OS AlmaLinux release 9.3 (Shamrock Pampas Cat) 5.14.0-362.24.2.el9_3.x86_64
DLNA Server MiniDLNA (aka ReadyDLNA) minidlna-1.3.3-3.el9.src.rpm
File Server (option) Samba samba-4.18.6-102.el9_3.alma.1.x86_64

[3] 利用したハードウェア

以下の構成で作りました。

項目 (A)検証環境 (B)低スペックVMで検証
RAM DDR3 16GB 2GB
CPU Intel Core i3 - 2.1 GHz x2 (Dual Core) x Hyper Threading 2x vCPU
Storage 500GB HDD 20GB vHDD

以下の手順は、
(A) で作業をした時の記録です。

※ 後から(B)の環境でも試しましたが特に問題なく動作しました。

<Storageについて>

  • 速度的にはHDDでもあまり気になりませんでした。
    (機能が限られているため、OS起動にあまり時間がかからない)

  • ただし、容量については、用途にあわせて大きめのものを推奨いたします。
    (動画ファイルをたくさん入れたい場合)

[4] OSのインストールと設定

  • Alma Linux 9.3

マルチユーザーモード/CUI で ISO からインストール。

ファイル直リンク(10GB)
https://ftp.riken.jp/Linux/almalinux/9.3/isos/x86_64/AlmaLinux-9.3-x86_64-dvd.iso

rikenのmirror site

  • IPアドレス/ネットワーク設定について

この手順書では、以下のIPアドレスを使用します。(環境にあわせて変更してください)

Host IP address
DLNA Server 192.168.2.200/24
  • epel-release をインストール
    minidlna は標準リポジトリには無かったため、eple-release を適用する。
sudo dnf install epel-release
  • OSをアップデート/アップグレード
sudo dnf update
sudo dnf upgrade
  • よく使うツールをインストール (オプション)
sudo dnf install nmap wget traceroute
  • ファイアウォールを無効にする(宅内での利用を想定しているため)
#サービスを停止する
sudo systemctl stop firewalld.service

#再起動時に、サービスが起動しないように無効化しておく
sudo systemctl disable firewalld.service

#設定が反映されいるか確認
sudo systemctl status firewalld.service
  • selinuxを無効にする

状態を確認する(デフォルト値の Enforcing が表示される)

$ getenforce
Enforcing 

設定を変更する

sudo cp /etc/selinux/config /etc/selinux/config.bak
sudo vi /etc/selinux/config

以下のように書き換える
#SELINUX=enforcing
SELINUX=permissive

一度、サーバを再起動する(下記のいずれかでOK)

sudo init 6
or
sudo shutdown -r now
or
sudo reboot

再起動したら、状態を確認する(Permissiveと表示されればOK)

$ getenfoce
Permissive

[5] minidlnaの設定

  • minidlna-1.3.3-3.el9.src.rpm をインストール
sudo dnf install minidlna
  • 依存ファイルを含めて 70パッケージ がインストールされました。
:point_right_tone5: 中身を見るにはココをクリックしてください :point_left_tone5:
インストール済み:
  cjson-1.7.17-1.el9.x86_64              codec2-1.0.3-1.el9.x86_64
  fdk-aac-free-2.0.0-8.el9.x86_64        fftw-libs-double-3.3.8-12.el9.x86_64
  flac-libs-1.3.3-10.el9_2.1.x86_64      game-music-emu-0.6.3-9.el9.x86_64
  gsm-1.0.19-6.el9.x86_64                highway-1.1.0-1.el9.x86_64
  ilbc-3.0.4-1.el9.x86_64                intel-mediasdk-21.3.5-1.el9.x86_64
  jxl-pixbuf-loader-0.7.0-1.el9.x86_64   lame-libs-3.100-12.el9.x86_64
  libX11-xcb-1.7.0-8.el9.x86_64          libXfixes-5.0.3-16.el9.x86_64
  libXxf86vm-1.1.4-18.el9.x86_64         libaom-3.8.2-1.el9.x86_64
  libavcodec-free-5.1.4-2.el9.x86_64     libavformat-free-5.1.4-2.el9.x86_64
  libavutil-free-5.1.4-2.el9.x86_64      libbluray-1.3.4-1.el9.x86_64
  libchromaprint-1.5.1-1.el9.x86_64      libdav1d-1.2.1-1.el9.x86_64
  libexif-0.6.22-6.el9.x86_64            libglvnd-1:1.3.4-1.el9.x86_64
  libglvnd-glx-1:1.3.4-1.el9.x86_64      libid3tag-0.15.1b-35.el9.x86_64
  libjxl-0.7.0-1.el9.x86_64              libmodplug-1:0.8.9.0-13.el9.x86_64
  libogg-2:1.3.4-6.el9.x86_64            libopenmpt-0.7.6-1.el9.x86_64
  librabbitmq-0.11.0-7.el9.x86_64        librist-0.2.7-1.el9.x86_64
  libsodium-1.0.18-8.el9.x86_64          libswresample-free-5.1.4-2.el9.x86_64
  libtheora-1:1.1.1-31.el9.x86_64        libudfread-1.1.2-2.el9.x86_64
  libunwind-1.6.2-1.el9.x86_64           libva-2.11.0-5.el9.x86_64
  libvdpau-1.5-1.el9.x86_64              libvmaf-2.3.0-2.el9.x86_64
  libvorbis-1:1.3.7-5.el9.x86_64         libvpx-1.9.0-7.el9_2.alma.1.x86_64
  libwayland-client-1.21.0-1.el9.x86_64  libwebp-1.2.0-8.el9_3.x86_64
  libxshmfence-1.3-10.el9.x86_64         lpcnetfreedv-0.2-11.el9.x86_64
  mbedtls-2.28.8-1.el9.x86_64            mesa-filesystem-23.1.4-1.el9.x86_64
  mesa-libGL-23.1.4-1.el9.x86_64         mesa-libglapi-23.1.4-1.el9.x86_64
  minidlna-1.3.3-3.el9.x86_64            mpg123-libs-1.26.2-5.el9.x86_64
  ocl-icd-2.2.13-4.el9.x86_64            opencore-amr-0.1.6-3.el9.x86_64
  openh264-2.3.1-1.el9.x86_64            openjpeg2-2.4.0-7.el9.x86_64
  openpgm-5.2.122-28.el9.x86_64          opus-1.3.1-10.el9.x86_64
  rav1e-libs-0.7.1-1.el9.x86_64          soxr-0.1.3-11.el9.x86_64
  speex-1.2.0-11.el9.x86_64              srt-libs-1.4.4-1.el9.x86_64
  svt-av1-libs-0.9.0-1.el9.x86_64        twolame-libs-0.3.13-19.el9.x86_64
  vapoursynth-libs-57-1.el9.x86_64       vo-amrwbenc-0.1.3-18.el9.x86_64
  xvidcore-1.3.7-9.el9.x86_64            zeromq-4.3.4-2.el9.x86_64
  zimg-3.0.5-1.el9.x86_64                zvbi-0.2.35-15.el9.x86_64

  • メディアファイル用のフォルダを作成

  ~フォルダの所有者を変更する (minidlnaは、minidlnaユーザ/グループで動作するため)

sudo mkdir /dlna
sudo chown minidlna:minidlna /dlna
  • minidlnaコンフィグの設定
# コンフィグの元ファイルをバックアップしておく
sudo cp /etc/minidlna.conf /etc/minidlna.conf.bak

# コンフィグを vi で開く
sudo vi /etc/minidlna.conf

以下の部分を書き換えます
#media_dir=/opt
media_dir=/dlna

#notify_interval=900
notify_interval=60
  • 上の notify 関連の設定を変更する
sudo cp /etc/sysctl.conf /etc/sysctl.conf.bak
sudo vi /etc/sysctl.conf

以下の行をファイルの末尾に追記する
fs.inotify.max_user_watches=2000
  • 設定ファイルの読み込み~サービスの状態確認
# reload だとエラーが出てしまいました
## sudo systemctl reload minidlna.service
## Failed to reload minidlna.service: Job type reload is not applicable for unit minidlna.service.

# サービスの再起動をして設定を読み込みます。
sudo systemctl restart minidlna.service

# 自動起動の設定
sudo systemctl enable minidlna.service

# 状態の確認
sudo systemctl status minidlna.service

以下のように表示されればOK

$ minidlna.service - MiniDLNA is a DLNA/UPnP-AV server software
     Loaded: loaded (/usr/lib/systemd/system/minidlna.service; enabled; preset: disabled)
     Active: active (running) since Wed 2024-03-06 12:07:43 JST; 6s ago
   Main PID: 1862 (minidlnad)
      Tasks: 2 (limit: 99763)
     Memory: 7.0M
        CPU: 90ms
     CGroup: /system.slice/minidlna.service
             mq1862 /usr/sbin/minidlnad -S

 3月 06 12:07:43 dama systemd[1]: Started MiniDLNA is a DLNA/UPnP-AV server software.
 3月 06 12:07:43 dama minidlnad[1862]: minidlna.c:1134: warn: Starting MiniDLNA version 1>
 3月 06 12:07:43 dama minidlnad[1862]: minidlna.c:1182: warn: HTTP listening on port 8200
 3月 06 12:07:43 dama minidlnad[1862]: monitor_inotify.c:223: warn: WARNING: Inotify max_

nmap でポートが開いているか確認しました (8200/tcp open trivnet1)

$ nmap localhost
Starting Nmap 7.92 ( https://nmap.org ) at 2024-04-25 09:52 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00022s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 998 closed tcp ports (conn-refused)
PORT     STATE SERVICE
22/tcp   open  ssh
8200/tcp open  trivnet1

[6] メディアの準備

  • /dlna フォルダに、再生したい動画や音楽ファイルをアップロードする

[6-1] SCP を使う場合

※ AlmaLinux 9.3 をインストールした場合、
標準で Port 22/tcp で SSHサーバーが起動しているはずなので、Linux側で特に準備は要りません。

※ファイルはWinSCPなどでアップロードする。 (Windowsの場合)

  • WinSCPから minidlna ユーザーでログインする

minidlna ユーザーは、minidlnaをインストールする時に自動で作成されます。
しかし、以下の理由で、ログインは出来ないようなっています。

ログインパスワードが設定されていない
シェルがnologinになっている

$ cat /etc/passwd | grep minidlna
minidlna:x:984:984:minidlna service account:/:/usr/sbin/nologin

というわけで、
設定を変更します。

  • ログインパスワードの設定
$ sudo passwd minidlna
ユーザー minidlna のパスワードを変更。
新しい パスワード:
新しい パスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
$
  • シェルの変更
$ sudo chsh minidlna
minidlna のシェルを変更します。
新しいシェル [/usr/sbin/nologin]: /bin/bash
シェルを変更しました。
$
  • ログインできるか確認 (TeraTermの画像です)

image.png

  • ログイン出来ることと、変更されたシェルの確認
$ w
 23:23:03 up  1:43,  3 users,  load average: 0.00, 0.00, 0.00
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
minidlna pts/1     14:31    5.00s  0.01s  0.00s w
$
$ echo $SHELL
/bin/bash
$
  • WinSCPでログインしてみます

image.png

アップロードする場所は、さきほど作成した ルート直下の /dlna フォルダ。

image.png

アップロード出来ると、上のように見えます。


[6-2] Samba を使う場合

  • Samba 基本設定
sudo dnf install samba

依存ファイルを含めて 7パッケージ がインストールされました。

インストール済み:
  cups-libs-1:2.3.3op2-21.el9.x86_64
  libnetapi-4.18.6-102.el9_3.alma.1.x86_64
  samba-4.18.6-102.el9_3.alma.1.x86_64
  samba-common-tools-4.18.6-102.el9_3.alma.1.x86_64
  samba-dcerpc-4.18.6-102.el9_3.alma.1.x86_64
  samba-ldb-ldap-modules-4.18.6-102.el9_3.alma.1.x86_64
  samba-libs-4.18.6-102.el9_3.alma.1.x86_64

サービスを起動します

sudo systemctl start smb.service
sudo systemctl start nmb.service
  • (オプション) 必要に応じてSamba用のユーザーを作成します

※この手順では、すべてのユーザーが自由に書き込みできる設定にしますので、とりあえずDLNAを使いたいだけなら、ユーザーは作成しなくてもOKです。

# 作成
sudo pdbedit -a username

# 確認
sudo pdbedit -L

● config設定

# 元ファイルのバックアップをとっておく
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

# ファイルの編集
sudo vi /etc/samba/smb.conf
  • 以下のように編集します。
# See smb.conf.example for a more detailed config file or
# read the smb.conf manpage.
# Run 'testparm' to verify the config is correct after
# you modified it.
#
# Note:
# SMB1 is disabled by default. This means clients without support for SMB2 or
# SMB3 are no longer able to connect to smbd (by default).

[global]
        workgroup = SAMBA
        
        security = user

        passdb backend = tdbsam

        printing = cups
        printcap name = cups
        load printers = yes
        cups options = raw
        
        ### 手動で追加分
        dos charset = CP932
				unix charset = UTF-8
				#interfaces = 192.168.2.0/24 eth0
				interfaces = 192.168.2.0/24 ens160
				hosts allow = 127.0.0.0/8 192.168.2.0/24
        hosts deny = all
        guest account = nobody
        map to guest = Bad User
				
								
[homes]
        comment = Home Directories
        valid users = %S, %D%w%S
        browseable = No
        read only = No
        inherit acls = Yes


### 以下、手動で追加分 ###

### 個別のアプリごとの共有フォルダを設定する
### path の対象フォルダは作成してパーミッションを設定すること

       
[minidlna]
       path = /dlna
       writable = yes
       guest ok = yes
       guest only = yes
       read only = no
       force create mode = 0777
       force directory mode = 0777
       public = yes

特に、interfaces の行に注意
 IPアドレス と インターフェース名 は、ご自身の環境に合わせて変更してください。
interfaces = 192.168.2.0/24 ens160 ← この行

---> nmcliコマンドで確認するのが簡単です。

$ nmcli
ens160: 接続済み から ens160
        "VMware VMXNET3"
        ethernet (vmxnet3), 00:0C:29:80:85:61, hw, mtu 1500
        ip4 デフォルト
        inet4 192.168.2.222/24
        route4 192.168.2.0/24 metric 100
        route4 default via 192.168.2.1 metric 100
  • 設定内容の確認

以下のコマンドで構文チェックが出来ます。

testparm
  • 設定ファイルの読み込み~サービスの状態確認
# サービスの再起動をして設定を読み込みます。
sudo systemctl restart smb.service
sudo systemctl restart nmb.service

# 自動起動の設定
sudo systemctl enable smb.service
sudo systemctl enable nmb.service

# 状態の確認
sudo systemctl status smb.service
sudo systemctl status nmb.service
  • 共有フォルダのパーミッション修正

さきほどAlmaLinuxのルートに作成した /dlna フォルダ ですが、
現在のパーミッションは以下のようになってるはずです。

$ ls -al /dlna
合計 0
drwxr-xr-x.  2 minidlna minidlna   6  4月 25 09:43 .
dr-xr-xr-x. 19 root     root     247  4月 25 09:43 ..

このままでは書き込みが出来ませんので、修正します。

# パーミッション変更
$ sudo chmod 777 /dlna/

# 確認
$ ls -al /dlna
合計 0
drwxrwxrwx.  2 minidlna minidlna   6  4月 25 13:53 .    <----この行
dr-xr-xr-x. 19 root     root     247  4月 25 09:43 ..

  • ファイルのアップロード

Windows の「ファイル名を指定して実行」からログインしてみます。

image.png

以下のように見えるはずです。
この中に、ファイルを放り込みます。

image.png

アップロードが出来ると、こんな感じになります。

image.png

  • アップロードしたファイルの確認

(例)アップロード後の /dlna フォルダの状態

$ ls -al /dlna
合計 17492
drwxrwxrwx.  2 minidlna minidlna       27  4月 25 14:03 .
dr-xr-xr-x. 19 root     root          247  4月 25 09:43 ..
-rwxrwxrwx.  1 nobody   nobody   17908660  9月  6  2020 DLNA-TEST.mp4

[8] メディアをMiniDLNAが認識しているかの確認

  • アップロードしたファイルが、minidlnaで認識できているか、ブラウザから確認できます。

IPアドレス は、環境にあわせて変更してください。 この例では 192.168.2.200/24 )

以下のような画面が表示されます。
アップロードしたファイルの種類と数があっていれば、minidlnaに正しく認識されています。

★★★メディアが認識されていない場合

この後の、
トラブルシューティング:「minidlnaまわり」 を確認してください。


[9] 別の端末から、メディアが再生できるか確認する

お手元のDLNAクライアントで確認してください。

ここでは スマホ版の vlc media player や PlayStation 3 を使って確認してみました。

[9-1] vlc media player (Android版)

  • 今回はAndroidで試してみました。

・同一ネットワークに接続して、アプリを起動したところ、DLNA Serverが見えました。

フォルダを移動すると、無事にファイルが見えました。

再生できました。

Screenshot_android.jpg

[9-2] PS3 (PlayStation 3)

今更ですが、PS3はDLNAクライアント機能があるので、試してみました。

テスト環境は、システムソフトウェア 4.91
(ずっと前のバージョンからDLNAクライアント機能は問題無いので、どのバージョンでも大丈夫と思います)

同一ネットワーク内で起動したところ、見えました。

フォルダを辿るとファイルも見えました。

再生も問題ありません。

[10] トラブルシューティング

[10-1] minidlna のトラブル対応

  • メディアファイルがブラウザ上でカウントされていない場合、minidlnaサーバがファイルを認識できていません。

その場合には、以下の方法で対応してみてください。

Step 1. ファイルのデータベースを削除する
Step 2. minidlnaサーバを再起動する

# ディレクトリの確認
$ sudo ls -l /var/cache/minidlna/
合計 152
-rw-r--r--. 1 minidlna minidlna 77824  3月 16 16:24 files.db
-rw-r--r--. 1 root     root     77824  3月  5 18:29 files.db.bak

# 以下のコマンドをそれぞれ実行する

sudo rm -f /var/cache/minidlna/files.db
sudo service minidlna restart

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

毎回、入力するのも面倒ですので、簡単なスクリプトにしてみました。

以下で、自動的にデータベースを削除して、結果を表示できます。

# ファイルの確認(作り方は後述します)
$ ls -l dlna-refresh.sh
-rwxr-xr-x. 1 user user 353  3月 17 08:46 dlna-refresh.sh
$

# スクリプトの実行
$ sudo sh /home/user/dlna-refresh.sh
Redirecting to /bin/systemctl restart minidlna.service
合計 192
drwxr-xr-x. 3 minidlna minidlna     18  3月 17 09:08 art_cache
-rw-r--r--. 1 minidlna minidlna 77824  3月 25 23:12 files.db   <----実行した日時になっていればOK

[tpy@alma-dlna ~]$

$

files.db ファイルについて:このファイルの日時がスクリプトを実行した時間になっていればOK
art_cacheフォルダについて:共有フォルダに、画像を置いた場合、自動で作成される場合があります。

  • スクリプトの中身 (/home/user/dlna-refresh.sh)
# ファイルの作成 (置き場所は管理用のユーザーのホームにしてみました。お好みの場所で。)
sudo vi /home/user/dlna-refresh.sh
#!/bin/bash

# Step 1: Remove ".db" to reflesh minidlna database.
rm -f /var/cache/minidlna/files.db

# Step 2: Restart minidlna to make and load a new .db file.
sudo service minidlna restart

# Step 3: Sleep a few seconds to wait for Step 2 to complete.
sleep 2

# Setep 4: Output the result to your display screen.
sudo ls -l /var/cache/minidlna/

[10-2] Samba のトラブル対応

  • 以下のようなエラーになる場合

image.png

上の設定で共有フォルダに書き込めない/開けない、と言った場合は、
おそらくLinux側のパーミッションの設定です。

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

※ゲストでも書き込みができない場合は、

Lunix上での対象フォルダのパーミッションを再度確認してみてください。

↑ その他ユーザーにも書き込み権が必要

$ ls -al
合計 24
dr-xr-xr-x.  19 root     root      247  3月  5 19:42 .
dr-xr-xr-x.  19 root     root      247  3月  5 19:42 ..
dr-xr-xr-x.   2 root     root        6  3月 25  2022 afs
lrwxrwxrwx.   1 root     root        7  3月 25  2022 bin -> usr/bin
dr-xr-xr-x.   5 root     root     4096  3月 25 09:54 boot
drwxr-xr-x.  20 root     root     3320  3月 28 19:08 dev
drwxrwxrwx.   9 minidlna minidlna  191  3月 28 19:45 dlna   <--- この行に注意

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


参考にさせていただいたサイト

  • Samba関連


最後に

最後までお読みいただきありがとうございました。

動画サイト隆盛のご時世に、需要があるかわかりませんが、ずっと気になったままになっていたので作ってみました。

実際手を動かしてみると、思っていた以上に楽しかったです。

せっかくなので記録に残しておこうと思い、こちらに投稿してみました。
どなたかのご参考にでもなれば幸いです。


最後の最後に、身も蓋も無い話なのですが、DLNAサーバーを立てるなら以下のフリーソフトが簡単で便利です。インストールしたら、共有したいフォルダを指定するだけなので、実用性も高いです。

それでも、Linuxでサーバーを立ててみることは、よい経験にもなりましたので、ご興味のある方がいらっしゃいましたら、どうぞ minidlna を使ってのサーバー作成をぜひお試しください。


<おしまい>

0
0
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
0