Установка minidlna на Ubuntu 16.04

Давайте собирем домашним медиа-сервер на Ubuntu 16.04 . Для это нам потребуется установить пакет под названием MiniDLNA.
MiniDLNA – домашний медиа-сервер для Linux подобных систем, позволяющий передавать и принимать по домашней сети различный медиа-контент (изображения, музыку, видео), а также отображать его в режиме реального времени. То есть — технология для соединения домашних компьютеров, мобильных телефонов, ноутбуков и бытовой электроники в единую цифровую сеть.

Установка minidlna — сервера

Есть два способа установки minidlna — сервера, но сперва установим библиотеки необходимые нашему медиа-серверу:

sudo apt-get install gcc debhelper libavcodec-dev libavformat-dev libavutil-dev libexif-dev libflac-dev libid3tag0-dev libjpeg-dev libogg-dev libsqlite3-dev libvorbis-dev

Первый способ заключается в простой установки пакета из репозитория

sudo apt install minidlna

После установки переходим сразу к настройки медиа-сервера

Второй же способ подразумевает самостоятельную сборку из исходников, для этого нам потребуется сперва установить пакет checkinstall:

sudo apt-get install checkinstall

А так же скачать сами исходники с сайта разработчика minidlna-сервера

В серверной части Ubuntu скачиваем командой wget:

wget http://downloads.sourceforge.net/project/minidlna/minidlna/1.1.5/minidlna-1.1.5.tar.gz

Далее распаковываем в корневой каталог наши исходники:

tar -xf minidlna-1.1.5.tar.gz

и приступаем к их сборки. Перейдем в папку с исходниками

cd /minidlna-1.1.5

далее конфигурируем

./configure

если ничего не хотим менять в исходниках то приступаем к сборке пакета

sudo checkinstall -D

Если сборка прошла успешно, то приступаем к настройки сервера

Настройка minidlna — сервера

Проверим init-скрипт по пути /etc/init.d/minidlna
Если файл отсутствует, то создадим его и вставим в него следующий листинг:

#!/bin/sh
#
# MiniDLNA initscript
#
# Based on the mediatomb debian package.
# Original authors: Tor Krill <tor@excito.com>
#                   Leonhard Wimmer <leo@mediatomb.cc>
#                   Andres Mejia <mcitadel@gmail.com>
#
# Modified by: Benoit Knecht <benoit.knecht@fsfe.org>
#
### BEGIN INIT INFO
# Provides:          minidlna
# Required-Start:    $network $local_fs $remote_fs
# Required-Stop::    $network $local_fs $remote_fs
# Should-Start:      $all
# Should-Stop:       $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start minidlna at boot time
# Description:       Manage the minidlna daemon, a DLNA/UPnP-AV media server.
### END INIT INFO

unset USER

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="DLNA/UPnP-AV media server"
NAME=minidlnad
DAEMON=/usr/local/sbin/minidlnad
PIDDIR=/run/$NAME
PIDFILE=$PIDDIR/$NAME.pid
SCRIPTNAME=/etc/init.d/minidlna
DEFAULT=/etc/default/minidlna

# Exit if the package is not installed
[ -x $DAEMON ] || exit 0

# Read configuration variable file if it is present
[ -r $DEFAULT ] && . $DEFAULT

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

# Do not start the daemon if NO_START is enabled in DEFAULT
if [ "$START_DAEMON" != "yes" ] && [ "$1" != "stop" ]; then
        log_warning_msg "$NAME: Not starting $DESC."
        log_warning_msg "$NAME: Disabled in $DEFAULT."
        exit 0
fi

# Set the default configuration file
if [ -z $CONFIGFILE ]; then
        CONFIGFILE=/etc/minidlna.conf
fi

# Set the default log file
if [ -z $LOGFILE ]; then
        LOGFILE=/var/log/minidlna.log
fi

# Run as `minidlna' if USER is not specified or is `root'
if [ -z $USER ]; then
        USER=minidlna
fi

# If no group is specified, use USER
if [ -z $GROUP ]; then
        GROUP=$USER
fi

DAEMON_ARGS="-f $CONFIGFILE -P $PIDFILE $DAEMON_OPTS"

#
# Function that starts the daemon/service
#
do_start()
{
        # Return
        #   0 if daemon has been started
        #   1 if daemon was already running
        #   2 if daemon could not be started
        touch $LOGFILE && chown $USER:$GROUP $LOGFILE || return 2
        if [ ! -d $PIDDIR ]; then
            mkdir $PIDDIR || return 2
        fi
        chown $USER:$GROUP $PIDDIR || return 2

        start-stop-daemon --start --quiet --pidfile $PIDFILE \
                --chuid $USER:$GROUP --exec $DAEMON --test > /dev/null \
                || return 1
        start-stop-daemon --start --quiet --pidfile $PIDFILE \
                --chuid $USER:$GROUP --exec $DAEMON -- \
                $DAEMON_ARGS \
                || return 2
}

#
# Function that stops the daemon/service
#
do_stop()
{
        # Return
        #   0 if daemon has been stopped
        #   1 if daemon was already stopped
        #   2 if daemon could not be stopped
        #   other if a failure occurred
        start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
        RETVAL="$?"
        [ "$RETVAL" = 2 ] && return 2
        # Wait for children to finish too if this is a daemon that forks
        # and if the daemon is only ever run from this initscript.
        start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
        [ "$?" = 2 ] && return 2
        # Many daemons don't delete their pidfiles when they exit.
        rm -rf $PIDDIR
        return "$RETVAL"
}

case "$1" in
  start)
    [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME"
    do_start
    case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
  ;;
  stop)
        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
        do_stop
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  status)
       status_of_proc -p "$PIDFILE" "$DAEMON" "$NAME" && exit 0 || exit $?
       ;;
  restart|force-reload)
        log_daemon_msg "Restarting $DESC" "$NAME"
        do_stop
        case "$?" in
          0|1)
                if [ "$1" = "force-reload" ]; then
                        # Rescan the collection
                        DAEMON_ARGS="$DAEMON_ARGS -R"
                fi
                do_start
                case "$?" in
                        0) log_end_msg 0 ;;
                        1) log_end_msg 1 ;; # Old process is still running
                        *) log_end_msg 1 ;; # Failed to start
                esac
                ;;
          *)
                # Failed to stop
                log_end_msg 1
                ;;
        esac
        ;;
  *)
        echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
        exit 3
        ;;
esac

:

После этого даем права на запуск скрипта:

sudo chmod 755 /etc/init.d/minidlna

Активируем запуск init-скрипта:

sudo update-rc.d minidlna defaults

По умолчанию служба запускается под пользователем minidlna, нам нужно создать соответствующую учетную запись:

sudo adduser --system --home /var/lib/minidlna --group --gecos "MiniDLNA server" minidlna

Далее проверяем параметры init-скрипта etc/default/minidlna:

sudo nano /etc/default/minidlna

Обычно корректировка не требуется. Если файл отсутствует копируем данный листинг:

# Defaults for minidlna initscript
# sourced by /etc/init.d/minidlna
# installed at /etc/default/minidlna by the maintainer scripts
# These options can be set to modify the behavior of the minidlna init script.
# The options commented out show the default values.

# Start the daemon if set to "yes"
START_DAEMON="yes"

# Path to the configuration file
CONFIGFILE="/etc/minidlna.conf"

# Path to the log file
#LOGFILE="/var/log/minidlna.log"

# User and group the daemon should run as
#USER="minidlna"
#GROUP="minidlna"

# Additional options that are passed to the daemon
DAEMON_OPTS=""

далее рестарт init-скрипта

sudo /etc/init.d/minidlna restart

Конфигурация MiniDLNA

Правим файл конфигурации:

sudo nano /etc/minidlna.conf

Как минимум, потребуется задать путь к папке с медиа-файлами, параметр: media_dir. Также можно задать имя сервера, отображаемое клиентом, параметр: friendly_name.
В случае если наш DLNA-сервер по совместительству является интернет-шлюзом, также необходимо задать внутренний сетевой интерфейс, параметр: network_interface в моем случае настроен сетевой мост между LAN и WiFi интерфейсом под названием – br0.
Параметры в комментариях файла конфигурации содержат значения по умолчанию.

# Порт сервера
port=8200

# Привязка к сетевому интерфейсу
# Можно задать несколько интерфейсов
# в формате network_interface=eth0,eth1
network_interface=br0

# Имя пользователя или UID, под которым будет работать служба
# Добавлен в версии 1.1.0
# В Debian задается в параметрах init-скрипта
#user=minidlna

