
miniDLNA ab Version 1.0.22 from Scratch kompilieren/installieren
Dieser Thread ist eine Zusammenfassung meiner Erkenntnisse, der ursprüngliche Thread ist
hier zu finden, irgendwo weiter hinten (Seite 4/5).
Einige Vorarbeiten sind hier notwendig, natürlich zu dem freien Zugriff via Telnet/ssh.
Je nach Version der LinkStation (ich hab ne LS-WVL) wird ein gcc benötigt, der aber (zumindest in meinem Fall) nicht unbedingt bei jeder ipkg-Installation aus dem richtigen Repository geholt wird:
der korrekte und funktionierende ist aus der cs08q1armel.
also erstmal die entsprechende conf-Datei fixen, welche von denen es ist, muss man ggf. rausfinden, bei mir war es die Datei
Code:
/opt/etc/ipkg/cross-feed.conf
alternativ kann es auch die Datei /opt/etc/ipkg.conf sein, siehe auch
hier.
prüfen, ob ggf. das richtige Repository eingetragen ist:
Code:
less /opt/etc/ipkg/cross-feed.conf
## Wenn nein, dann
echo "src/gz cross http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/stable" >> /opt/etc/ipkg/cross-feed.conf
vi /opt/etc/ipkg/cross-fedd.conf (alte nicht brauchbare Zeile mit # auskommentieren)
Repository aktualisieren:
Prerequisites installieren, sofern nicht schon vorhanden:
Code:
ipkg install gcc make autoconf automake cvs perl gettext
und die von dem miniDLNA benötigten Bibliotheken
Code:
ipkg install libexif libjpeg libid3tag flac libvorbis sqlite ffmpeg
jetzt den miniDLNA von Sourceforge holen
Code:
wget -O minidlna.tgz http://minidlna.cvs.sourceforge.net/viewvc/minidlna/?view=tar
tar xvzf minidlna.tgz
oder via cvs
Code:
cvs -d:pserver:anonymous@minidlna.cvs.sourceforge.net:/cvsroot/minidlna login
cvs -z3 -d:pserver:anonymous@minidlna.cvs.sourceforge.net:/cvsroot/minidlna co -P minidlna
Vorteil Variante 2:
mit einem Checkout aus dem CVS kann man sich immer eine brand frische Version holen, es werden im Verzeichnis dann immer nur die Dateien aktualisiert, die sich auch tatsächlich geändert haben.
Jetzt noch den autotools klarmachen, das das installierte Perl ohne Option thread kompiliert wurde, d.h. in der Datei
/opt/share/automake-1.11/Automake/Config.pm
die Zeile 32 ändern
Code:
our $perl_threads = 1;
... nach
our $perl_threads = 0;
jetzt noch das vom gcc installierte fehlerhafte libpthreads durch das korrekte vom System ersetzen:
Code:
mv /opt/arm-none-linux-gnueabi/lib/libpthread-2.5.so /opt/arm-none-linux-gnueabi/lib/libpthread-2.5.so.orig
ln -s /lib/libpthread-2.5.so /opt/arm-none-linux-gnueabi/lib/libpthread-2.5.so
Für die, die sich nicht mit UNIX/Linux auskennen: Der zweite Befehl setzt einen symbolische Link, das ist nur ein Zeiger auf die Datei unter /lib, diese NICHT hineinkopieren!!!
Jetzt das in das Verzeichnis des miniDLNA wechseln und einfach
Code:
autoreconf --install
eingeben. Den Rest erledigen die Autotools von allein, sollten sie jedenfalls. (Anm. tun sie nicht mehr, Achenaton)
Danach anstelle von ./configure && make ein
So, als Gimmick für Schreibfaule, eine init.d Datei:
Code:
#!/bin/sh
# description: Startup/shutdown script for MiniDLNA daemon
#
MINIDLNA_BIN=/opt/bin/minidlna
MINIDLNA_ARGS='-f /opt/etc/minidlna.conf'
MINIDLNA_PID=/var/run/minidlna.pid
test -f $MINIDLNA_BIN || exit 0
# Set PATH and LD_LIBRARY_PATH
export PATH=${PATH}:/opt/bin
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/opt/lib
# Return values acc. to LSB for all commands but status:
# 0 - success
# 1 - generic or unspecified error
# 2 - invalid or excess argument(s)
# 3 - unimplemented feature (e.g. "reload")
# 4 - insufficient privilege
# 5 - program is not installed
# 6 - program is not configured
# 7 - program is not running
#
# Note that starting an already running service, stopping
# or restarting a not-running service as well as the restart
# with force-reload (in case signalling is not supported) are
# considered a success.
case "$1" in
start)
echo -n "Starting minidlna daemon"
start-stop-daemon --start --pidfile ${MINIDLNA_PID} --quiet --exec ${MINIDLNA_BIN} -- ${MINIDLNA_ARGS}
# Remember status and be verbose
if [ $? != 0 ]; then
exit 1
fi
echo " [ ok ]"
;;
stop)
echo -n "Shutting down minidlna daemon"
if [ ! -f "${MINIDLNA_PID}" ]; then
echo "\n .. minidlna has not yet been started."
exit 1
fi
start-stop-daemon --stop --pidfile ${MINIDLNA_PID} --quiet
if [ $? != 0 ]; then
echo " [ !! ]"
exit 1
fi
echo " [ ok ]"
;;
restart|reload|force-reload)
## Stop the service and regardless of whether it was
## running or not, start it again.
start-stop-daemon --stop --quiet --oknodo --pidfile ${MINIDLNA_PID}
sleep 5
start-stop-daemon --start --pidfile ${MINIDLNA_PID} --quiet --exec ${MINIDLNA_BIN} -- ${MINIDLNA_ARGS}
if [ $? != 0 ]; then
echo " [ !! ]"
exit 1
fi
echo " [ ok ]"
;;
rebuild)
## Stop the service and regardless of whether it was
## running or not, start it again.
start-stop-daemon --stop --quiet --oknodo --pidfile ${MINIDLNA_PID}
echo -n "Starting minidlna daemon and rebuilding database"
start-stop-daemon --start --pidfile ${MINIDLNA_PID} --quiet --exec ${MINIDLNA_BIN} -- ${MINIDLNA_ARGS} -R
# Remember status and be verbose
if [ $? != 0 ]; then
exit 1
fi
echo " [ ok ]"
;;
*)
echo "Usage: $0 {start|stop|restart|reload|rebuild|force-reload}"
exit 1
;;
esac
exit 0
selbige unter /opt/etc/init.d/minidlna.sh speichern, dann executable machen und die Start/Kill-Sequenzen in die rc.d einlinken
EDIT, die 2.Ich sitze wieder vor meinem Rechner, und hab mir die Startreihenfolge aus der LS mal genau angeschaut. Die Distri auf der ARM hat tatsächlich kein runlevel, also habe ich ein bissel in den runlevels rumgestochert:
Optware patched die Datei /etc/init.d/rcS, das initiale Startscript. Und zwar wird am Ende die Datei
Code:
/etc/init.d/rc.optware
aufgerufen. Diese sorgt dafür, das das opt-Verzeichnis in das Root-/opt eingehängt wird. Wenn das geklappt hat wird die Datei /opt/etc/rc.optware aufgerufen.
Lange Rede, kurzer Sinn: ALLE Links, die in /etc/rc.d/extensions.d oder wo auch immer stehen, sind so genannte "dangling links", hängende Verweise. Diese werde IMMER ignoriert, da diese VOR dem Vorhandensein des /opt-Verzeichnisses aufgerufen werden.
Die Datei /opt/etc/rc.optware prüft bei Aufruf, ob im Verzeichnis /opt/etc/init.d S*-Scripte vorhanden sind. Wenn ja, dann werden diese aufgerufen.
ERGO: ln -s /path/to/start/script /opt/etc/init.d/S01_script
oxygen8 hat hier die richtige Lösung gefunden

