
"Alternative" Media Server, Teil 3: miniDLNA
3. miniDLNAVorneweg: miniDLNA läßt sich aus den Quellen kompilieren,
aber ich habe bisher nicht herausgefunden warum statisches Linken nicht funktioniert und die shared-Version die Libraries nicht ohne weiteres findet. Über ein angepasstes Startscript (siehe "Edit:") lässt sich das Problem aber umgehen.
Den aktuellen Quellcode findet man hier:
http://sourceforge.net/projects/minidlna/. Um daraus miniDLNA direkt auf der LS-GL zu kompilieren bin ich folgendermaßen vorgegangen:
Erst temporäres Verzeichnis erstellen und Quellcode von Sourceforge holen:
Code:
mkdir /tmp/minidlna
cd /tmp/minidlna
wget http://sourceforge.net/projects/minidlna/files/minidlna/1.0.18/minidlna_1.0.18_src.tar.gz/download
cd /tmp/minidlna
Dann die benötigten Libraries und gcc über ipkg installieren:
Code:
ipkg install libexif
ipkg install libjpeg
ipkg install libid3tag
ipkg install flac
ipkg install libvorbis
ipkg install sqlite
ipkg install ffmpeg
ipkg install gcc
ipkg install make
Jetzt müssen wir einige Anpassungen am
'Makefile' und
'genconfig.sh' machen, da der Quellcode von eine "normalen" Linux Umgebung ausgeht, die ipgk Installation aber in '/opt/' landet. In den Dateien muss '/usr/' mit '/opt/' ersetzt werden. Im Makefile in allen Zeilen, bei genconfig nur dort wo mit ipkg installierte Dateien referenziert werden, d.h. im Abschnitt der mit "#Detect if there are missing headers" beginnt bis "ERROR! Cannot continue." und in der Zeile mit "iconv.h". Im Makefile die CFLAGS wie folgt ändern (ist vielleicht nicht zwingend nötig):
Code:
LIBS = -lvorbis -logg -lsqlite3 -lpthread -lexif -ljpeg -lFLAC -lid3tag -lz -lav
Die Optionen zum Installieren muss man im Makefile auch noch anpassen: '--mode=0644' ändern in '-m 0644'. Nun sollte das Kompilieren und Installieren eigentlich funktionieren.
Code:
make -f .Makefile
make install
Bei mir kam beim Aufruf von
'minidlna --help' dann leider eine Fehlermeldung weil die Libraries nicht gefunden werden
Code:
minidlna --help
minidlna: error while loading shared libraries: libexif.so.12: cannot open shared object file: No such file or directory
nach festlegen des 'LD_LIBRARY_PATH' läuft das Programm aber
Code:
LD_LIBRARY_PATH=/opt/lib
export LD_LIBRARY_PATH
minidlna --help
Usage:
minidlna [-d] [-f config_file]
[-a listening_ip] [-p port]
[-s serial] [-m model_number]
[-t notify_interval] [-P pid_filename]
[-w url] [-R] [-V] [-h]
Notes:
Notify interval is in seconds. Default is 895 seconds.
Default pid file is /var/run/minidlna.pid.
With -d minidlna will run in debug mode (not daemonize).
-w sets the presentation url. Default is http address on port 80
-h displays this text
-R forces a full rescan
-V print the version number
Jetzt kann man die Konfigurationsdatei
'/opt/etc/minidlna.conf' anpassen, d.h. mindestens den Pfad zu den Mediendateien, z.B. "media_dir=/mnt/disk1/share/Music" und eventuell auch
'db_dir=/var/cache/minidlna'. Dann den Server starten mit Option '-R' damit Datenbank neu initialisiert wird.
Code:
minidlna -R -f ./minidlna.conf
Jetzt kann man den Server testen...
Edit:Das Problem mit den nicht gefundenen Bibliotheken und das automatische Starten lassen sich mit einem Startscript beheben (wieder 'mal 'was gelernt...). Ich habe mich bei den Scripts der anderen Server bedient und ein klein wenig abgewandelt. Also eine Datei
'/etc.init.d/minidlna.sh' mit folgendem Inhalt erstellen:
Code:
#!/bin/sh
### BEGIN INIT INFO
# Required-Start: $local_fs $syslog
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop miniDLNA
# Description:
### END INIT INFO
DAEMON=/opt/sbin/minidlna
NAME=minidlna
DESC="DLNA/UPnP Server"
PIDFILE=/var/run/minidlna.pid
CONFIGFILE=/opt/etc/minidlna.conf
RETVAL=0
LD_LIBRARY_PATH=/opt/lib:
# abort if no executable exists
[ -x $DAEMON ] || exit 0
checkpid() {
[ -e $PIDFILE ] || touch $PIDFILE
}
case "$1" in
start)
echo "Starting $DESC: $NAME"
checkpid
export LD_LIBRARY_PATH
$DAEMON -f $CONFIGFILE
;;
stop)
echo "Stopping $DESC: $NAME"
killall $NAME
;;
restart)
$0 stop
$0 start
;;
status)
if [ -e $PIDFILE ]; then
echo "$NAME is running."
else
echo "$NAME not running!"
fi
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|status|restart}"
exit 1
;;
esac
exit 0
...dann ausführbar machen und wenn nötig, z.B. wenn das Script auf das NAS kopiert wurde, "owner" und "group" in 'root' ändern:
Code:
chmod u+x /etc/init.d/minidlna.sh
chown root:root /etc/init.d/minidlna.sh
...anschließend testen ob das Ganze auch funktioniert (nicht wundern, im nächsten Code-Block sind Eingaben und Ausgaben zusammen aufgelistet! Aufruf jeweils mit "status", "start" und "stop"):
Code:
root@LS-GL:~# /etc/init.d/minidlna.sh status
minidlna not running!
root@LS-GL:~# /etc/init.d/minidlna.sh start
Starting DLNA/UPnP Server: minidlna
root@LS-GL:~# /etc/init.d/minidlna.sh status
minidlna is running.
root@LS-GL:~# /etc/init.d/minidlna.sh stop
Stopping DLNA/UPnP Server: minidlna
root@LS-GL:~# /etc/init.d/minidlna.sh status
minidlna not running!
root@LS-GL:~#
... und "zum Schluss" wieder der Eintrag in
'rcS', also sichern und dann minidlna-Start anhängen:
Code:
cp /etc/init.d/rcS /etc/init.d/rcS_old
echo "exec_sh minidlna start" >> /etc/init.d/rcS
Edit: Bisher erfolgreich getestete Clients:
- Ubuntu: VLC-Media Player (Treeview funktioniert nicht gut, Wiedergabe OK) und Totem Video-Player, sowohl Musik als auch Video (wichtig: die entsprechenden Coherence Plugins müssen installiert sein). Rhythmbox funktioniert momentan (?) nicht zuverlässig.
- Windows XP:
- Hardware: Plasma-TV Panasonic "Viera" TX-P
Gruß
tungdil