OMV : Mise à jour des containers Nextcloud et Plex

Voilà un moment que je cherchais comment mettre à jour proprement mon instance Docker de Nextcloud. En fait l’info était bien disponible, bien que peu détaillée, sur la page du container, mais je me mélangeais un peu les pinceaux entre l’image, le container, et l’application elle-même.

Voilà ce qui est indiqué dans la documentation fournie par Linuxserver.io, ce n’est pas hyper clair, et la section « Updating Info » pour chaque container n’est vraiment ni détaillée ni très explicite :

La plupart de nos images sont statiques, versionnées, et nécessitent une mise à jour de l’image et une recréation du conteneur pour mettre à jour l’application qu’elles contiennent. À quelques exceptions près (par exemple, nextcloud, plex), nous ne recommandons ni ne prenons en charge la mise à jour des applications à l’intérieur du conteneur.

Sur les forums Docker, on déconseille également l’utilisation de Portainer, l’interface fournie par défaut dans OpenMediaVault pour gérer ses images et containers Docker. En particulier pour des problèmes de gestion de version des applications justement.

Donc pour la création d’un nouveau container, rien ne vaut une bonne vieille commande docker run, et tant qu’à faire autant la mettre dans un script pour pouvoir la réutiliser facilement. Pour Plex, cela suffira à utiliser la dernière version de l’application au sein de se nouveau container. Pour Nextcloud, on procédera de la même manière pour récupérer les images, on utilisera Portainer pour créer la stack, puis il faudra mettre à jour l’application elle-même à l’intérieur du container, étape supplémentaire et nécessaire. Dans les deux cas, on ne perd rien de sa configuration ou de ses fichiers, et tout est relancé en quelques minutes.

Enfin, je parlerai vite fait de la mise à jour d’OMV lui-même à la fin de l’article.

Allons-y…

Plex

Commençons par le plus simple… J’ai commencé par vouloir faire la mise à jour à partir de Portainer : mais j’avais beau recréer une nouvelle image puis un nouveau container, ce n’était jamais la bonne version de binaire qui était exécutée quand je vérifais les logs.

Après plusieurs essais infructueux, j’ai fini par poser des questions sur un forum Discourse consacré à Docker. On m’a alors fortement déconseillé l’utilisation de Portainer typiquement pour les problèmes que j’avais observés. On me recommandait d’utiliser les commandes docker, directement, afin d’éviter tout problème.

J’ai donc fini par faire un script pour recréer un nouveau container (plex2023) comme si c’était la première création, tout en gardant les mêmes emplacements pour mes dossiers médias bien entendu. Ça donne ceci dans mon cas :

docker run -d --name=plex2023 --net=host -e PUID=997 -e PGID=100 -e VERSION=docker -v /srv/dev-disk-by-label-DATA/AppData/Plex:/config -v /srv/dev-disk-by-label-DATA/OMV-DATA/Series:/Series -v /srv/dev-disk-by-label-DATA/OMV-DATA/Films:/Films -v /srv/dev-disk-by-label-DATA/OMV-DATA/Docus:/Docus lscr.io/linuxserver/plex:latest

Voilà, c’est tout simple. Il suffit d’arrêter l’ancien container Plex et de lancer celui-ci, et c’est la dernière version de Plex qui tourne. Une fois que l’on a vérifié que tout fonctionne correctement, il ne reste plus qu’à effacer l’ancien container.

Nextcloud

Mise à jour majeure

Pour passer d’une version majeure à une autre, ou cas de problème lors d’une mise à jour via l’interface comme ci-dessus, il peut être aussi simple de recréer de nouveaux containers à partir de nouvelles images.

On commence par arrêter les 3 containers (nextcloud-mariadb-swag), puis télécharger les dernières versions des images Docker. Là aussi, autant passer passer par le mode commande de Docker, c’est aussi simple et plus clair :

$ sudo docker image pull linuxserver/nextcloud:latest
$ sudo docker image pull linuxserver/mariadb:latest
$ sudo docker image pull linuxserver/swag:latest

Les nouvelles images vont apparaître dans Portainer, ce sont celles-ci qui seront utilisées pour créer les containers. Pour cela, je vais utiliser Portainer et les « stacks » qui sont bien pratiques pour tout créer en une seule fois. J’ai juste changé le nom des containers pour me repérer (en ajoutant « 2023 » à la fin), et gardé les mêmes chemins des volumes (config, data…). Pour les détails de la config, voir le premier article sur la création du container Nextcloud.

---
version: "2.1"
services:
  nextcloud:
    image: linuxserver/nextcloud
    container_name: nextcloud2023
    environment:
      - PUID=997
      - PGID=100
      - TZ=Europe/Paris
    volumes:
      - /srv/dev-disk-by-label-DATA/AppData/Nextcloud/config:/config
      - /srv/dev-disk-by-label-DATA/AppData/Nextcloud/data:/data
    ports:
      - 443:443
    depends_on:
      - mariadb
    restart: unless-stopped
  mariadb:
    image: linuxserver/mariadb
    container_name: nextclouddb2023
    environment:
      - PUID=997
      - PGID=100
      - MYSQL_ROOT_PASSWORD=keepsecret
      - TZ=Europe/Paris
    volumes:
      - /srv/dev-disk-by-label-DATA/AppData/Nextclouddb:/config
    ports:
      - 3306:3306
    restart: unless-stopped
  swag:
    image: linuxserver/swag
    container_name: swag2023
    cap_add:
      - NET_ADMIN
    environment:
      - PUID=997
      - PGID=100
      - TZ=Europe/Paris
      - URL=xxx.pled.fr
      - SUBDOMAINS=nextcloud
      - VALIDATION=http
      - EMAIL=yyy@zzz
    volumes:
      - /srv/dev-disk-by-label-DATA/AppData/swag:/config
    ports:
      - 444:443
      - 81:80
    restart: unless-stopped

Penser tout de même à vérifier sur les pages de linuxserver (ici pour nextcloud) pour chaque container si les paramètres à utiliser n’ont pas changé.

Une fois les containers créés, il n’y a plus qu’à les lancer. Mais en procédant ainsi, Nextcloud n’est pas mis à jour, je suis toujours en version 23 (comme pour Plex plus haut donc). Pourtant quand je regarde mon image Docker, c’est bien la v25 (qui est censée fournir Nextcloud 25) :

$ sudo docker inspect -f '{{ index .Config.Labels "build_version" }}' nextcloud2023 
[sudo] password for pascal:
Linuxserver.io version:- 25.0.2-ls216 Build-date:- 2023-01-08T09:28:17-06:00

Ce n’est donc pas suffisant, même si c’est toujours utile de mettre à jour le container. J’ai fini par tomber sur cette page, qui donne la bonne solution (et même 2 manières de procéder, j’ai choisi la seconde puisqu’il est mentionné que c’est la meilleure). Et tout a parfaitement fonctionné.

Je lance donc la première commande une fois connecté en ssh à mon NAS OMV : à noter que c’est bien l’utilisateur abc qu’il faut utiliser ! J’ai d’abord cru à un exemple et remplacé par admin ou mon nom d’utilisateur nextcloud, mais non, il faut garder la commande telle quelle.

Répondre « yes » pour l’update, puis « no » pour l’upgrade d’occ. Garder le mode maintenance actif si c’est demandé.

$ sudo docker exec -it nextcloud2023 sudo -u abc php /config/www/nextcloud/occ upgrade
Nextcloud or one of the apps require upgrade - only a limited number of commands are available
You may use your browser or the occ upgrade command to do the upgrade
Setting log level to debug
            
Updating database schema
Updated database
Updating  ...
Updated  to 1.12.0
Updating  ...
Updated  to 1.12.0
Updating  ...
Updated  to 1.14.0
Updating  ...
Updated  to 1.19.0
Updating  ...
Updated  to 2.16.0
Updating  ...
Updated  to 1.7.0
Updating  ...
Fix broken values of calendar objects
 Done
    0/0 [->--------------------------]   0%
Clean up old calendar subscriptions from deleted users that were not cleaned-up
 Done
    0/0 [----->----------------------]   0%
Updated  to 1.22.0
Updating  ...
Updated  to 1.16.2
Updating  ...
Updated  to 1.14.0
Updating  ...
Updated  to 1.17.0
Updating  ...
Updated  to 2.6.0
Updating  ...
Updated  to 1.14.0
Updating  ...
Updated  to 2.13.0
Updating  ...
Updated  to 1.13.0
Updating  ...
Updated  to 2.12.1
Updating  ...
Updated  to 1.15.0
Updating  ...
Migrate old user config
 Done
    1/1 [============================] 100%
Updated  to 1.10.0
Updating  ...
Updated  to 7.4.0
Updating  ...
Updated  to 1.14.0
Updating  ...
Updated  to 2.5.0
Updating  ...
Updated  to 1.3.0
Updating  ...
Updated  to 2.9.0
Updating  ...
Updated  to 1.6.0
Updating  ...
Updated  to 1.8.0
Updating  ...
Updated  to 1.14.0
Updating  ...
Updated  to 1.3.0
Updating  ...
Updated  to 1.14.0
Updating  ...
Updated  to 1.6.0
Updating  ...
Updated  to 1.7.0
Updating  ...
Updated  to 1.12.0
Updating  ...
Updated  to 3.5.1
Updating  ...
Updated  to 1.13.0
Updating  ...
Updated  to 1.14.0
Updating  ...
Updated  to 1.4.0
Updating  ...
Updated  to 1.8.0
Starting code integrity check...
Finished code integrity check
Update successful
Maintenance mode is kept active
Resetting log level

Tout cela prend un peu de temps, mais la commande s’exécute sans erreur. Puis on lance la deuxième commande pour mettre à jour occ (le nom vient à l’origine de owncloud console) :

$ docker exec -it nextcloud sudo -u abc php /config/www/nextcloud/occ upgrade

Enfin, on désactive le mode maintenance :

$ sudo docker exec -it nextcloud2023 sudo -u abc php /config/www/nextcloud/occ maintenance:mode --off

Et voilà : j’ai enfin mis à jour mon container Nextcloud ! Il ne reste plus qu’à aller sur la page web pour vérifer tout ça.

Je suis passé à la version 25 de Nextcloud ! 😎

Mise à jour mineure

Plus tard, pour une mise à jour mineure, j’ai utilisé l’interface de Nextcloud, il s’agissait de passer de la v25.0.2 à la v25.0.12. Et tout s’est passé sans souci. Il y a deux étapes, il faut patienter un peu, mais globalement c’est parfait .

Reste à tester cette méthode avec une mise à jour majeure ? il faudra prendre ses précautions auparavant (sauvegardes), mais pourquoi pas ? en théorie, cela doit fonctionner. Pour passer d’une v25 à une v26 par exemple…

OMV

Pour OMV, la première chose à faire est d’aller dans le Gestionnaire de mises à jour et de les appliquer. Il y a peut-être un paquet openmediavault de proposé parmi toutes les mises à jour disponibles. En fait c’est l’équivalent d’un sudo apt update ; sudo apt upgrade en ligne de commande.

Je l’ai fait récemment, et je suis passé en 5.6.26-1 :

$ sudo apt policy openmediavault
[sudo] password for pascal: 
openmediavault:
  Installed: 5.6.26-1
  Candidate: 5.6.26-1
  Version table:
 *** 5.6.26-1 500
        500 http://packages.openmediavault.org/public usul/main armhf Packages
        500 https://openmediavault.github.io/packages usul/main armhf Packages
        100 /var/lib/dpkg/status

Il y a aussi la commande omv-upgrade, qui fait exactement la même chose, comme l’indique la documentation.

En l’état, je suis donc en OMV v5 avec un système avec les toutes dernières mises à jour de cette version. Comment faire pour passer en OMV v6 ? Ce sera la commande omv-release-upgrade, et la documentation indique ceci :

omv-release-upgrade
Il s’agit d’un script qui n’est inclus que dans les dernières versions d’openmediavault avant de passer à la version majeure suivante, par exemple de 5.6.x à 6.x. Cette commande migre le système vers la version majeure suivante d’openmediavault (qui inclut généralement une mise à jour de la distribution Debian).

Personnellement, je ne l’ai pas encore fait, puisque tout fonctionne comme je le souhaite avec la v5. Je verrai cela plus tard. D’autant que OMV 6 est basé sur Bebian 11 (Bullseye), le script effectuera en même temps la mise à jour du système puisque je suis en Debian 10 Buster :

Debian Buster sur processeur arm 32 bits

Ce n’est donc pas une « minor update », mais bien une « major upgrade » ! Il faut donc préparer sérieusement ce genre de mise à jour avant de se lancer ! On trouve des conseils sur cette page du forum OMV. Les pré-requis sont indiqués ici.

Conclusion

Je suis plutôt content, car ça faisait un bout de temps que je voulais mettre à jour mon Nextcloud sans trouver la bonne méthode. Avec celle décrite ici, c’est nickel.

J’ai pu aussi voir les limites de Portainer, car j’ai passé du temps et fait pas mal d’essais infructueux pour essayer d’upgrader Plex. Finalement le mode commande de Docker est très puissant, assez simple à utiliser, la documentation bien faite, alors autant l’utiliser parce qu’au on est sûr de ce que l’on fait… et ça marche !

Une réflexion sur « OMV : Mise à jour des containers Nextcloud et Plex »

  1. Salut,

    Merci pour ton topic.
    En attendant entre tes deux super billets pour ton install plex sur odroid O2 et celui-ci tu as franchi un step…
    C’est à dire que le néophyte pouvait suivre le premier tuto, celui ci est désormais trop compliqué pour moi.
    Je vais refaire une install

    Merci en tout cas 😉

Laisser un commentaire

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