- Abraxas - http://www.effinger.org/blog -

Logitech Media Server auf FreeNAS 11

Installation des Logitech Media Servers im Jail

Um den Logitech Media Server auf FreeNAS 11 zu betreiben bin ich wie folgt vorgegangen:

  1. Anleitung zum Bauen des Logitech Media Servers aus dem Forum [1] befolgen (hierzu habe ich ein separates Jail verwendet). Diese Anleitung funktioniert auch unter FreeNAS 11.
  2. Eigenen Jail für den Logitech Media Server erstellen (Name: lms)
  3. 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/
  4. 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
  5. 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"
  6. Sicherstellen, dass das Init-Skript ausführbar ist
    chmod +x /etc/rc.d/lms
  7. Datei /etc/rc.conf editieren und die folgende Zeile ergänzen
    lms_enable=“YES“
  8. 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
  9. Benötigtes perl Package installieren
    pkg install p5-IO-Socket-SSL
  10. Logitech Media Server starten
    /etc/rc.d/lms start
  11. 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 [2], 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 [3] 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 [2] 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 [2] die Datei /usr/local/lms/Slim/Formats/APE.pm anpassen.