Дата поста: 04-02-2018
Сегодня мы поговорим об установке популярного DLNA сервера Serviio на Linux Debian 8. Данный сервер последнее время набирает всё большую популярность, в то время как mediatomb не развивается, Flex очень проблематичный и прожорливый, а minidlna слаб в функционале. Расписывать что такое Serviio, его плюсы и т.д я не буду, вы можете почитать об этом сервере на сайте разработчика. А мы начнём нашу установку.
Если не хотите заморачиваться с установкой, компилляцией, настройкой, установкой java, то можете просто воспользоваться моим Docker контейнером с уже готовой системой на основе легковесного Alpine Linux и собранным ffmpeg последней версии. Забрать можно тут - Docker container riftbit/serviio
Системные требования
Обязательные:
- Сам Serviio (в нашем случае 1.9)
- Java 8.x
- libav (хорошая альтернатива ffmpeg с которой Serviio работает замечательно)
- от 512Мб оперативной памяти
- от 150Мб свободного места на диске
Установка
Для начала скачаем и распакуем сам Serviio (такие вещи я обычно храню в папке /opt):
wget http://download.serviio.org/releases/serviio-1.9-linux.tar.gz && tar xzf serviio-1.9-linux.tar.gz && mv serviio-1.9 /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.9 нужна 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
Использованный материал для этой статьи: