Openmediavault – Plex : Dépannage

Hier, j’ai voulu ajouter un nouveau dossier à mon instance docker Plex sur mon serveur Openmediavault . Pour ce faire, il fallait modifier le container docker puisque les dossiers (‘Volumes’ dans la terminologie docker) sont définis à ce moment là.

Mauvaise idée, parce je n’ai jamais pu faire refonctionner l’instance de Plex modifiée ; non seulement l’interface web m’indiquait ce message peu rassurant : « Un problème a été détecté dans un composant au cœur du serveur multimédia Plex« , mais le process ‘Plex Media Server’ prenait 100% de CPU. J’ai fini par arrêter le container.

J’en suis resté là, il était déjà tard, et ce matin, je me suis attaqué au problème, bien décidé à le résoudre… Ça n’a pas été évident, mais j’ai appris quelques trucs que je vais noter et partager ici, comme comment supprimer complètement Plex Media Server, où aller voir les logs, et finalement comment j’ai fini par obtenir la solution.

Au passage, j’ai même installé Emby, un autre media server, car je pensais que je n’allais pas m’en sortir. Voyons tout cela…

Les logs

Je commence par aller voir les logs de docker, histoire de vérifier que le container a bien démarré :

sudo docker logs -f plex

Mais ils ne donnent que peu d’info dans ce cas là. Dommage, car finalement, comme vous le verrez, il s’agissait d’un problème de dépendance de docker sur une librairie comportant un « bug »… 🙁

Il faut donc aller voir ceux de Plex : ils se trouvent dans le répertoire déclaré pour la configuration lors de la création du container (volume ‘/config’). Voilà ce que ça donnait chez moi pour le log principal :

pascal@odroidhc2:~$ grep ERROR /srv/dev-disk-by-label-DATA/AppData/Plex/Library/Application\ Support/Plex\ Media\ Server/Logs/Plex\ Media\ Server.log
Jan 01, 1970 00:01:28.000 [0xb29ff430] ERROR - Error issuing curl_easy_perform(handle): 28
Jan 01, 1970 00:01:28.000 [0xb29ff430] ERROR - Error parsing content.
Jan 01, 1970 00:01:28.000 [0xb29ff430] ERROR - Error parsing XML: Error parsing file.
Jan 01, 1970 00:01:28.000 [0xb05fc430] ERROR - [Time] Failed to convert '1970-01-01 00:00:01' to epoch.
Jan 01, 1970 00:01:28.000 [0xb05fc430] ERROR - [Time] Failed to convert '1970-01-01 00:00:01' to epoch.
Jan 01, 1970 00:01:28.000 [0xb05fc430] ERROR - Error issuing curl_easy_perform(handle): 28
Jan 01, 1970 00:01:28.000 [0xb05fc430] ERROR - Error parsing content.
Jan 01, 1970 00:01:28.000 [0xb05fc430] ERROR - Exception caught while updating system agent list: Error parsing file
Jan 01, 1970 00:01:28.000 [0xacffe430] ERROR - Error issuing curl_easy_perform(handle): 28
Jan 01, 1970 00:01:28.000 [0xa85fe430] ERROR - [Time] Failed to convert '1970-01-01 00:00:01' to epoch.
Jan 01, 1970 00:01:28.000 [0xacffe430] ERROR - Error issuing curl_easy_perform(handle): 28

On voit que manifestement ça boucle… Après quelques recherches sur le net, le message « Error issuing curl_easy_perform » est connu et sans impact. L’autre message qui aurait du attirer mon attention est celui à propos de l’échec de conversion de la date du 01/01/1970 : ça pue le bug système, genre celui de l’an 2000 !!

Nettoyer Plex

Mais je me suis obstiné à réinstaller Plex encore et encore, en essayant de nettoyer complètement le système auparavant, persuadé que le problème venait de Plex. Il faut bien sûr supprimer le container via l’interface de Portainer, mais ce n’est pas suffisant.

Il faut aussi aller supprimer le dossier/volume de configuration cité précédemment, notamment si l’on veut effacer la base de donnée utilisée par Plex. Ce n’est pas fait par défaut pour simplifier la création d’un nouveau container, et ne pas avoir à réindexer tous vos fichiers media ! À faire vraiment quand on veut repartir de zéro donc…

pascal@odroidhc2:~$ sudo find /srv/dev-disk-by-label-DATA/AppData/Plex -name "*.db"
/srv/dev-disk-by-label-DATA/AppData/Plex/Library/Application Support/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.blobs.db
/srv/dev-disk-by-label-DATA/AppData/Plex/Library/Application Support/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.db
pascal@odroidhc2:~$ sudo rm -rf /srv/dev-disk-by-label-DATA/AppData/Plex/Library

À force de faire du ménage à la main dans le système, je me suis retrouvé dans l’impossibilité de démarrer un container Plex que je venais de créé ! 🙁 J’avais le message suivant : unable to exec /usr/lib/plexmediaserver

Là, je ne sais plus trop comment je m’en suis sorti : via Portainer, j’ai vérifié que plus rien de Plex n’apparaissait (y compris dans les images), puis je suis allé dans l’interface d’OMV – Gestionnaire de mises à jour, mis le système à jour, puis dans OMV-Extras – Mises à jour j’ai lancé un « apt clean ». Et puis j’ai redémarré, et créé un nouveau container qui cette fois a pu démarrer, mais toujours avec le même problème.

Emby

À ce stade, je me suis dit qu’il était temps de chercher une alternative à Plex. J’ai vite trouvé Emby, avec un container disponible pour OMV. Restait à voir s’il y avait un client pour ma TV Samsung de 2015. C’était bien le cas, même s’il a fallu l’installer manuellement (non disponible par défaut dans le catalogue de Samsung).

Il faut aller sur cette page, récupérer le fichier tizen.zip, l’extraire sur une clef USB, puis allumer la TV avec la clef connectée : l’installation se fait automatiquement.

L’installation du container sur OMV est classique, j’ai suivi cette video de TDL, mais je commence à bien connaître la création de container, et on peut se débrouiller tout seul en allant sur hub.docker.com, en cherchant Emby, et en suivant les indications (env, volumes, etc…) pour créer le container. C’est assez classique, avec principalement la définition des « share » pour les différentes bibliothèques de media que l’on veut renseigner.

Attention toutefois à l’architecture : elle ne sera pas détectée automatiquement, et il faut bien spécifier celle de votre machine… Dans mon cas, j’ai une architecture 32 bits (armv7l est un processeur 32 bits, et ARMv8 est 64 bits) et l’OS est un Debian Buster :

pascal@odroidhc2:~$ sudo uname -m
armv7l
pascal@odroidhc2:~$ sudo lsb_release -d
Description:	Debian GNU/Linux 10 (buster)

Je dois donc renseigner comme ceci l’image lors de la création du container :

Pour connecter la TV au serveur, il faudra (comme pour Plex), se créer un compte sur le site d’Emby, et rentrer le PIN code affiché sur la TV.

J’ai testé vite fait, ça « fait le taf », mais c’est moins évolué que Plex, on est plus proche d’un serveur DLNA de base : la recherche d’affiches pour les séries par exemple n’a pas fonctionné quand Plex fonctionne à merveille de ce côté. Je le garde toutefois comme serveur de rechange (container arrêté), au cas où.

Je me suis ensuite remis à la recherche d’une solution pour Plex…

La solution

Je me suis alors dit qu’il fallait que je trouve un moyen d’installer une version plus ancienne du container Plex (j’avais installé la version précédente qui fonctionnait vers mi-Novembre). Je suis donc allé sur le site dockerhub, sur la page de linuxserver/plex. Deux nouvelles versions étaient sorties depuis mi-novembre.

Ne trouvant rien sur une façon de lancer une version précédente, je suis alors allé sur le forum Dicord (qui m’avait déjà bien aidé pour l’installation de Nextcloud et mes problèmes de NAT hairpinning), et j’ai décrit mon problème, terminant en disant « J’ai l’impression qu’il y a un problème avec cette version… ». J’ai très vite eu une réponse me renvoyant sur cette FAQ et confirmant le bug :

Comme l’explique la FAQ, il y a un problème avec une dépendance de docker, un bug dans une librairie… qui semble se produire sur les systèmes 32 bits de Debian Buster. Bingo, ça correspond bien à mon OS ! 😎

La façon la plus pérenne de résoudre le problème est alors de déclarer le dépot « backport » pour Debian/Buster. C’est d’ailleurs exactement à cela que servent les dépots « backport » : on y trouve des versions corrigées de certaines mises à jour, quand un problème a été identifié.

Voilà donc les instructions à passer, où l’on déclare le backport (avec les clefs de sécurité), puis on met le système à jour, et enfin on demande l’installation de la librairie fautive, à savoir libseccomp2 :

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 04EE7237B7D453EC 648ACFD622F3D138
 echo "deb http://deb.debian.org/debian buster-backports main" | sudo tee -a /etc/apt/sources.list.d/buster-backports.list
 sudo apt update
 sudo apt install -t buster-backports libseccomp2

Et voilà, le tour est joué, je n’ai plus qu’à réinstaller mon container Plex et tout va se passer comme un charme ! 😀

Conclusion

J’ai commis l’erreur de me focaliser sur Plex, persuadé que l’erreur venait de là. Alors qu’il s’agissait d’un problème avec le container docker, et dès que j’ai cherché dans cette direction, la solution est venue rapidement.

La communauté LinuxServer.io sur Discord est vraiment d’une grande aide. Le lien Discord sur la page de linuxserver/plex est un lien d’invitation pour rejoindre le groupe :

On peut y accéder via le navigateur, ou installer ensuite une application dédiée. Discord permet de créer des salons entre groupes, et d’y faire du chat, de l’audio ou encore de la vidéo, partager son écran, etc…

Discord vient du monde des jeux, est privatif, et gratuit pour ses fonctionnalités de base. Il a été utilisé en France par des établissements universitaires et scolaires lors de la crise du Covid, pour pallier les difficultés techniques des espaces officiels…

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *