Installation des Logitech Media Servers im Jail
Um den Logitech Media Server auf FreeNAS 11 zu betreiben bin ich wie folgt vorgegangen:
- Anleitung zum Bauen des Logitech Media Servers aus dem Forum befolgen (hierzu habe ich ein separates Jail verwendet). Diese Anleitung funktioniert auch unter FreeNAS 11.
- Eigenen Jail für den Logitech Media Server erstellen (Name: lms)
- Das erzeugte Paket in den neu erstellten Jail kopieren. Den folgenden Befehl auf der FreeNAS Konsole ausführen
cp /mnt/data0/jails/lms_build/tmp/LMS/logitechmediaserver-7.9.0-FreeBSD.tar /mnt/jails/lms/tmp/
- Analoge Schritte aus dem Forum befolgen
pkg update pkg upgrade pw groupadd -n lms -g 30001 pw useradd -n lms -u 30001 -g lms -s /usr/sbin/nologin -c "Logitech Media Server" -d /nonexistent mkdir /usr/local/lms tar xf /tmp/logitechmediaserver-7.9.0-FreeBSD.tar -C /usr/local/lms mv /usr/local/lms/logitechmediaserver-7.9.0-FreeBSD/* /usr/local/lms rmdir /usr/local/lms/logitechmediaserver-7.9.0-FreeBSD/ chown -R lms:lms /usr/local/lms rm /usr/bin/perl rm /usr/bin/perl5 ln -s -f /usr/local/bin/perl5.24.3 /usr/bin/perl ln -s -f /usr/local/bin/perl5.24.3 /usr/bin/perl5
- Init-Skript /etc/rc.d/lms zum automatischen Start des Logitech Media Servers mit folgenden Inhalt erstellen:
#!/bin/sh # This script is a modified version of: # $FreeBSD: branches/RELENG_9_2_0/audio/squeezeboxserver/files/squeezeboxserver.in 302141 2012-08-05 23:19:36Z dougb $ # PROVIDE: lms # REQUIRE: LOGIN # KEYWORD: shutdown # Add the following lines to /etc/rc.conf to enable lms on startup: # lms_enable="YES" # Optional configuration parameters: # Directory where lms writes it's logs to. # lms_logdir="/var/log/lms" # # Directory where lms stores it's cache files. # lms_cachedir="/var/db/lms/cache" # # Directory where lms stores it's configuration. # lms_prefsdir="/var/db/lms/prefs" # # Directory where lms stores the playlists. THIS NEEDS TO BE CONFIGURED THROUGH THE UI. # lms_playlistdir="/var/db/lms/playlists" # # Additional parameters, e.g. "--noimage --novideo" # lms_flags="" # # The charset lms uses. # lms_charset="UTF-8" # # The LC_CTYPE envvar which is necessary to get rid of the warning # """ # Your locale was detected as C, you may have problems with non-Latin filenames. # Consider changing your LANG variable to the correct locale, i.e. en_US.utf8. # """ # See https://forums.freenas.org/index.php?threads/logitech-media-server-for-freenas-9-2-1-1.19044/page-3#post-132872 # lms_lc_ctype="en_US.UTF.8" . /etc/rc.subr name=lms rcvar=lms_enable pidfile=/var/run/${name}/${name}.pid lms_user=lms lms_group=lms load_rc_config ${name} : ${lms_enable="NO"} : ${lms_logdir="/var/log/${name}"} : ${lms_cachedir="/var/db/${name}/cache"} : ${lms_prefsdir="/var/db/${name}/prefs"} : ${lms_playlistdir="/var/db/${name}/playlists"} : ${lms_flags=""} : ${lms_charset="UTF-8"} : ${lms_lc_ctype="en_US.UTF-8"} command_interpreter=/usr/bin/perl command=/usr/local/lms/slimserver.pl command_args="\ --daemon \ --pidfile=${pidfile} \ --logdir=${lms_logdir} \ --cachedir=${lms_cachedir} \ --prefsdir=${lms_prefsdir} \ --charset=${lms_charset} \ ${lms_flags}" start_precmd="lms_start_precmd" stop_postcmd="lms_stop_postcmd" lms_start_precmd() { export LC_CTYPE="${lms_lc_ctype}" if [ ! -d "${pidfile%/*}" ]; then install -d -o ${lms_user} -g ${lms_group} ${pidfile%/*}; fi if [ ! -d "${lms_logdir}" ]; then install -d -o ${lms_user} -g ${lms_group} "${lms_logdir}"; fi if [ ! -d "${lms_cachedir}" ]; then install -d -o ${lms_user} -g ${lms_group} "${lms_cachedir}"; fi if [ ! -d "${lms_prefsdir}" ]; then install -d -o ${lms_user} -g ${lms_group} "${lms_prefsdir}"; fi if [ ! -d "${lms_playlistdir}" ]; then install -d -o ${lms_user} -g ${lms_group} "${lms_playlistdir}"; fi } lms_stop_postcmd() { pids=`pgrep -u ${lms_user}` if [ -n "${pids}" ]; then sleep 1 kill $pids > /dev/null 2>&1 fi pids=`pgrep -u ${lms_user}` if [ -n "${pids}" ]; then wait_for_pids $pids fi } run_rc_command "$1"
- Sicherstellen, dass das Init-Skript ausführbar ist
chmod +x /etc/rc.d/lms
- Datei /etc/rc.conf editieren und die folgende Zeile ergänzen
lms_enable=“YES“ - Zusätzlich erforderliche Verzeichnisse erstellen und Rechte anpassen
mkdir -p /var/log/lms /var/db/lms/cache /var/db/lms/prefs /var/db/lms/playlists chown -R lms:lms /var/log/lms /var/db/lms/cache /var/db/lms/prefs /var/db/lms/playlists
- Benötigtes perl Package installieren
pkg install p5-IO-Socket-SSL
- Logitech Media Server starten
/etc/rc.d/lms start
- Binaries zur Umwandlung im richtigen Ordner hinterlegen und ausführbar machen
cp /usr/local/lms/Bin/i386-freebsd-64int/* /usr/local/lms/Bin/ chmod +x faad flac sls wvunpack
Erweiterung des Dateispektrums des Logitech Media Servers
Der Logitech Media Server benötigt nnoch weitere Binaries, um zusätzliche Formate umzuwandeln z.B. Monkey’s Audio (APE). aus diesem Grund habe ich die folgenden Programme nachinstalliert
pkg install mac
ln -s /usr/local/bin/mac /usr/local/lms/Bin/mac
Will man Cue-Sheets mit APE-Dateien verwenden, benötigt man ffmpeg. Der für mich einfachste Weg war, ein statisches Binary herunterzuladen und in FreeNAS Linux Kompatibilität herzustellen. Dazu unter System -> Tunable den Punkt Add Tunable auswählen und folgende Variablen setzen
Variable: linux_load
Value: YES
Type: Loader
Type: rc.conf
Enabled: yes
Um einen Neustart zu vermeiden, manuell das entsprechende Modul laden (FreeNAS Konsole):
kldload linux
Dann statisches ffmpeg herunterladen und entsprechend verschieben
fetch https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-32bit-static.tar.xz
tar xf ffmpeg-git-32bit-static.tar.xz -C /usr/local/lms/Bin
mv /usr/local/lms/Bin/ffmpeg-git-20170929-32bit-static/ffmpeg /usr/local/lms/Bin
Testen, ob ffmpeg ausgeführt werden kann
/usr/local/lms/Bin/ffmpeg
Jetzt noch wie in meinem anderen Blogartikel beschrieben die convert.conf anpassen und das Skript ffmpeg_wrapper in /usr/local/lms/Bin/ ablegen. Da dieses nur mit der bash funktioniert, diese Shell nachinstallieren
pkg install bash
und die erste Zeile von ffmpeg_wrapper in
#!/usr/local/bin/bash
anpassen. Außerdem wird noch lame benötigt
cd /usr/ports/audio/lame
pkg install gmake gcc
make install
ln -s /usr/local/bin/lame /usr/local/lms/Bin/lame
Zum Schluss noch entsprechend der Anleitung die Datei /usr/local/lms/Slim/Formats/APE.pm anpassen.
Ergänzung: Um LMS zu kompilieren, muss ein Jail mit dem originalen Perl (ohne pkd update) benutzt werden – in diesem Fall v5.24.1. Siehe dazu auch den Post im Squeeze-Box Forum. Zusätzlich musste ich in der buildme.sh noch die Zeile
patch -p0 < ../../icu58_patches/digitlst.cpp.patch
auskommentieren. Tut man das nicht, erhält man die Fehlermeldung
i18n strod_l undefined in digitlst.cpp
In der gleichen Datei auch die Zeile aktivieren, die auskommentiert ist
# build IO::Socket::SSL
Übrigens taucht beim ersten Buid-Vorgang der folgende Fehler auf, wenn man den Logitech Media Server starten will:
The following modules failed to load: DBI EV XML::Parser::Expat HTML::Parser JSON::XS Digest::SHA1 YAML::XS Sub::Name
Wenn man den Build-Vorgang erneut durchführt, verschwindet dieser!
Interessant ist auch der Artikel von Simone mit einem fertigen Script zur Installation