PlexConnect und Plex Mediaserver unter Debian Linux

Aus Laub-Home Wiki

Achtung!!! Die Lösung hier funktioniert nun auch nach dem Update der Trailer App durch Apple, bei der die Verbindung auf HTTPs umgebaut wurde!

Wer endlich seinen AppleTV 3 als Streaming Client nutzen will, der kann dies nun dank PlexConnect machen. Ich habe hier mal alles wichtige zusammengetragen um auf einem Debian Linux Server (unter Ubuntu sicherlich das selbe in Grün) Plex, samt PlexConnect zum laufen zu bringen und die Library dann am AppleTV nutzen zu können.

Installation Plex MediaServer

Es gibt ein eigenes Plex Repository das verwendet werden kann:

echo "# Plex Repository" >> /etc/apt/sources.list
echo "deb http://shell.ninthgate.se/packages/debian wheezy main" >> /etc/apt/sources.list
curl http://shell.ninthgate.se/packages/shell-ninthgate-se-keyring.key | apt-key add -
aptitude update
aptitude install plexmediaserver

Nach der Installation ist er per Webinterface erreichbar:

  • http://YOURSERVERIP:32400/web/

Nun kann man hier seine Videos, Bilder und Music Ordner einrichten und diese Via Plex freigeben. Ich denke das sollte alles selbsterklärend sein, dank des super Web Interfaces.

Deutsche Film Titel und Informationen

Wen es stört, dass Plex Filme mit Englischen Titeln, Covern und Film Informationen anzeigt, der kann das Ganze auch auf Deutsch umstellen. Hierfür einfach im Webinterface, auf der Startseite, bei Kanäle auf das Plus, für Kanäle hinzufügen, klicken. Nun oben in der Leiste auf "mehr" und "Metadata Agents" auswählen. Und wählt dann "MoviePilot" und "OFDB" aus und installiert sie.
Nun muss noch die Reihenfolge der Database Abfragen geändert werden. Hierfür geht in den Einstellungen nach "Agenten". Dann bei Filme --> Freebase die Einträge per Drag 'n Drop in folgende Reihenfolge bringen:
"Moviepilot", "OFDB", "Freebase", "Wikipedia", "MovieposterDB", "TheMovieDB", "Local Media Assets (Movies)", "OpenSubtitles.org"
nun auf "Settings" bei "Moviepilot" klicken und folgende Optionen setzen:

  • (aktiviert) Lade Filmtitel von Moviepilot
  • (deaktiviert) Lade Zusammenfassung von Moviepilot
  • (aktiviert) Lade Filmplakat von Moviepilot

dann noch auf "Settings" bei "OFDB" klicken und folgende Optionen setzen:

  • alle Optionen aktiveren

zum Schluss auf "Settings" bei "Freebase" klicken und folgende Optionen setzen:

  • (aktiviert) Localized Titles

Nun am besten die Sektion neu anlegen und ganz wichtig in den erweiterten Einstellungen muss DEUTSCH und die Freebase DB ausgewählt sein

Installation PlexConnect

Als nächstes braucht man den PlexConnect. Dieses Python Script erlaubt es dem AppleTV via Trailer App auf die Plex Library zuzugreifen.

aptitude install git-core
cd /opt/
git clone https://github.com/iBaa/PlexConnect.git
cd PlexConnect

Nun brauchen wir noch die Zertifikate für die HTTPs Verbindung:

mkdir /opt/PlexConnect/assets/certificates/
openssl req -new -nodes -newkey rsa:2048 -out /opt/PlexConnect/assets/certificates/trailers.pem -keyout /opt/PlexConnect/assets/certificates/trailers.key -x509 -days 7300 -subj "/C=US/CN=trailers.apple.com"
openssl x509 -in /opt/PlexConnect/assets/certificates/trailers.pem -outform der -out /opt/PlexConnect/assets/certificates/trailers.cer && cat /opt/PlexConnect/assets/certificates/trailers.key >> /opt/PlexConnect/assets/certificates/trailers.pem

Hier passen wir nun die Konfigurationsdatei an:
Settings.py

    'ip_pms'          :('PLEXMEDIASERVERIP',), \
    'ip_dnsmaster'    :('DNSSERVER',), \
    'certfile'        :('/opt/PlexConnect/assets/certificates/trailers.pem',), \

So nun kann man das Ganze starten:

./PlexConnect.py

Das reicht erstmal für den ersten Test. Natürlich muss man das Ganze nun noch als Dienst laufen lassen.

Init Script zum starten von PlexConnect

/etc/init.d/plexconnect

#!/bin/bash
### BEGIN INIT INFO
# Provides:          plexconnect
# Required-Start:
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: This is the Plex Connect daemon
# Description:       This script starts PlexConnect in debian
### END INIT INFO

. /lib/lsb/init-functions

NAME=PlexConnect

INSTDIR="/opt/PlexConnect"
DAEMON="$INSTDIR/PlexConnect.py"
DAEMON_OPTS="2>&1 >/dev/null"
DAEMON_USER="root"

PIDFILE=/var/run/PlexConnect.pid

test -x "$DAEMON" || exit 5

case $1 in
        start)
                if [ -e $PIDFILE ]; then
                        status_of_proc -p $PIDFILE "$DAEMON $DAEMON_OPTS" "$NAME process" && status="0" || status="$?"
                        if [ $? = "0" ]; then
                                log_success_msg "Starting the process $NAME"
                                exit # Exit
                        fi
                fi
                # Start the daemon.
                # Start the daemon with the help of start-stop-daemon
                # Log the message appropriately
                if start-stop-daemon --start --quiet --oknodo --background --make-pidfile --pidfile $PIDFILE --startas $DAEMON -p $PIDFILE -- ${DAEMON_OPTS}; then
                        log_success_msg "Starting the process $NAME"
                else
                        log_failure_msg "Starting the process $NAME"
                fi
                ;;
        stop)

                # Stop the daemon.
                if [ -e $PIDFILE ]; then
                        status_of_proc -p $PIDFILE "$DAEMON DAEMON_OPTS" "Stoppping the $NAME process" && status="0" || status="$?"
                        if [ "$?" = 0 ]; then
                                start-stop-daemon --stop --signal 2 --quiet --oknodo --pidfile $PIDFILE && /bin/rm $PIDFILE
                                log_success_msg ""Stopping the $NAME process""
                        fi
                else
                        log_failure_msg "$NAME process is not running"
                fi
                ;;
        restart)
                # Restart the daemon.
                $0 stop && sleep 2 && $0 start
                ;;
        status)
                # Check the status of the process.
                if [ -e $PIDFILE ]; then
                        status_of_proc -p $PIDFILE "$DAEMON $DAEMON_OPTS" "$NAME process" && exit 0 || exit $?
                        log_success_msg "$NAME process is running"
                else
                        log_failure_msg "$NAME process is not running"
                fi
                ;;
        reload)
                $0 restart
                ;;
        *)
                # For invalid arguments, print the usage message.
                echo "Usage: $0 {start|stop|restart|reload|status}"
                exit 2
                ;;
esac

und nun noch Execute Recht vergeben und ab in den Autostart:

chmod +x /etc/init.d/plexconnect
update-rc.d plexconnect defaults

Zu guter Letzt starten:

/etc/init.d/plexconnect start

Probleme mit eigenem Webserver auf Port 80 und 443

Ein Problem gibt es leider. PlexConnect startet einen eigenen Webserver auf Port 80 und 443. Dies beisst sich natürlich mit schon vorhandenen Servern. Hier muss nun zum Beispiel der apache auf einen anderen Port umgebogen werden oder Plexconnect auf einer eigenen virtual IP laufen. Wie das geht?

1. Apache Port 80 und 443 umbiegen

Nun als erstes mal sollte man in der Datei ports.conf den Port 80 abschalten oder abändern:
/etc/apache2/ports.conf

NameVirtualHost *:81
Listen 0.0.0.0:81
NameVirtualHost *:8443
Listen 0.0.0.0:8443

Als nächste muss dann noch jeder vhost noch auf einen anderen Port gelegt werden.

2. Eigener PlexConnect vhost

!!!Achtung!!! Bin nicht sicher ob das noch geht, da man auch 443, also HTTPs mitlerweile braucht.
Will man seinen Apache Weiterhin auf Port 80 laufen haben, kann man via Proxy Regel einen eigenen vHost für PlexConnect einrichten, der dann via Proxy auf die PlexConnect Applikation zugreift.
Stoppen von Plexconnect

/etc/init.d/plexconnect stop

/etc/apache2/sites-available/trailers.apple.com

<VirtualHost *:80>
    # This is the VHost for Plex Connect
    ServerName trailers.apple.com
    ServerAlias atv.plexconnect
    ProxyRequests Off
    ProxyPreserveHost On

    <Proxy *>
        Order allow,deny
        Allow from all
    </Proxy>

    ProxyPass / http://your.server.name.or.ip:8080/
    ProxyPassReverse / http://your.server.name.or.ip:8080/
</VirtualHost>

Dann aktivieren wir das Ganze:

a2ensite trailers.apple.com
service apache2 reload

Nun noch im PlexConnect den Port ändern:
/opt/PlexConnect/Settings.cfg

port_webserver = 81

/opt/PlexConnect/Settings.py

    'port_webserver'  :('81',), \

und starten:

/etc/init.d/plexconnect start

3. Plexconnect auf eigener Virtual IP laufen lassen

Als erstes braucht man dafür ein virtuelles Netzwerkinterface. Dafür erweitern wir die folgende Datei:
/etc/network/interfaces

auto eth0:1
iface eth0:1 inet static
        address 192.168.0.11
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255

Die Haupt IP des Servers in diesem Fall wäre die 192.168.0.10 und die Virtuelle 192.168.0.11. Das Interface kann nun mit:

ifup eth0:1

gestartet werden und man sollte nun erstmal als Test einen Ping von einem entfernten Rechner absetzten:

ping 192.168.0.11

Nun muss der Apache Server angepasst werden. Hierfür werden in den Konfigdateien 0.0.0.0 durch die Haupt IP Adresse ersetzt und bei *:80 und *:443 die IP Adresse anstelle des * gesetzt.
/etc/apache2/ports.conf

NameVirtualHost 192.168.0.10:80
Listen 192.168.0.10:80
Listen 127.0.0.1:80

<IfModule mod_ssl.c>
    # If you add NameVirtualHost *:443 here, you will also have to change
    # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
    # to <VirtualHost *:443>
    # Server Name Indication for SSL named virtual hosts is currently not
    # supported by MSIE on Windows XP.
    Listen 192.168.0.10:443
</IfModule>

Als nächstes konfigurieren wir PlexConnect auf die virtuelle IP:
/opt/PlexConnect/Settings.py

    'ip_pms'          :('192.168.50.11',), \
    'enable_plexconnect_autodetect':('False', 'False'), \
    'ip_plexconnect'  :('192.168.0.11',), \
    'ip_webserver'    :('192.168.0.11',), \

und löschen ggf. die vorhandene Settings.cfg

rm /opt/PlexConnect/Settings.cfg

nun kann man PlexConnect starten

/etc/init.d/plexconnect start

Man kann nun mit netstat prüfen ob auf allen interfaces HTTP und HTTPs laufen

netstat -an |egrep ":443 |:80 |:53 "
tcp        0      0 192.168.0.11:80        0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:80            0.0.0.0:*               LISTEN     
tcp        0      0 192.168.0.10:80        0.0.0.0:*               LISTEN     
tcp        0      0 192.168.0.11:443       0.0.0.0:*               LISTEN     
tcp        0      0 192.168.0.10:443       0.0.0.0:*               LISTEN     
udp        0      0 0.0.0.0:53              0.0.0.0:*                          

Als letztes muss nun natürlich noch am AppleTV die DNS IP auf das neu erstellte Virtual Interface zeigen. Hier also auf die 192.168.0.11

Konfiguration AppleTV

Als erstes muss das erstellte SSL Zertifikat auf den AppleTV übertragen werden. Ich gehe hier nur auf die Methode mit dem "Apple Configurator" ein. Ihr benötigt dafür ebenfalls ein Micro USB Kabel. Den "Apple Configurator" bekommt man über den Mac App Store.
Um das Zertifikat übertrage zu können brauchen wir es erstmal auf dem Mac, Terminal öffnen und:

cd Desktop
scp root@192.168.0.10:/opt/PlexConnect/assets/certificates/* .

Nun sollten alle drei Zertifikats Dateien auf dem Desktop liegen.
Als nächstes muss der Apple Configurator, mit per USB angeschlossenem und mit Strom versorgtem AppleTV, gestartet werden. Dann folgt einfach den Screenshots um Das Zertifikat auf den AppleTV zu bringen:

Nun muss nur noch der DNS Server des AppleTVs auf die IP des PlexConnect Servers umgestellt werden:
Einstellungen --> Allgemein --> Netzwerk --> Ethernet/Wlan --> DNS konfigurieren (Manuell) --> DNS (IP des PlexConnect eintragen)
So das wars. Achja, der Plex ist nun in der "Trailer" App versteckt :-) Viel Spaß!

Quellen