# Путь к папке с медиа-файлами
# Для сканирования нескольких папок, укажите несколько параметров media_dir
# Чтобы сканировать файлы определенного типа, укажите соответствующий префикс:
#   A - аудио: media_dir=A,/home/jmaggard/Music
#   V - видео: media_dir=V,/home/jmaggard/Videos
#   P - изображения: media_dir=P,/home/jmaggard/Pictures
# Начиная с версии 1.1.0, можно задать несколько типов:
#   PV - изображения и видео: media_dir=AV,/var/lib/minidlna/digital_camera
#
# При изменении параметра, потребуется повторное сканирование файлов.
# Необходимо выполнить команду "service minidlna force-reload" от имени root.
# Начиная с версии 1.1.0, при изменении параметра, сканирование выполняется автоматически.
media_dir=A,/home/Music
media_dir=V,/home/Films
media_dir=P,/home/Foto

# Имя DLNA-сервера, отображаемое клиентом
# По умолчанию: "$HOSTNAME:$USER"
friendly_name=DLNA_Ubuntu

# Путь к папке для хранения базы данных и кэша обложек альбомов
db_dir=/var/lib/minidlna

# Путь к папке с лог-файлами
log_dir=/var/log

# Уровень детальности лога
# В формате log_level=источник1,источник2=значение1,источник3,источник4=значение2 ...
# Доступные источники: "general", "artwork", "database", "inotify", "scanner", "metadata", "http", "ssdp", "tivo"
# Возможные значения: "off", "fatal", "error", "warn", "info" or "debug"
#log_level=general,artwork,database,inotify,scanner,metadata,info,ssdp,tivo=warn

# Перечень имен файлов-обложек альбомов, разделитель: "/"
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

# Автообнаружение новых файлов
# Включено по умолчанию
#inotify=yes

# Поддержка устройств TiVo
#enable_tivo=no

# Строго следовать DLNA-стандарту
# Использовать серверное масштабирование для очень больших JPEG-изображений
# Что может снизить скорость их обработки.
#strict_dlna=yes

# Адрес веб-страницы устройства
# По умолчанию IP-адрес и заданный порт сервера
#presentation_url=http://www.mylan/index.php

# Интервал абноружения новых файлов, в секундах
notify_interval=120

# Серийный номер и номер модели DLNA-сервера, сообщаемый клиенту
serial=12345678
model_number=3

# Путь к сокету MiniSSDPd, если установлен
# Требуется для обеспечения работы нескольких DLNA/UPnP служб на одном сервере
#minissdpdsocket=/run/minissdpd.sock

# Контейнер, используемый в качестве корневой папки для клиентов
#   * "." - стандартный контейнер
#   * "B" - "Обзор папки"
#   * "M" - "Музыка"
#   * "V" - "Видео"
#   * "P" - "Изображения"
# Если задано "B" и клиент представится как аудиоплеер, в качестве корня будет использована папка "Music/Folders"
#root_container=.

# Всегда использовать заданный критерий сортировки, вместо значения, запрошенного клиентом
#force_sort_criteria=+upnp:class,+upnp:originalTrackNumber,+dc:title

# Максимальное число одновременных подключений
# Учтите: многие клиенты открывают несколько подключений одновременно
max_connections=20

# Параметр для отображения директорий подробно или нет
disable_extended_directories=yes

Замечания: Для работы inotify-параметров файла конфигурации, связанных с добавлением файлов в базу необходима установка пакета inotify-tools. Следует помнить, что механизм inotify не работает для удалённых сетевых (не локальных) файлах и папках.

Устанавлисваем inotify-tools:

sudo apt install inotify-tools -y

Запускаем службу:

/etc/init.d/minidlna start

или

sudo service minidlna force-reload

Проверяем, работает ли служба, также смотрим параметры запуска:

ps ax | grep minidlna

Проверяем, слушается ли порт:

sudo ss -4lnp | grep minidlna

Проверяем лог:

cat /var/log/minidlna.log

Ошибки

Если видим: WARNING: Inotify max_user_watches [8192] is low, то необходимо в файле /etc/sysctl.conf увеличить число дескрипторов слежения inotify до 100000 . Открываем файл и в конце добавляем следующие строки:

nano /etc/sysctl.conf
#MiniDLNA warning fix
fs.inotify.max_user_watches = 100000

Видео урок установки MiniDLNA — сервера:

Установка minidlna на Ubuntu 16.04
5 (100%) 1 vote

11 комментариев

  1. Александр 2018-07-28
  2. SYSadminАвтор 2018-07-28
  3. Александр 2018-07-27
  4. Александр 2018-07-27
  5. Александр 2018-07-27
  6. SYSadminАвтор 2018-07-27
  7. Александр 2018-07-27
  8. SYSadminАвтор 2018-07-27
  9. SYSadminАвтор 2018-07-27
  10. Александр 2018-07-27
  11. Александр 2018-07-27

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *