MiniDLNA kompilieren (Debian): Unterschied zwischen den Versionen
Matt (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Matt (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
MiniDLNA kompilieren | MiniDLNA 1.1.3 auf Debian Wheezy 7.5 kompilieren | ||
# = Root-User | # = Root-User | ||
Zeile 24: | Zeile 24: | ||
$ tar xvf minidlna_1.x.x.tar.gz | $ tar xvf minidlna_1.x.x.tar.gz | ||
$ cd minidlna-1.x.x | $ cd minidlna-1.x.x | ||
$ autogen.sh ausführen? # Scheint nur notwendig zu sein, wenn man kein Stable-Release verwendet | |||
# sondern direkt den Code aus dem Git-Repository | |||
$ ./configure | $ ./configure | ||
$ make | $ make | ||
Zeile 36: | Zeile 38: | ||
# checkinstall --install=no | # checkinstall --install=no | ||
# dpkg -i minidlna_1.x.x_amd64.deb | # dpkg -i minidlna_1.x.x_amd64.deb | ||
== Einrichtung als Dienst == | |||
Dafür ist ein Init.D-Skript notwendig. Mögliche Quellen: | |||
* In den Source-Dateien liegt im Unterverzeichnis Linux ein <code>minidlna.init.d.script</code> vor | |||
* Für MiniDLNA 1.1.3 kann auch das Skript aus dem MiniDLNA-Paket aus der Debian 7.5-Distribution verwendet werden. Dieses muss jedoch an die Pfade des selbstkompilierten Programms angepasst werden. | |||
Neues Skript <code>/etc/init.d/minidlna</code> anlegen mit folgendem Inhalt (hier am Beispiel der Debian-Distro): | |||
<syntaxhighlight lang="bash">#!/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: Benoît 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/local/sbin | |||
DESC="DLNA/UPnP-AV media server" | |||
NAME=minidlna | |||
DAEMON=/usr/local/sbin/minidlnad | |||
PIDDIR=/run/$NAME | |||
PIDFILE=$PIDDIR/$NAME.pid | |||
SCRIPTNAME=/etc/init.d/$NAME | |||
DEFAULT=/etc/default/$NAME | |||
# 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 | |||
: | |||
</syntaxhighlight> | |||
'''''Anmerkungen''''' | |||
* Mit o. g. Skript wird der Dienst als User minidlna ausgeführt. → Dateien müssen entsprechende Zugriffsrechte erhalten | |||
Folgende Registrierungsschritte ausführen: | |||
# chmod +x /etc/init.d/minidlna # Skript als Ausführbar markieren | |||
# update-rc.d minidlna defaults # Init-Skripte aktualisieren | |||
== Deinstallation == | |||
# service minidlna stop | |||
# apt-get remove minidlna | |||
# update-rc.d -f minidlna remove | |||
# rm /etc/init.d/minidlna | |||
[[Category:Linux]] | |||
[[Category:Kompilieren]] |
Aktuelle Version vom 2. September 2017, 15:35 Uhr
MiniDLNA 1.1.3 auf Debian Wheezy 7.5 kompilieren
# = Root-User $ = Anwender-User
Vorbereitung
Installation von allgemeinen Paketen zum Kompilieren:
# apt-get install build-essential # apt-get checkinstall # Zum späteren Erstellen von Debian-Paketen
Installation von Paketen zum Kompilieren von MiniDLNA:
# apt-get install libavutil-dev libavcodec-dev libavformat-dev libjpeg8-dev libid3tag0-dev
Optional kann man statt dem o. g. Befehl zur Installation aller Pakete, die für das Kompilieren von minidlna notwendig sind, folgendes ausführen:
Wichtig: Es werden einige Pakete installiert, die nicht unbedingt zum Kompilieren notwendig sind, einige, die notwendig sind, werden nicht installiert. Komisch, komisch.
# aptitude build-dep minidlna # Installiert alle Abhängigkeiten zum Kompilieren
Entpacken der Source und kompilieren
$ tar xvf minidlna_1.x.x.tar.gz $ cd minidlna-1.x.x $ autogen.sh ausführen? # Scheint nur notwendig zu sein, wenn man kein Stable-Release verwendet # sondern direkt den Code aus dem Git-Repository $ ./configure $ make
Installation
Installieren ohne Erstellung eines Debian-Package:
# make install
Erstellung eines Debian-Package inkl. anschließender Installation
# checkinstall --install=no # dpkg -i minidlna_1.x.x_amd64.deb
Einrichtung als Dienst
Dafür ist ein Init.D-Skript notwendig. Mögliche Quellen:
- In den Source-Dateien liegt im Unterverzeichnis Linux ein
minidlna.init.d.script
vor - Für MiniDLNA 1.1.3 kann auch das Skript aus dem MiniDLNA-Paket aus der Debian 7.5-Distribution verwendet werden. Dieses muss jedoch an die Pfade des selbstkompilierten Programms angepasst werden.
Neues Skript /etc/init.d/minidlna
anlegen mit folgendem Inhalt (hier am Beispiel der Debian-Distro):
#!/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: Benoît 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/local/sbin
DESC="DLNA/UPnP-AV media server"
NAME=minidlna
DAEMON=/usr/local/sbin/minidlnad
PIDDIR=/run/$NAME
PIDFILE=$PIDDIR/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
DEFAULT=/etc/default/$NAME
# 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
:
Anmerkungen
- Mit o. g. Skript wird der Dienst als User minidlna ausgeführt. → Dateien müssen entsprechende Zugriffsrechte erhalten
Folgende Registrierungsschritte ausführen:
# chmod +x /etc/init.d/minidlna # Skript als Ausführbar markieren # update-rc.d minidlna defaults # Init-Skripte aktualisieren
Deinstallation
# service minidlna stop # apt-get remove minidlna # update-rc.d -f minidlna remove # rm /etc/init.d/minidlna