Сегодня мы поговорим об установке популярного DLNA сервера Serviio на Linux Debian 8.  Данный сервер последнее время набирает всё большую популярность, в то время как mediatomb не развивается, Flex очень проблематичный и прожорливый, а minidlna слаб в функционале.  Расписывать что такое Serviio, его плюсы и т.д я не буду, вы можете почитать об этом сервере на сайте разработчика. А мы начнём нашу установку.

Системные требования

Обязательные:

  • Сам Serviio (в нашем случае 1.5.2)
  • Java 8.x
  • libav (так как ffmpeg уже устарел и с ним куча геморроя, то libav хорошая альтернатива с которой Serviio работает замечательно)
  • 512+Мб оперативной памяти
  • 150+Мб свободного места на диске

Необязательные:

  • Serviio Web Gui (на самом деле он давно не обновлялся и с версией 1.5+ он по сути уже не работает).

Установка

Для начала скачаем и распакуем сам Serviio (такие вещи я обычно храню в папке /opt):

wget http://download.serviio.org/releases/serviio-1.5.2-linux.tar.gz && tar xzf serviio-1.5.2-linux.tar.gz && mv serviio-1.5.2 /opt/serviio

Теперь создадим пользователя и установим права на наш распакованный Serviio для этого пользователя:

useradd -s /usr/sbin/nologin -d /opt/serviio -r -M -U serviio
chown -R serviio:serviio /opt/serviio

Для запуска через init скрипты давайте его напишем. Создайте файл /etc/init.d/serviio со следующим содержимым:

#!/bin/bash
#
#########################################################
#- Daemon Script Configuration for Serviio Media Server
#- By Ian Laird; converted for Debian by Jacob Lundberg
#- Updated and Merged for Ubuntu 14.04 by Matthew Bate
#########################################################
#
#########################################################
#
### BEGIN INIT INFO
# Provides:          serviio
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# X-Interactive:     true
# Short-Description: Start/stop serviio media server
# Description:       The Serviio media server makes your media available to
#                    all kinds of networked devices.
### END INIT INFO

. /lib/lsb/init-functions

if [ -f /etc/default/rcS ]; then
        . /etc/default/rcS
fi

NAME="Serviio Media Server"
DAEMON="/opt/serviio/bin/serviio.sh"      ## Update this to point at your serviio/bin/serviio.sh
DAEMON_STOP=" -stop"
SERVICE_ACCOUNT="serviio"            ## DON'T RUN UNDER ROOT!
TIMEOUT=3

# We have this because start-stop-daemon needs one and wont start without it.  Although it provides wrong PID ID of Java Client.
PIDFILE="/var/run/serviiod.pid"         

if [ -f /etc/default/serviio ]; then
        . /etc/default/serviio
fi

[ -x "$DAEMON" ] || exit 0

#########################################################
#
#  Status function check not only the PID file but if it has gone missing it will look for the Java Client manually.
#
#########################################################

status() {

    if [ $1 = "PID" ]; then
   if [ ! -f $TPIDFILE ]; then
       PID=$(ps -ef | grep "org.serviio.MediaServer" | grep -v grep | awk "{ print \$2 }")
       echo $PID
   else 
       PID=$(cat $TPIDFILE)
          echo $PID
   fi
    else 
        PID=$(ps -ef | grep "org.serviio.MediaServer" | grep -v grep | awk "{ print \$2 }")
        if [[ -z $PID ]]; then
            if [ $1 = "status" ]; then log_daemon_msg "Serviio is currently offline."; else echo "0"; fi # Offline
        else
          if [ $1 = "status" ]; then log_daemon_msg "Serviio is currently online."; else echo "1"; fi # Online
        fi   
    fi
}

start() {
    RUNNING=$(status "0")
    if [ $RUNNING = "0" ]; then
   log_daemon_msg "Starting Serviio Media Server..."
   start-stop-daemon --start -q -b -p "$PIDFILE" -m -c "${SERVICE_ACCOUNT}" -x "${DAEMON}"
   log_end_msg $?
    else
   log_daemon_msg "Serviio Media Server is already running."
   log_end_msg 1
    fi
}

stop() {
    RUNNING=$(status "0")
    if [ ${#RUNNING} = "1" ]; then
   log_daemon_msg "Shutting Down Serviio Media Server..."
   ${DAEMON} ${DAEMON_STOP}
   log_end_msg $?
    else 
   log_daemon_msg "Serviio Media Server is already shutdown."
   log_end_msg 1
    fi
}

force_stop() {
    RUNNING=$(status "0")
    if [ ${#RUNNING} = "1" ]; then
   log_daemon_msg "Shutting Down Serviio Media Server..."
   RUNNING=$(status "PID")
   kill -TERM $RUNNING
   log_end_msg $?
    else 
   log_daemon_msg "Serviio Media Server is already shutdown."
   log_end_msg 1
    fi
}

case "${1:-}" in
        start)
                start
        ;;
        stop)
                stop
        ;;
        restart)
                stop
                start
        ;;
        status)
                status $1
        ;;
   force-stop)
      force_stop
   ;;
        *)
                log_success_msg "Usage: /etc/init.d/$NAME {start|stop|force-stop|restart|status}"
                exit 1
        ;;
esac

exit 0

Теперь выставим права на этот файл и добавим в автозагрузку:

chmod a+rx /etc/init.d/serviio && sudo chown root:root /etc/init.d/serviio && sudo update-rc.d serviio defaults

Так как для Serviio 1.5.2 нужна java 8 то нам нужно её установить из специального репозитория, поэтому добавим его и gpg ключ для него:

echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" | tee /etc/apt/sources.list.d/webupd8team-java.list
echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" | tee -a /etc/apt/sources.list.d/webupd8team-java.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EEA14886 && apt-get update && apt-get install oracle-java8-installer

Теперь заставим нашу java 8 быть java’ой по дефолту

apt-get install oracle-java8-set-default

Мы уже близки к завершению. Давайте установим мультимедиа пакеты, которые необходимы для работы сервера (если какие-то пакеты не найдены — попробуйте поискать без цифр на конце, например aptitude search librtmp):

apt-get -y install dcraw libmp3lame0 librtmp1 libx264-142 libass5 libav-tools

Создадим алиас для нашей замены ffmpeg на avconv:

ln -s /usr/bin/avconv /usr/bin/ffmpeg

Теоретически в логах Serviio может ругаться на отсутствие пакета ffmpeg, но можете не обращать внимания, кроме нотисов в логах ничего плохого не будет.

Ну и всё, теперь можно запускать наш DLNA сервер Serviio и проверить запустился ли он:

service serviio start
sudo service serviio status

Использованный материал для этой статьи:

Комментарии

comments powered by Disqus