6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DLNAサーバー作成手順 (Alma Linux / minidlna / Samba) ※スマホでストリーミング再生します

Last updated at Posted at 2024-05-13

2025年9月:記事をアップデートしました。

Alma Linux 9.6 に対応しました。

※以前から見ていただいた方へ:
9.3以降、各configに変りありません。
OS,アプリ類はいくつかバージョンアップしているものがあります。
手順は、minidlnaアカウントのシェル変更方法だけ、AlmaLinux9.6にあわせて修正してあります。

やりたいこと

Alma Linux で DLNA Server を自作する。

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

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

[0] DLNA とは ?

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

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

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

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

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

[1] 構成図

DLNA構成 3.png

  • DLNAサーバーの IPアドレスは 192.168.2.200/24 を使用しています。

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

Function OS / Package Version
OS AlmaLinux release 9.6 (Sage Margay) 5.14.0-570.39.1.el9_6.x86_64
DLNA Server MiniDLNA (aka ReadyDLNA) minidlna-1.3.3-3.el9.x86_64.rpm
File Server (option) Samba samba-4.21.3-7.el9_6.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)の環境でも試しましたが特に問題なく動作しました。
 ただし、OSインストール時は 4GB以上を推奨します

<Storageについて>

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

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

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

  • Alma Linux 9.6

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

・インストール時の「ソフトフェアの選択」にて、以下の項目を選択してください。
(画像右側の「選択した環境用のその他のソフトウェア」は何も選択しない)

alma-install1-2.jpg

ファイル直リンク(11GB)
https://ftp.riken.jp/Linux/almalinux/9.6/isos/x86_64/AlmaLinux-9.6-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
  • 依存ファイルを含めて 105パッケージ がインストールされました。
:point_right_tone5: 中身を見るにはココをクリックしてください :point_left_tone5:
Installed:
  avahi-libs-0.8-22.el9_6.1.x86_64                   cairo-1.17.4-7.el9.x86_64
  cairo-gobject-1.17.4-7.el9.x86_64                  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
  fontconfig-2.14.0-2.el9_1.x86_64                   freetype-2.10.4-10.el9_5.x86_64
  fribidi-1.0.10-6.el9.2.x86_64                      game-music-emu-0.6.3-9.el9.x86_64
  gdk-pixbuf2-2.42.6-6.el9_6.x86_64                  graphite2-1.3.14-9.el9.x86_64
  gsm-1.0.19-6.el9.x86_64                            harfbuzz-2.7.4-10.el9.x86_64
  highway-1.2.0-7.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.2-2.el9.x86_64
  lame-libs-3.100-12.el9.x86_64                      libX11-1.7.0-11.el9.x86_64
  libX11-common-1.7.0-11.el9.noarch                  libX11-xcb-1.7.0-11.el9.x86_64
  libXau-1.0.9-8.el9.x86_64                          libXext-1.3.4-8.el9.x86_64
  libXfixes-5.0.3-16.el9.x86_64                      libXft-2.3.3-8.el9.x86_64
  libXrender-0.9.10-16.el9.x86_64                    libXxf86vm-1.1.4-18.el9.x86_64
  libaom-3.12.0-1.el9.x86_64                         libavcodec-free-5.1.4-3.el9.x86_64
  libavformat-free-5.1.4-3.el9.x86_64                libavutil-free-5.1.4-3.el9.x86_64
  libbluray-1.3.4-1.el9.x86_64                       libchromaprint-1.5.1-1.el9.x86_64
  libdatrie-0.2.13-4.el9.x86_64                      libdav1d-1.5.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                  libicu-67.1-10.el9_6.x86_64
  libid3tag-0.15.1b-35.el9.x86_64                    libjpeg-turbo-2.0.90-7.el9.x86_64
  libjxl-0.7.2-2.el9.x86_64                          libmodplug-1:0.8.9.0-13.el9.x86_64
  libogg-2:1.3.4-6.el9.x86_64                        libopenmpt-0.8.1-1.el9.x86_64
  libpng-2:1.6.37-12.el9.x86_64                      librabbitmq-0.11.0-7.el9.x86_64
  librist-0.2.7-1.el9.x86_64                         librsvg2-2.50.7-3.el9.x86_64
  libsmbclient-4.21.3-7.el9_6.x86_64                 libsodium-1.0.18-8.el9.x86_64
  libswresample-free-5.1.4-3.el9.x86_64              libthai-0.1.28-8.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.22.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-9.el9_6.x86_64
  libwayland-client-1.21.0-1.el9.x86_64              libwayland-server-1.21.0-1.el9.x86_64
  libwbclient-4.21.3-7.el9_6.x86_64                  libwebp-1.2.0-8.el9_3.x86_64
  libxcb-1.13.1-9.el9.x86_64                         libxshmfence-1.3-10.el9.x86_64
  llvm-libs-19.1.7-2.el9.x86_64                      lpcnetfreedv-0.2-11.el9.x86_64
  mbedtls-2.28.8-1.el9.x86_64                        mesa-dri-drivers-24.2.8-2.el9_6.alma.1.x86_64
  mesa-filesystem-24.2.8-2.el9_6.alma.1.x86_64       mesa-libGL-24.2.8-2.el9_6.alma.1.x86_64
  mesa-libgbm-24.2.8-2.el9_6.alma.1.x86_64           mesa-libglapi-24.2.8-2.el9_6.alma.1.x86_64
  minidlna-1.3.3-3.el9.x86_64                        mpg123-libs-1.32.9-1.el9_5.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-8.el9.x86_64
  openpgm-5.2.122-28.el9.x86_64                      opus-1.3.1-10.el9.x86_64
  pango-1.48.7-3.el9.x86_64                          pixman-0.40.0-6.el9_3.x86_64
  rav1e-libs-0.7.1-5.el9.x86_64                      samba-client-libs-4.21.3-7.el9_6.x86_64
  samba-common-4.21.3-7.el9_6.noarch                 samba-common-libs-4.21.3-7.el9_6.x86_64
  shared-mime-info-2.1-5.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-4.el9.x86_64                   vo-amrwbenc-0.1.3-18.el9.x86_64
  xml-common-0.6.3-58.el9.noarch                     xvidcore-1.3.7-9.el9.x86_64
  zeromq-4.3.4-2.el9.x86_64                          zimg-3.0.6-2.el9.x86_64
  zvbi-0.2.35-15.el9.x86_64

Complete!

  • minidlnaユーザ/グループを確認 (minidlnaインストール時に自動で作成されているはず)
cat /etc/passwd | grep minidlna
#以下のよう表示されることを確認
minidlna:x:996:995:minidlna service account:/:/usr/sbin/nologin


cat /etc/group | grep minidlna
#以下のよう表示されることを確認
minidlna:x:995:
  • メディアファイル用のフォルダを作成

  ~フォルダの所有者を変更する (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 minidilna.service: Unit minidilna.service not found.

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

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

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

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

※グリーンの箇所が、enabled と active (runnning) になっているか確認する

dlna-status.png

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.6 をインストールした場合、
標準で Port 22/tcp で SSHサーバーが起動しているはずなので、Linux側で特に準備は要りません。

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

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

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

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

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

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

  • ログインパスワードの設定
$ sudo passwd minidlna
Changing password for user minidlna.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
$
  • シェルの変更
# usermod コマンドを使います
sudo usermod -s /bin/bash minidlna
  • 確認
# 確認方法
grep minidlna /etc/passwd

# 以下のように /bin/bash に変わっていればOK
minidlna:x:996:995:minidlna service account:/:/bin/bash
  • SSHでログインできるか確認
    (ここでは TeraTermを使っていますが、お好みのアプリでOK)

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パッケージ がインストールされました。

Installed:
  cups-libs-1:2.3.3op2-33.el9.x86_64             libnetapi-4.21.3-7.el9_6.x86_64
  samba-4.21.3-7.el9_6.x86_64                    samba-common-tools-4.21.3-7.el9_6.x86_64
  samba-dcerpc-4.21.3-7.el9_6.x86_64             samba-ldb-ldap-modules-4.21.3-7.el9_6.x86_64
  samba-libs-4.21.3-7.el9_6.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 )

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

[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が見えました。

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

再生できました。

Screenshot_android.jpg

[8-2] PS3 (PlayStation 3)

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

テスト環境は、システムソフトウェア 4.92
(ずっと前のバージョンから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 のトラブル対応

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

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 を使ってのサーバー作成をぜひお試しください。


<おしまい>


更新履歴

2024/05/13 : 初版発行 (AlmaLinux9.3向け)
2024/11/18 : Almalinux9.4 に対応
2025/09/16 : AlmaLinux9.6 に対応 (OSバージョンのフォローアップ終了)
2025/09/16 : 10000 view 達成! ありがとうございます!
2025/09/17 : minidlna/samba インストール~設定の自動化に対応 (optionセクションにて)


2025/09 追記

◆ option ◆

一部のLinux側の設定を自動化する “bashのシェルスクリプト” を作成してみました。

※「[4] OSのインストールと初期設定」まで済んでいる前提。

内容は、おおよそ 手順 [5] ~ [9-1] の手順で、minidlnaとSambaのインストールに加えて、関連するユーザーやファイル/フォルダの設定等も含みます。

  • サーバのIPアドレスは 192.168.2.200/24 (本文内と同じ) を使用しています。
  • 設定は環境に合わせて変更してください。メディア保存用の 共有フォルダ(初期値:/dlna) や パスワード (初期値:Password01#) 等。

(その他、詳しくはスクリプト内にコメントをご参照ください)
 
※ 尚、セキュリティは殆ど考慮していませんので、ご利用に際しては、 完全に自己責任で お願いします。パーミッション、ファイアウォールのルール、Sambaの設定など、かなりゆるい設定になっているので、各自の環境にあわせてカスタマイズしてみてください。


details

<手順はこちら>

  • 1. スクリプトファイルの作成

まず、Linuxにログインした一般ユーザーの状態で、スクリプトファイルを作成します。以下のコマンドを使ってください。

vi ~/dlna-samba-setup.sh

このコマンドで vi エディタが開き、あなたのホームディレクトリに dlna-samba-setup.sh という名前の新しいファイルが作成されます。

エディタが開いたら、「i」キーを押して挿入モードに切り替え、提供したスクリプトの内容をすべて貼り付けます。

貼り付けが完了したら、「Esc」キーを押して挿入モードを抜け、:wq と入力して**「Enter」キー**を押します。これでファイルが保存され、エディタが閉じます。

  • スクリプト
#!/bin/bash

# --- 1. sudo 権限と実行ユーザーの確認 ---
# root権限で実行されていることを確認。
if [ "$(id -u)" -ne 0 ]; then
    echo "このスクリプトは、root権限で実行する必要があります。" >&2
    echo "以下のコマンドで再度実行してください。" >&2
    echo "" >&2
    echo "sudo ~/dlna-samba-setup.sh" >&2
    echo "" >&2
    exit 1
fi


# --- 2. 必要なパッケージのインストール ---
echo "必要なパッケージをインストールします..."
dnf -y install minidlna samba
echo ""


# --- 3. minidlnaユーザーの設定変更 ---
echo "minidlnaユーザーのパスワードとシェルを変更します..."
echo ""
# パスワードを "Password01#" に変更
echo "minidlna:Password01#" | chpasswd
# シェルを "/bin/bash" に変更
usermod -s /bin/bash minidlna
echo ""


# --- 4. 共有ディレクトリの作成とパーミッション設定 ---
# ルート直下に /dlna ディレクトリを作成。
echo "共有ディレクトリを作成し、パーミッションを設定します..."
echo ""
mkdir -p /dlna/Videos /dlna/Music /dlna/Pictures
chown -R minidlna:minidlna /dlna
chmod -R 777 /dlna
echo ""
echo ""


# --- 5. minidlnaの設定ファイルの編集 ---
echo "minidlnaの設定ファイルを編集します..."
echo ""
echo "元ファイルのバックアップを作成します..."
cp /etc/minidlna.conf /etc/minidlna.conf.bak

echo ""
echo "########## <コンフィグ作成> ここから ##########"
echo ""

cat <<EOL | tee /etc/minidlna.conf
# port for HTTP (descriptions, SOAP, media transfer) traffic
port=8200

#media_dir=/opt
media_dir=/dlna

# this should be a list of file names to check for when searching for album art
# note: names should be delimited with a forward slash ("/")
album_art_names=Cover.jpg/cover.jpg/AlbumArtSmall.jpg/albumartsmall.jpg/AlbumArt.jpg/albumart.jpg/Album.jpg/album.jpg/Folder.jpg/folder.jpg/Thumb.jpg/thumb.jpg

# set this to no to disable inotify monitoring to automatically discover new files
# note: the default is yes
inotify=yes

# set this to yes to enable support for streaming .jpg and .mp3 files to a TiVo supporting HMO
enable_tivo=no

# set this to beacon to use legacy broadcast discovery method
# defauts to bonjour if avahi is available
tivo_discovery=bonjour

# set this to strictly adhere to DLNA standards.
# * This will allow server-side downscaling of very large JPEG images,
#   which may hurt JPEG serving performance on (at least) Sony DLNA products.
strict_dlna=no

# notify interval in seconds. default is 895 seconds.
#notify_interval=900
notify_interval=60

# serial and model number the daemon will report to clients
# in its XML description
serial=12345678
model_number=1
EOL
echo ""
echo "########## <コンフィグ作成> ここまで ##########"
echo ""
echo ""


# --- 6. Sambaの設定ファイルの編集 ---
echo "Sambaの設定ファイルを編集します..."
echo ""
echo "元ファイルのバックアップを作成します..."
cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

echo ""
echo "########## <コンフィグ作成> ここから ##########"
echo ""

cat <<'EOL' | tee -a /etc/samba/smb.conf
[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
EOL
echo ""
echo "########## <コンフィグ作成> ここまで ##########"
echo ""
echo ""


# --- 7. ファイアウォールの設定 ---
echo "ファイアウォールを設定します..."
echo ""
firewall-cmd --add-service=dlna-server --zone=public --permanent
firewall-cmd --add-service=samba --zone=public --permanent
firewall-cmd --reload
echo ""


# --- 8. サービスの起動と自動起動設定 ---
echo "サービスを起動し、自動起動を設定します..."
echo ""
systemctl enable --now minidlna
systemctl enable --now smb
systemctl restart smb
echo ""


# --- 9. DLNAデータベースのリフレッシュ用スクリプト作成 ---
echo "DLNAデータベースのリフレッシュ用スクリプトを作成します..."

echo ""
echo "########## <コンフィグ作成> ここから ##########"
echo ""

echo ""
# ログインユーザーのホームディレクトリを取得
LOGIN_USER=$(logname)
SCRIPT_PATH="/home/$LOGIN_USER/dlna-refresh.sh"
cat <<'EOF' | tee "$SCRIPT_PATH"
#!/bin/bash

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

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

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

# Step 4: Output the result to your display screen.
ls -l /var/cache/minidlna/
EOF
echo ""
echo "########## <コンフィグ作成> ここまで ##########"
echo ""


# スクリプトに実行権限を付与
chmod +x "$SCRIPT_PATH"
echo ""


echo ""
echo ""
echo "スクリプトの実行が完了しました!"
echo ""
echo ""


# --- 10. ファイルの確認とパーミッションの表示 ---
echo "========================================"
echo "      設定ファイルの確認とパーミッション"
echo "========================================"
echo "以下の3つのファイルが作成されました。"
ls -l /etc/minidlna.conf
ls -l /etc/samba/smb.conf
ls -l "$SCRIPT_PATH"
echo ""
echo "以下のフォルダの権限を設定しました。"
ls -al /dlna
echo "----------------------------------------"
echo ""

# --- 11. ユーザーへの手動設定の案内 ---
echo ""
echo "========================================"
echo "           重要:最終設定のお願い"
echo "========================================"
echo "Sambaの設定ファイル (/etc/samba/smb.conf) の"
echo "'interfaces' の設定には、"
echo "あなたのネットワークインターフェース名が必要です。"
echo "現在、この設定は 'ens160' になっています。"
echo ""
echo "以下のコマンドを実行して、あなたの環境のネットワークインターフェース名を確認してください。"
echo ""
echo "nmcli"
echo ""
echo "表示された出力から、'connected' となっているインターフェース名を見つけてください。"
echo ""
echo "例:'ens160' や 'eth0' など"
echo ""
echo "その後、/etc/samba/smb.conf ファイルを開き、見つけた名前に書き換えてください。"
echo ""
echo "例:sudo vi /etc/samba/smb.conf"
echo ""
echo "========================================"
echo ""
echo ""
echo "/// End of this setup script ///."

  • 2. 実行権限の付与

次に、作成したスクリプトに実行権限を与えます。

chmod +x ~/dlna-samba-setup.sh

このコマンドで、スクリプトファイルが実行可能な状態になります。

  • 3. スクリプトの実行

最後に、sudo コマンドを使ってスクリプトを実行します。

sudo sh ~/dlna-samba-setup.sh

# または
sudo ~/dlna-samba-setup.sh

実行後、パスワードを求められたら、ログインユーザーのパスワードを入力してください。

スクリプトは最初から最後まで自動で実行され、最後にあなたが追加した**「設定ファイルの確認」「最終設定のお願い」**のメッセージが表示されます。


作ってみた感想
そのうち作ろう、と思いつつ、後回しになっていました。。。

スクリプトのデバッグがてら、自分用にも再度 DLNAサーバを立ててみましたが、やっぱりスクリプト化しておくと、かなり便利になると改めて感じました。

ただ、本当に何も考えないで作れてしまうので、
特にLinuxに慣れていない方は、一度は手動でやってみることをお勧めします。

以上、どなたかのお役に立てれば幸いです。


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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?