Guida: installare Plex in container LXC abilitando accelerazione Quick Sync

Leggi questo articolo grazie alle donazioni di Massimo Tofanelli, Maurizio Guerra, Paolo Palumbo, Massimo Comar, Franco Magro, Giuseppe Pintore, Matteo Quadri, Mauro Vanzelli, Paola Bellini, Andrea Draghetti, Fabio Sereno.
♥ Partecipa anche tu alle donazioni: sostieni SaggiaMente, sostieni le tue passioni!

Plex è un mediacenter cross-platform che permette di organizzare tutte le nostre librerie multimediali in un unico ambiente. Esiste sia in versione freeware che a pagamento, con sottoscrizione mensile, annuale e a vita. Si presenta in due vesti :

  • Server: che ha il compito di catalogare e trasmettere le nostre librerie multimediali
  • Player: solitamente app su mobile o smartTV, tramite le quali vengono riprodotti i contenuti in streaming

Uno dei motivi che mi ha spinto a scegliere la soluzione NUC + Proxmox in casa è stata quella di svincolare il server Plex dal mio vecchio Synology, non più in grado di effettuare transcodifiche "on the fly" dei formati video non supportati dai client. I NUX non sono solitamente molto potenti ma quelli con processori Intel dotati di Quick Sync Video riescono comunque a lavorare bene grazie all'accelerazione hardware. Va però sottolineato che questa funzione è disponibile solo per chi possiede un abbonamento Plex pass.

Nota: per scoprire se la vostra CPU è supportata basta ricercarla nella sezione ark del sito Intel o più semplicemente digitare su Google il codice del processore, ad esempio J3455.

Gli obiettivi di questa guida sono:

  1. Installare Plex in un container LXC su Proxmox;
  2. Abilitare gli aggiornamenti mediante il comando "apt-get upgrade";
  3. Abilitare il passthrough della GPU a cui sarà demandata la transcodifica dei contenuti multimediali non supportati.

I primi due punti vanno eseguiti nella shell del container, mentre l’ultimo dalla shell del nodo PVE

Creare un container LXC

Non descriverò nel dettaglio questa parte poiché molto semplice, soprattutto se avete già una installazione di Proxmox attiva, che è un prerequisito per procedere nel setup. Sul web è pieno di guide ma in realtà basteranno le impostazioni di base nella creazione di un container, che poi andrà impostato come privilegiato. Personalmente ho usato Ubuntu 16 come base ed ho assegnato 4GB di RAM e 4 Core. Infine suggerisco di impostare un indirizzo IP statico per evitare di riceverne uno sempre diverso dal modem/router. Una volta completata la creazione è consigliabile prima di tutto aggiornare lanciando i seguenti comandi:

apt-get update
apt-get upgrade -y

Bind Mount

Questa procedura è necessaria se i file multimediali da aggiungere nella libreria di Plex sono ospitati su hard disk di rete e non direttamente collegati al NUC. Nel mio caso si trovano sul NAS, sul quale si possono creare delle cartelle condivise. Per accedervi dal container di Plex dobbiamo installare CIFS con questo comando:

apt-get install cifs-utils

Nota: di norma l'accesso al container avviene tramite account root (ovvero con privilegi di amministratore) pertanto nei comandi lanciati da terminale non servirà il prefisso sudo.

Una volta installato il pacchetto dovremo creare una directory al cui interno verrà montato il volume condiviso del NAS. Io ad esempio ho creato nella cartella media due cartelle film e serietv. Per farlo basta usare mkdir:

mkdir /media/film 
mkdir /media/serietv

Nota: per evitare errori e confusione non utilizzate nomi con spazi, sia per le cartelle di destinazione del mount che per le condivisioni sul NAS.

Il passo successivo prevede la modifica del file fstab aggiungendo la configurazione delle condivisioni che saranno montante in automatico all'avvio. Di seguito vedete le stringhe standard per CIFS su cui dovrete modificare in ordine:

  • percorso completo della sorgente (quindi //IP_NAS/condivisione)
  • percorso locale di destinazione per il mount (ad esempio /media/film)
  • nome_utente e password (se richieste dalla condivisione della sorgente sul NAS)
//192.168.x.x/film /media/film cifs username=nome_utente,password=password_scelta,iocharset=utf8,sec=ntlmssp 0 0 
//192.168.x.x/serietv /media/serietv username=nome_utente,password=password_scelta,iocharset=utf8,sec=ntlmssp 0 0

Per maggiori dettagli sull'argomento potete approfondire nel Wiki di Ubuntu relativo al mount. Ricordo che sul NAS deve già essere presente un utente con le credenziali indicate su fstab che abbia accesso alle cartelle condivise.

Installare Plex

Come prima cosa basta andare sulla pagina di download della versione server di Plex, selezionare la piattaforma Linux, scegliere la versione (nel mio caso Ubuntu 64 bit per Intel/AMD) e copiare il link per il download. Nella shell del container si dovrà digitare il comando wget e poi incollare il link subito dopo uno spazio. Prendete le righe qui sotto solo come esempio ma generate voi il link di download perché il numero di versione cambierà con i futuri update. Proprio per questo motivo il successivo comando di installazione prevede l'uso del carattere jolly * nella parte che potrà variare.

wget https://downloads.plex.tv/plex-media-server-new/1.18.5.2309-f5213a238/debian/plexmediaserver_1.18.5.2309-f5213a238_amd64.deb
dpkg -i plexmediaserver*.deb

Avvio automatico

Per far avviare automaticamente Plex insieme al container basta abilitare il suo servizio con questi due comandi in successione:

systemctl enable plexmediaserver.service 
systemctl start plexmediaserver.service

Integrare l'aggiornamento automatico di Plex

Digitando il comando dpkg -L plexmediaserver otterremo a schermo una lista molto lunga di file, scorrendo in basso dovremmo vedere la seguente voce /etc/apt/sources.list.d/plexmediaserver.list. Questo è il file che va modificato per far sì che lanciando il comando apt-get upgrade vengano installate automaticamente le nuove versioni di Plex. Iniziamo dunque entrando in modifica sul file

nano /etc/apt/sources.list.d/plexmediaserver.list

Avremo a schermo le seguenti righe:

# When enabling this repo please remember to add the PlexPublic.Key into the apt setup. 
# wget -q https://downloads.plex.tv/plex-keys/PlexSign.key -O - | sudo apt-key add - 
# deb https://downloads.plex.tv/repo/deb/ public main

A questo punto è sufficiente togliere il commento # sull'ultima riga, salvare il file e lanciare i seguenti comandi:

apt-get install gnupg
wget -q https://downloads.plex.tv/plex-keys/PlexSign.key -O - | sudo apt-key add -

A questo punto possiamo lanciare il comando apt-get update e dovremmo vedere nella lista dei pacchetti aggiornabili anche Plex.

Abilitare il Passthrough della GPU

La prima parte di questo passaggio va eseguito nella Shell del nodo PVE di Proxmox. Lanciare i seguenti comandi:

apt-get update 
apt-get install i965-va-driver

Per controllare se i drivers siano stati installati correttamente e che funzionino basta installare il pacchetto vainfo con il comando apt-get install vainfo e successivamente digitare semplicemente vainfo ottenendo un output di questo tipo:

error: can't connect to X server!
libva info: VA-API version 1.4.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_1_4
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.4 (libva 2.4.0)
vainfo: Driver version: Intel i965 driver for Intel(R) Coffee Lake - 2.3.0
vainfo: Supported profile and entrypoints
VAProfileMPEG2Simple : VAEntrypointVLD
VAProfileMPEG2Simple : VAEntrypointEncSlice
VAProfileMPEG2Main : VAEntrypointVLD
VAProfileMPEG2Main : VAEntrypointEncSlice
VAProfileH264ConstrainedBaseline: VAEntrypointVLD
VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
VAProfileH264ConstrainedBaseline: VAEntrypointEncSliceLP
VAProfileH264Main : VAEntrypointVLD
VAProfileH264Main : VAEntrypointEncSlice
VAProfileH264Main : VAEntrypointEncSliceLP
VAProfileH264High : VAEntrypointVLD
VAProfileH264High : VAEntrypointEncSlice
VAProfileH264High : VAEntrypointEncSliceLP
VAProfileH264MultiviewHigh : VAEntrypointVLD
VAProfileH264StereoHigh : VAEntrypointVLD
VAProfileVC1Simple : VAEntrypointVLD
VAProfileVC1Main : VAEntrypointVLD
VAProfileVC1Advanced : VAEntrypointVLD
VAProfileNone : VAEntrypointVideoProc
VAProfileJPEGBaseline : VAEntrypointVLD
VAProfileJPEGBaseline : VAEntrypointEncPicture
VAProfileVP8Version0_3 : VAEntrypointVLD
VAProfileHEVCMain : VAEntrypointVLD
VAProfileHEVCMain10 : VAEntrypointVLD
VAProfileVP9Profile0 : VAEntrypointVLD
VAProfileVP9Profile2 : VAEntrypointVLD

Ora possiamo passare alla configurazione del passthrough della GPU al container Plex. Per prima cosa bisogna identificare i parametri della scheda video digitando:

ls -l /dev/dri

Ottenendo come output qualcosa del genere:

total 0
drwxr-xr-x 2 root root 80 Feb 4 20:35 by-path
crw-rw---- 1 root video 226, 0 Feb 4 20:35 card0
crw-rw---- 1 root render 226, 128 Feb 4 20:35 renderD128

Annotate i numeri associati alla scheda video:

  • La card0 ha come ID 226, 0
  • Il renderD128 ha come ID 226, 128

Per abilitare il passthrough bisogna editare il file xxx.conf, dove xxx rappresenta il container in cui abbiamo installato Plex. Per editare il file usiamo ancora nano, quindi:

nano /etc/pve/lxc/100.conf

e aggiungiamo le seguenti righe:

lxc.cgroup.devices.allow = c 226:0 rwm
lxc.cgroup.devices.allow = c 226:128 rwm
lxc.cgroup.devices.allow = c 29:0 rwm
lxc.autodev: 1
lxc.hook.autodev:/var/lib/lxc/100/mount_hook.sh

Da notare che l'ultima linea richiama un script che andremo a creare ora con l'editor. Nel comando seguente sostituite xxx con il numero del container LXC di Plex su Proxmox:

nano /var/lib/lxc/xxx/mount_hook.sh

All'interno incollate queste righe:

mkdir -p ${LXC_ROOTFS_MOUNT}/dev/dri
mknod -m 666 ${LXC_ROOTFS_MOUNT}/dev/dri/card0 c 226 0
mknod -m 666 ${LXC_ROOTFS_MOUNT}/dev/dri/renderD128 c 226 128
mknod -m 666 ${LXC_ROOTFS_MOUNT}/dev/fb0 c 29 0

Una volta salvato il file e ritornati nella shell, bisogna rendere il file eseguibile con:

chmod 755 /var/lib/lxc/xxx/mount_hook.sh

A questo punto, per verificare che sia tutto funzionante basta avviare la riproduzione di un video da un dispositivo forzando la codifica. Nella bacheca di Plex dovremmo vedere la scritta Transcodifica (hw).

Autore:
Matteo (@tamet)

Revisore:
Davide (@daxda)

SmartHome Channel

Special Team - I SaggiUtenti del canale #SmartHome sul nostro Slack uniti per creare guide e recensioni dedicate all'automazione. Partecipa anche tu entrando nel gruppo effettuando una donazione dal SaggioSupporto o discutendo con noi nel Canale Telegram SmartHome Italia