uShare – UPnP / DLNA Server

uShare ist ein Audio/Video UPnP Server. Der Dienst stellt Mediensdaten UPnP bzw. DLNA Endgeräte zur Verfügung.

Der Server ist recht einfach zu konfigurieren. Ich habe das Programm aus den Quellen übersetzt da Debian(Raspbian) hier eine ältere Version bereitstellt.

Um die DLNA Unterstützung aktivieren zu können wird die libdlna in der Version >0.2.3 benötigt. Die Bibliothek libupnp und das dev-Package libupnp-dev wird in der Version >1.4.2 benötigt. Ich habe das Paket „libupnp6“ und „libupnp6-dev“ genutzt.

Vorbereitung:

aptitude install libavformat-dev libavformat-extra-53 libupnp6 libupnp6-dev

Anschliessend wird die „libdlna“ gebaut und installiert.

Download:

cd ~
wget http://libdlna.geexbox.org/releases/libdlna-0.2.4.tar.bz2
tar xfj libdlna-0.2.4.tar.bz2

Der berühmte 2-Zeiler:

./configure
make && make install

Jetzt wird der eigentlich DLNA/UPnP-Server ushare gebaut:

Download:

cd ~
wget http://ushare.geexbox.org/releases/ushare-1.1a.tar.bz2

Konfiguration und Bau:

tar xfj ushare-1.1a.tar.bz2
cd ushare-1.1a
CFLAGS="-Os"; ./configure --enable-dlna --prefix=/usr
make

endet mit der Meldung:
ushare.c: In function ‘handle_action_request’:
ushare.c:191:29: error: ‘struct sockaddr_storage’ has no member named ‘s_addr’
make[1]: *** [ushare.o] Error 1
make[1]: Leaving directory `/source/ushare-1.1a/src’
make: *** [all] Error 2

Ändert die Zeile 191 in ushare.c:
ip = ((struct in_addr*)&request->CtrlPtIPAddr)->s_addr;

führe wieder ein „make && make install“ aus und diesmal wird es fehlerfrei übersetzt.

init-Skript:

#!/bin/sh

# chkconfig: 345 99 10
# description: Startup/shutdown script for ushare-DLNA daemon
#
### BEGIN INIT INFO
# Provides:          ushare
# 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: DLNA-Server
### END INIT INFO

USHARE=/usr/local/bin/ushare
ARGS="-D -f /etc/ushare/ushare.conf"

. /lib/lsb/init-functions

case "$1" in
start)  log_daemon_msg "Starting ushare" "ushare"
        start-stop-daemon --start --quiet --pidfile /var/run/ushare.pid --startas $USHARE -- $ARGS $LSBNAMES
        log_end_msg $?
        ;;
stop)   log_daemon_msg "Stopping ushare" "ushare"
        start-stop-daemon --stop --quiet --pidfile /var/run/ushare.pid
        log_end_msg $?
        ;;
restart|reload|force-reload)
        log_daemon_msg "Restarting ushare" "ushare"
        start-stop-daemon --stop --retry 5 --quiet --pidfile /var/run/ushare.pid
        start-stop-daemon --start --quiet --pidfile /var/run/ushare.pid --startas $USHARE -- $ARGS $LSBNAMES
        log_end_msg $?
        ;;
status)
        status_of_proc -p /var/run/ushare.pid $USHARE ushare && exit 0 || exit $?
        ;;
*)      log_action_msg "Usage: /etc/init.d/ushare {start|stop|restart|reload|force-reload|status}"
        exit 2
        ;;
esac
exit 0

Konfiguration(/etc/ushare/ushare.conf):

#Name des Servers
USHARE_NAME=NAS
# Netzwerkschnittstelle, die benutzt werden soll
USHARE_IFACE=eth0
# Der Port, auf dem der Server laufen soll
USHARE_PORT=49200
# Verzeichnisse, die der Server mit anderen Geräten teilen soll
USHARE_DIR=
# Webinterface aktivieren (ja/nein)?
USHARE_ENABLE_WEB=yes
# Xbox360-Support.
#USHARE_ENABLE_XBOX=yes
# Playstation3-Support.
USHARE_ENABLE_DLNA=yes