PLEX auf dem Raspberry Pi für Noobs
Ich hab heute mal versucht, PLEX auf dem Raspberry Pi aufzusetzen. Das ging ziemlich reibungslos, nachdem ich ein paar Startschwierigkeiten beim Flashen von 64GB SD Karten hatte. Mit einer 32GB Karte ging es dann komischerweise.
EDIT
Es macht Sinn, dann direkt von der angeschlossenen Festplatte zu booten, also habe ich dafür die Steps auch mal hinzugefügt.
Inhalt
Externe Festplatte & Automounting
Von externer Festplatte booten
PLEX
Plex ist ein tolles Projekt um einen eigenen Media-Server und entsprechende Clients aufzusetzen. Sozusagen wie ein privates Netflix. Das ganze gibt es für den Raspi für lau, jedoch sind viele Client-Funktionen kostenpflichtig.
Server
Der Server verwaltet eure Mediendaten wie Filme, Fotos und Musik und stellt diese für die Clients bereit. Ich installiere die Software für den Plex-Server auf dem <$> RaspberryPi 3B+ </$> Besser wäre ein <$> 4er </$>, aber die sind momentan einfach nicht zu bekommen.
Raspi OS
Mit dem Raspberry Pi Imager können wir das Raspi OS auf eine SD Karte flashen. Ich nutze hier eine 32GB Karte, da ich mit einer 64GB Karte probleme hatte. Früher habe ich immer den Balena Etcher benutzt, jedoch hat die Raspberry Foundation einen eigenen Imager rausgebracht, der direkt das benötigte Image raussucht und auf die SD Karte flasht.
https://www.raspberrypi.com/software/
Settings
Ein sehr praktisches Feature des Raspi-Imagers sind die etwas versteckten Settings. Hier könnt ihr die WLAN Daten und SSH Erlaubnis direkt vor dem Flashen einstellen. Früher musste man das immer umständlich über den Explorer und files lösen. Also eine praktische Arbeitserleichterung, da die SD-Karte dann ready to go ist nach dem flashen.
Booten
Die SD-Karte kommt in den Slot im Raspberry Pi und wir schließen ihn an ein ausreichen starkes <$> Netzteil </$>. Wenn die rote und die gelbe LED leuchten und blinken, sollte der Bootvorgang erfolgreich sein.
IP herausfinden
Als nächstes müssen wir die IP des Raspberry Pi herausfinden. Dazu kann man einen IP Scanner oder die Weboberfläche des Browser benutzen. Je nachdem was ihr für einen Host-Namen bei den Settings im Imager genutzt habt, findet ihr jetzt den raspi in der Liste der Geräte. Notiert (oder merkt) euch die IP-Adresse.
ssh
Jetzt können wir eine SSH-Verbindung aufbauen. Mit cmd (win taste und dann cmd + enter auf der Tastatur) öffnet sich das Terminal unter windows.
Wir geben den Befehl für die SSH verbindung zum Raspberry Pi ein:
ssh pi@192.168.178.XX
#oder halt in pseudocode
ssh username@ip
Falls ihr im Imager einen anderen Nutzernamen vergeben habt, muss der befehl entsprechend angepasst werden. Genauso das Passwort, falls ihr ein eigenes vergeben habt. Dann Standard-Passwort ist
raspberry
Wir stellen sicher das alles auf dem neuesten Stand ist:
sudo apt-get update
sudo apt-get upgrade
Dann brauchen wir das HTTPS Protokoll
sudo apt-get install apt-transport-https
Wir können die PLEX Quelle hinzufügen:
echo deb https://downloads.plex.tv/repo/deb public main | sudo tee /etc/apt/sources.list.d/plexmediaserver.list
Und nun von dort das Paket herunterladen:
curl https://downloads.plex.tv/plex-keys/PlexSign.key | sudo apt-key add -
Dann müssen wir wieder die Paketlisten aktualisieren:
sudo apt-get update
Und können anschließend den Plex Mediaserver installieren:
sudo apt-get install plexmediaserver
Falls ihr eure IP vergessen habt, könnt ihr diese nochmal nachschauen:
hostname -I
Nun öffnen wir die Datei „cmdline.txt“ mit dem File Editor „nano“ und fügen die IP in einer neuen Zeile ein:
sudo nano /boot/cmdline.txt
#es öffnet sich die datei, mit etwas inhalt. Die Zeile mit eurer IP muss hinzugefügt werden:
ip=192.168.178.XX
Wir speichern mit strg+o und verlassen die Datei mit strg+x. Anschließend können wir den Raspberry Pi neustarten:
sudo reboot
Wenn alles geklappt hat, können wir im Browser nun mit der bekannten IP und dem Standardport auf das Webinterface vom Plex Server zugreifen:
http://192.168.178.XX:32400/web
Hier gibt es nun erstmal einen Willkommensbildschirm. Log-in mit eurem Account oder Account erstellen wäre jetzt eine gute Idee 🙂
Es kommt der Hinweis auf die Premium-Benefits. Gönnt euch, Plex ist cool und wert finanziert zu werden. Ich schließe das einfach.
Nun können wir einen eindeutigen Namen vergeben:
Ordnerstruktur anlegen
Als nächstes müssen wir unsere Mediatheken anlegen. Dazu brauchen wir aber erstmal eine Ordnerstruktur auf dem Pi. Ggf. wollt ihr dazu vorher ein externes Speichermedium anschließen, ansonsten geht es auf der SD Karte weiter. Wir geben die folgenden Befehle nacheinander ein:
cd /
ls
cd media
sudo mkdir Filme
sudo mkdir Serien
sudo mkdir Musik
sudo mkdir Fotos
cd: change directory – Bringt euch zum eingegeben Dateipfad. Bei einer externen Festplatte wollt ihr natürlich die Ordner dort anlegen.
ls: list – zeigt den Inhalt des aktuellen Ordners an.
sudo: superuser do – Befehl als Admin ausführen.
mkdir: make directory – erstellt den Ordner mit dem eingegebenen Namen.
Mediatheken einrichten
Zurück auf der Plex Weboberfläche können wir nun die vier Mediatheken Filme, Fotos, Musik und Serien mit den entsprechenden Ordnern einrichten. Suchst dazu einfach den korrekten Pfad raus.
Wenn ihr alles eingerichtet habt, gibt es einen Link zu Client-Apps, das brauchen wir aber noch nicht.
Nun sehen wir die Plex-Startseite. Die sieht auf dem Server und auf den Clients gleich aus.
Daten hinzufügen
Damit wir unsere eigenen Inhalte sehen können, müssen diese auf dem Server landen. Das kann man auch im Terminal machen mit safe copy.
safe copy
scp <Dateipfad> pi@192.168.178.xx:<Dateipfad>
Samba Share
Deutlich bequemer geht das aber über Samba Share. Damit können wir den Raspi einfach als Netzlaufwerk im Explorer finden. Mit aktiver SSH Verbindung führen wir nun den folgenden Befehl im Terminal aus:
sudo apt install samba samba-common-bin
Nach der Installation des Packets taucht auch ein Konfigurationsdialog auf. Ich hab hier YES gewählt.
Danach nutzen wir wieder den Editor „Nano“ um die smb.conf zu bearbeiten:
sudo nano /etc/samba/smb.conf
Wir navigieren nach ganz unten in dieser Datei (Pfeiltaste unten) und fügen am Ende folgende Zeilen hinzu:
[plex-media]
path = /media
writeable = yes
browseable = yes
create mask = 0777
directory mask = 0777
public = no
Damit ist das media Verzeichnis und alle Unterordner als Ordner im Netzwerk sichtbar. Ggf. müsst ihr hier den Pfad zur externen Festplatte oder dem USB Stick anpassen.
Jetzt können wir noch einen User und ein Passwort hinzufügen:
sudo smbpasswd -a pi
Danach starten wir den Samba-Service neu:
sudo systemctl restart smbd
Wenn alles geklappt hat, können wir im WIndows unter Netzwerk den RaspberryPi als Laufwerk sehen.
Beim verbinden sollte nun auch die Frage nach dem Nutzer und PW kommen. Wir haben hier Pi hinzugefügt.
Falls ihr beim Rüberkopieren eine Fehlermeldung bekommt, das euch die Rechte fehlen, öffnet wieder das Terminal, startet die ssh-Verbindung und gebt folgenden Befehl ein:
sudo chmod -R 777 /media
Das sollte die Lese- und Schreibrechte für den Ordner /media und alle Unterordner aktualisieren. Dann können wir einfach unsere Elemente wie gewohnt per Drag&Drop im Explorer an den richtigen Ort kopieren.
Falls ihr nichts unter Netzwerk findet, probiert mal einfach direkt auf den samba pfad zu zugreifen:
\\raspberrypi
Einlesen
Damit die Filme, etc. dann auch in der Mediathek angezeigt werden, müssen wir diese auch einlesen. Unter Kontoeinstellungen und links im Menü recht weit runter unter Verwalten – Mediatheken können wir das manuell machen. Hier findet sich im rechten oberen Bereich ein Button mit „Mediathek-Dateien einlesen“.
Damit das in Zukunft automatisch abläuft, können wir etwas weiter oben im Menü links auf Einstellungen – Mediathek ein paar haken setzen:
Externe Festplatte
Ihr könnt einen großen USB Stick oder eine externe Festplatte an den Raspi anschließen und permanent mounten. Aber Achtung: Bei externen Festplatten ist die Wahrscheinlichkeit hoch, dass der Pi nicht genug saft hat, um diese per USB zu betreiben. Hier schafft ein <$> USB Hub mit eigener Spannungsversorgung </$> Abhilfe.
USB Sticks sind hier ggf. die günstigere Alternative, da der Raspi vier Ports hat und man Sticks mit <$> 256GB </$> oder <$> 128 GB </$> für kleines Geld bekommt. Aber Achtung – auch hier gilt das Problem mit der Spannungsversorgung.
Wir stöpseln also das Speichermedium in den Raspi und im Terminal (remember – ssh Verbindung) geben wir den Befehl ein:
df -h
Damit fragt man eigentlich den freien Speicherplatz ab (df: disc free), aber er gibt auch die Namen an. Wir suchen also unseren Kandidaten aus der Liste aus:
Bei mir ist meine externe Festplatte nicht aufgetaucht. Wir suchen nach etwas mit /dev/ und dem entsprechenden Speicherbereich. Falls ihr hier auch nichts seht, was wie eure gesuchte Festplatte aussieht, dann probiert alternativ folgenden Befehl:
sudo fdisk -l
Nun haben wir auf jedenfall den Pfad /dev/sdb in meinem Fall.
Die dritte möglichkeit ist der Befehl
lsblk
Das gibt auch eine Übersicht über angeschlossene Laufwerke und deren Partitionen.
Festplatte formatieren (optional)
Ich hab meine aus einem alten Laptop und will also erstmal die drei Partitionen loswerden. Das könnt ihr aber auch Überspringen.
Achtung: FDisk kann eure Platte neu partitionieren und alles Wipen. Wenn ihr Daten retten müsst, macht das vorher – ggf. in einer Desktop Umgebung.
sudo fdisk /dev/sdb
Der Befehl startet fdisk, welches euch durch ein Menü führt, um die Festplatte neu zu formatieren. Hier könnt ihr auch das Datei System ändern, falls ihr wollt. Ich werde bei ntfs bleiben, viele Linux-People setzen ja aktuell auf ext4. Wir tippen nun g im Dialog ein:
g
n
[enter]
[enter]
[enter]
N
w
Jetzt haben wir mit g die GPT Tabelle erstellt. Mit n wählen wir die Standardeinstellung. Die nächsten drei Prompts können wir mit enter auf den default werten belassen (Partition Nr, erster und letzter Sektor). Danach können wir wählen ob wir das Dateisystem behalten möchten. Falls ihr es löschen wollt, bestätigt mit Y, sonst behaltet es mit N.
Danach können wir mit w speichern und verlassen.
Mit dem Befehl
sudo blkid
können wir prüfen, ob alles geklappt hat.
Falls ihr das Dateisystem (bzw. die Signatur) mit Y entfernt habt, könnt ihr eine neue mit dem folgenden Befehl zuweisen:
sudo mkfs.ext4 /dev/sdb1
UUID auslesen
Wir feuern den nächsten Befehl (bei euch der Entsprechende Pfad):
Ich möchte die Partition 3 permanent mounten.
sudo blkid /dev/sdb3
#also
sudo blkid /pfad/pfad/
Wir müssen uns hier die UUID und den Type kopieren. Je nachdem ob ihr FAT32 oder NTFS als Dateisystem habt, müssen ggf. noch Pakete installiert werden.
FAT32:
nichts weiter erforderlich.
NTFS:
sudo apt install ntfs-3g
exFAT:
sudo apt install exfat-fuse
sudo apt install exfat-utils
Als nächstes erstellen wir einen Ordner, den wir mit dem Speichermedium verbinden. Den können wir beliebig nennen:
sudo mkdir -p /mnt/external
Wir müssen wieder die entsprechenden Rechte vergeben. Diesmal nutzen wir
sudo chown -R pi:pi /mnt/external
chown: change owner – wir Ändern den Besitzer des Ordners zum User pi.
Automatisch Mounten
Jetzt können wir Datei „fstab“ mit Nano bearbeiten. Diese Datei handelt eingehängte Partitionen. Mehr Infos im Wiki
sudo nano /etc/fstab
Wir fügen ganz unten an die Datei die Infos aus blkid für unser externes Speichermedium ein:
UUID=[UUID] /mnt/external [TYPE] defaults,auto,users,rw,nofail,noatime 0 0
Wir speichern mit strg + o und verlassen nano mit strg + x.
Da der Raspberry Pi das Laufwerk zuvor automatisch eingehängt / gemounted hat, müssen wir es manuell aushängen. Achtung, Pfad beachten:
sudo umount /dev/sdb3
Und nun hängen wir es wieder ein – diesmal wird es aber zu unserer manuellen Konfiguration zugeordnet.
sudo mount -a
Das ganze automatische mounting können wir nun einmal testen, in dem wir den Raspi neu starten.
sudo reboot
Nun sollten die Pfade gleich bleiben und wir können unsere Mediathek im Plex entsprechend anpassen. Dazu legen wir die Ordner diesmal auf der externen Festplatte an.
Naming Convention
Auf der Plex-Guide findet ihr viele Infos dazu. Es reicht aber für jeden Film einen Unterordner mit dem korrekten Namen anzulegen und die Filmdatei exakt gleich zu benennen.
Clients
Damit wir die Inhalte nun auch Abrufen können brauchen wir Clients die sich mit dem Server verbinden. Das geht sogar außerhalb des Heimnetzwerkes, da alles eurem Plex Account zugeordnet wird.
RasPlex auf einem weiteren RaspberryPi
Mit einem Raspi & RasPlex könnt ihr einen Beamer oder einen TV in einen MediaClient – ähnlich wie ChromeCast, FireTV oder AppleTV verwandeln.
Plex Client in Home Assistant
Natürlich darf der Client nicht im HomeAssistant fehlen. Dazu gehen wir einfach auf Einstellungen – Integrationen und suchen nach Plex.
Hier können wir nun ein neuen Token vergeben lassen, oder unseren vorhandenen nutzen.
Manuelle Konfiguration:
Ich bevorzuge hier die manuelle Konfiguration.
Hier müssen wir die IP und den Port eingeben, sowie den Token. Der ist etwas umständlich zu bekommen.
Token
Wir müssen dazu auf https://app.plex.tv/desktop/#!/ gehen und zu einem Element in unserer Mediathek navigieren.
Dort können wir auf die drei Punkte auf Medien Info gehen. (Das ist natürlich nicht der Film, sondern eine umbenannte Beispieldatei 😉 ).
Hier wiederum klicken wir auf View XML.
Es öffnet sich ein neues Browserfenster und das Token ist am Ende der URL.
Wenn alles geklappt hat, seht ihr im Home Assistant folgende Meldung:
Plex App auf dem Smartphone
Einfach aus dem Playstore / Appstore herunterladen und installieren.
Damit ihr euren eigenen Server findet, müsst ihr links im Menü zunächst auf „Mehr“ und dann auf „Bearbeiten“ gehen. Nun könnt ihr die Mediatheken mit dem Pin fest ins Menü integrieren.
Plex App auf FireTV
Auch hier, einfach wie gewohnt aus dem Store beziehen und Einloggen.
Media Center abrunden
Natürlich könnt ihr den Pi jetzt noch in ein cooles Case packen. Vll macht hier auch eins mit aktiver Kühlung sinn.
Bei mir parkt der Raspi neben dem Router und ist per Kabel verbunden.
Happy Streaming!
Von Festplatte booten
Natürlich macht es Sinn, direkt von der Festplatte zu booten, wenn diese schon da ist. Ich hab nämlich noch ein paar weitere Dienste (Pi-Hole, Torrent und VPN) installiert und Schwups sind die 32GB voll.
Wir können jetzt also einfach unsere zwei Partitionen von der SD Karte mit auf die Externe Festplatte klonen. Dazu installieren wir das Tool Raspi-clone.
git clone https://github.com/billw2/rpi-clone.git
cd rpi-clone
sudo cp rpi-clone rpi-clone-setup /usr/local/sbin
sudo rpi-clone-setup -t $(hostname -s)
sudo rpi-clone -s
Als nächstes starten wir den Clone-Prozess:
sudo rpi-clone sda
Ich habe einmal mit yes bestätigt und als file system label ntfs eingegeben. Der gesamte Prozess hat bei mir etwas über 40 minuten gedauert, also habt Geduld.
Jetzt müssen wir die zwei Partitionen wieder mounten, damit das System auf die Pfade zugreifen kann. Wir haben ein root und ein boot Verzeichnis, wobei das boot-Verzeichnis innerhalb von root liegt.
Wir navigieren also zunächst mal in die Ordnerstruktur, die uns raspi-clone angelegt hat.
cd /mount/clone
Hier werden wir gleich eine Partition mounten. Wir brauchen aber noch das boot verzeichnis:
sudo mkdir boot
Mit lsblk schauen wir, wie unsere Partitionen heißen:
lsblk
Nun können wir die beiden Partitionen Mounten – hier müsst ihr ggf die Namen anpassen:
sudo mount /dev/sda1 /mnt/clone/boot
sudo mount /dev/sda2 /mnt/clone
Als nächstes müssen wir die PARTUUID herausfinden. Das geht mit:
sudo lsblk -o name,mountpoint,size,partuuid /dev/sda1
sudo lsblk -o name,mountpoint,size,partuuid /dev/sda2
Jetzt können wir die Datei cmdline.txt (aber im neuen geklonten Verzeichnis) editieren. Das gute ist, das auf der SD-Karte die Originaldatei unangetastet als BackUp bleiben kann.
cd boot
sudo nano cmdline.txt
Hier ändern wir die Datei um auf unsere PARTUUID des root Verzeichnis zu zeigen. Außerdem fügen wir einen rootdelay hinzu.
console=serial0,115200 console=tty1 root=PARTUUID=c7fc3150-02 rootfstype=ext4 fsck.repair=yes rootwait rootdelay=5
Dann müssen wir nochmal fstab (die geklonte version) editieren, damit die Festplatte automatisch entsprechend gemounted wird. Wir tragen wieder unsere PARTUUIDs ein:
sudo nano /mnt/clone/etc/fstab
proc /proc proc defaults 0 0
PARTUUID=c7fc3150-01 /boot vfat defaults 0 2
PARTUUID=c7fc3150-02 / ext4 defaults,noatime 0 1
UUID=A2A4E188A4E15F73 /mnt/usb1 ntfs defaults,auto,users,rw,nofail,noatime 0 0
# a swapfile is not a swap partition, no line here
# use dphys-swapfile swap[on|off] for that
Mit strg+o, strg+x speichern und verlassen wir den Editor.
Ein sudo reboot sollte der raspi sich nun neustarten lassen und diesmal von der externen Festplatte booten. Hat bei mir einwandfrei geklappt.
Happy Hacking!
$ Die mit einem $ gekennzeichneten Links, sind Affiliate Links. Wenn du über diese in den Shop gelangst und etwas kaufst, bekomme ich eine kleine Provision