MiniDLNA kompilieren (Debian): Unterschied zwischen den Versionen
Matt (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Matt (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 239: | Zeile 239: | ||
[[Category:Linux]] | [[Category:Linux]] | ||
[[Category:Kompilieren]] | [[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