やりたいこと
Alma Linux で DLNA Server を自作する。
・手順どおり作業すれば、誰でも作れる仕様にする。
・実用性が欲しいので、一度作ってしまえば運用しやすい仕組みにする。
尚、ハードウェアは古いPCを再利用する。
[0] DLNA とは ?
そもそもDLNAって何だったっけ?という場合に備えて、引用させていただきました。
DLNA (Digital Living Network Alliance) は、
ホーム ネットワークを介して音楽、画像、動画 (HD コンテンツ) をストリームすることができます。
このページの説明のうち、一番上に記載のある、DMP機能のサーバーを作ります。
DMP (デジタル メディア プレーヤー)
UPnP/DLNA ネットワークを介して、他のデバイスから HD 動画、画像、音楽をストリームします。
※ 引用は、いずれもCyperLink社さんの上記のHPより。
[1] 構成図
[2] 利用するOS/パッケージについて
Function | OS / Package | Version |
---|---|---|
OS | AlmaLinux release 9.4 (Seafoam Ocelot) | 5.14.0-427.13.1.el9_4.x86_64 |
DLNA Server | MiniDLNA (aka ReadyDLNA) | minidlna-1.3.3-3.el9.x86_64.rpm |
File Server (option) | Samba | samba-4.19.4-105.el9_4.x86_64.rpm |
[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.4
マルチユーザーモード/CUI で ISOファイル からインストール。
・インストール時の「ソフトフェアの選択」にて、以下の項目を選択してください。
(画像右側の「選択した環境用のその他のソフトウェア」は何も選択しない)
ファイル直リンク(10GB)
https://ftp.riken.jp/Linux/almalinux/9.4/isos/x86_64/AlmaLinux-9.4-x86_64-dvd.iso
rikenのmirror site
ご注意:このリンク先は、時期によって最新のものに入れ替わるとおもいます
https://ftp.riken.jp/Linux/almalinux/9/isos/x86_64/
- IPアドレス/ネットワーク設定について
この手順書では、以下のIPアドレスを使用します。(環境にあわせて変更してください)
ホスト名 | IPアドレス | ネットマスク | ゲートウェイ | DNSサーバー |
---|---|---|---|---|
DLNA Server | 192.168.2.200 | 24 | 192.168.2.1 | 192.168.2.1, 8.8.8.8 |
※表記は、AlmaLinuxインストール時のものと統一させています。
※ネットマスクは、 "/24" (255.255.255.0)と同じ意味です。
※DNSサーバーは、ご自宅のルータと、GoogleパブリックDNSを入れておけば大体困らない想定。2つ以上の場合は、カンマ区切り(, )を忘れずに!
-
epel-release をインストール
minidlna は標準リポジトリには無かったため、eple-release を適用する。
sudo dnf install epel-release
- OSをアップデート/アップグレード
sudo dnf update
sudo dnf upgrade
- よく使うツールをインストール (オプション)
sudo dnf install nmap traceroute sysstat
- ファイアウォールを無効にする(宅内での利用を想定しているため)
#サービスを停止する
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
以下のように書き換える (以下2つのどちらのパターンでもOK)
(viで直接編集する場合)
sudo vi /etc/selinux/config
#SELINUX=enforcing
SELINUX=permissive
(sedで置き換える場合)
# 置き換え
sudo sed -i "s/SELINUX=enforcing/SELINUX=permissive/g" /etc/selinux/config
# 確認
sudo cat /etc/selinux/config
一度、サーバを再起動する(下記のいずれかでOK)
sudo init 6
or
sudo shutdown -r now
or
sudo reboot
再起動したら、状態を確認する(Permissiveと表示されればOK)
$ getenfoce
Permissive
[5] minidlnaの設定
- minidlna をインストール
sudo dnf install minidlna
- 依存ファイルを含めて 70パッケージ がインストールされました。
中身を見るにはココをクリックしてください
インストール済み:
cjson-1.7.18-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.2.0-2.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-9.el9.x86_64 libXfixes-5.0.3-16.el9.x86_64
libXxf86vm-1.1.4-18.el9.x86_64 libaom-3.9.0-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.11-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.20.0-1.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.3.3-1.el9.alma.1.x86_64
mesa-libGL-23.3.3-1.el9.alma.1.x86_64 mesa-libglapi-23.3.3-1.el9.alma.1.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-3.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インストール時に自動で作成されているはず)
cat /etc/passwd | grep minidlna
#以下のよう表示されることを確認
minidlna:x:986:986:minidlna service account:/:/usr/sbin/nologin
cat /etc/group | grep minidlna
#以下のよう表示されることを確認
minidlna:x:986:
- メディアファイル用のフォルダを作成
~フォルダの所有者を変更する (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
※グリーンの箇所が、enabled と active (runnning) になっているか確認する
nmap でポートが開いているか確認します。一番下の行:[8200/tcp open trivnet1] があればOK。
$ 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.4 をインストールした場合、
標準で 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
シェルを変更しました。
$
-
SSHでログインできるか確認
(ここでは TeraTermを使っていますが、お好みのアプリでOK)
- ログイン出来ることと、変更されたシェルの確認
$ 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でログインしてみます
アップロードする場所は、さきほど作成した ルート直下の /dlna フォルダ。
アップロード出来ると、上のように見えます。
※Sambaを使わない場合には、
[6-2] Samba を使う場合
- Samba 基本設定
sudo dnf install samba
依存ファイルを含めて 7パッケージ がインストールされました。
インストール済み:
cups-libs-1:2.3.3op2-27.el9_4.x86_64 libnetapi-4.19.4-105.el9_4.x86_64
samba-4.19.4-105.el9_4.x86_64 samba-common-tools-4.19.4-105.el9_4.x86_64
samba-dcerpc-4.19.4-105.el9_4.x86_64 samba-ldb-ldap-modules-4.19.4-105.el9_4.x86_64
samba-libs-4.19.4-105.el9_4.x86_64
サービスを起動します
sudo systemctl start smb.service
# nmb は、この手順では使いません
# sudo systemctl start nmb.service
- (オプション) 必要に応じてSamba用のユーザーを作成します
※この手順では、すべてのユーザーが自由に書き込みできる設定にしますので、とりあえずDLNAを使いたいだけなら、ユーザーは作成しなくてもOKです。
# 作成 ("username"は任意の名前にしてください)
sudo pdbedit -a username
# 確認
sudo pdbedit -L
● Sambaのコンフィグ設定
# 元ファイルのバックアップをとっておく
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
# ファイルの編集
sudo vi /etc/samba/smb.conf
- 以下のように編集します。
● [global] は、cups options 行までは変更なし、その下は手動で追加します
★interfaces行は、下に別途注意書きがあります!!
● デフォルトで存在する [printers]と[print$] は、この手順書では使わないので削除しています
● 一番下の [minidlna] は、そのままコピペします
# 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 enable smb.service
# 状態の確認
sudo systemctl status smb.service
# nmb は、この手順では使いません
#sudo systemctl restart nmb.service
#sudo systemctl enable nmb.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 の「ファイル名を指定して実行」からログインしてみます。
(コピペ用 \\192.168.2.200
)
以下のように見えるはずです。
この中に、ファイルを放り込みます。
アップロードが出来ると、こんな感じになります。
- アップロードしたファイルの確認
(例)アップロード後の /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
[7] MiniDLNAがメディアを認識しているかの確認
- アップロードしたファイルが、minidlnaで認識できているか、ブラウザから確認できます。
IPアドレス は、環境にあわせて変更してください。 この例では 192.168.2.200/24 )
以下のような画面が表示されます。
アップロードしたファイルの種類と数があっていれば、minidlnaに正しく認識されています。

★★★メディアが認識されていない場合
この後の、
トラブルシューティング:「minidlnaまわり」 を確認してください。
[8] 別の端末から、メディアが再生できるか確認する
お手元のDLNAクライアントで確認してください。
ここでは スマホ版の vlc media player や PlayStation 3 を使って確認してみました。
[8-1] vlc media player (Android版)
- 今回はAndroidで試してみました。
・同一ネットワークに接続して、アプリを起動したところ、DLNA Serverが見えました。

再生できました。
[8-2] PS3 (PlayStation 3)
今更ですが、PS3はDLNAクライアント機能があるので、試してみました。
テスト環境は、システムソフトウェア 4.91 。
(ずっと前のバージョンからDLNAクライアント機能は問題無いので、どのバージョンでも大丈夫と思います)
同一ネットワーク内で起動したところ、見えました。

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

再生も問題ありません。

[9] トラブルシューティング
[9-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/
[9-2] Samba のトラブル対応
- 以下のようなエラーになる場合
上の設定で共有フォルダに書き込めない/開けない、と言った場合は、
おそらく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 を使ってのサーバー作成をぜひお試しください。
<おしまい>