Code:
chmod +x /opt/etc/init.d/minidlna.sh
ln -s /opt/etc/init.d/minidlna.sh /opt/etc/init.d/S61_minidlna.sh
ln -s /opt/etc/init.d/minidlna.sh /etc/rc.d/extensions.d/K61_minidlna.sh
Falls der geneigte Kompilierer seine Quellen aus dem cvs mit Checkout geholt hat (siehe oben), benötigt er für ein Rebuild des minidlna nicht mehr das gesamte Programm. An dieser Stelle reicht es aus, einfach ein
auszuführen.
meine miniDLNA-Conf (zusammengefasst)
Code:
media_dir=V,/mnt/array1/media/Video
media_dir=A,/mnt/array1/media/Musics
friendly_name=Amenophis DLNA
db_dir=/opt/var/cache/minidlna
log_dir=/opt/var/log
album_art_names=Cover.jpg/cover.jpg/AlbumArtSmall.jpg/albumartsmall.jpg/AlbumArt.jpg/albumart.jpg/Album.jpg/album.jpg/Folder.jpg/folder.jpg/Thumb.jpg/thumb.jpg
inotify=yes
enable_tivo=yes
strict_dlna=no
notify_interval=900
serial=12345678
model_number=1
falls man sich nicht sicher ist, ob die Verzeichnisse vorhanden sind, einfach
Code:
mkdir -p /opt/var/cache/minidlna
mkdir -p /opt/var/log
eingeben.
Mein miniDLNA läuft, meine Samsung-Glotze stellt sich ein bissel blöd an, vor allem bei avi's mit mehreren Sprachen und Untertiteln, dafür machts der BD-Player um so besser. mkv's mit Sprachwechsel und Untertiteln gehen auch. Und dafür, das der kein Geld kostet und ständig weiterentwickelt wird, reichts

, dank noch mal an den Entwickler des miniDLNA
Achenaton