Plus de mise à jour des apps après une migration vers Nextcloud 30

Je viens enfin d'effectuer la mise à jour de mon Nextcloud 27 vers Nextcloud 30 (avec un passage éclair par les versions 28 et 29 bien sûr). J'étais resté coincé sur Nextcloud 27 à cause de l'application Nextcloud News qui n'était pas compatible avec les versions supérieures. Son UI était en effet complètement pétée à partir de Nextcloud 28 et les devs en ont profité pour la réécrire complètement... ce qui leur a pris un peu de temps. 😅️

Mais voilà, News v25.0.0 a fini par sortir mi-novembre et il a fallu attendre que j'ai le temps de m'occuper de la migration de mon instance Nextcloud, car monter de 3 versions d'un coup, ça fait beaucoup. 🙃️

Durant ces migrations j'ai rencontré quelques difficultés, notamment à cause de l'application Keeweb qui faisait planter la migration... J'ai donc dû rollback, désinstaller complètement l'app et recommencer (rien de bien grave hein, je snapshot toujours le container avant de faire des mises à jour justement pour le cas où je devrais revenir en arrière 😁️).

J'ai aussi eu quelques autres petits détails à régler durant le passage des versions comme de nouveaux paramètres à définir dans le fichier config.php, quelques commandes à taper pour mettre à jour les mimetypes et pour ajouter des indexes dans la base de données... mais tout ça c'est plutôt attendu, la routine quoi...

Le problème

J'ai donc réussi à atteindre la version 30 de Nextcloud sans trop d'encombres... Sauf qu'une fois sur cette version, il m'a été impossible de mettre à jour Nextcloud News... L'appstore affichait toujours Nextcloud News v24 comme étant la dernière version de l'application et ne voyait pas les nouvelles versions. J'ai essayé plein de trucs pour forcer la mise à jour mais rien de bien probant.

En creusant un peu, j'ai trouvé le fichier <dossier_data_de_nextcloud>/appdata_xxxxxxxxxxxx/appstore/apps.json, qui effectivement n'avait aucune référence aux nouvelles versions de l'application News... 🤔️

Pourtant si on va taper directement sur l'API de la boutique d'application de Nextcloud, les mises à jour sont bien listées :

Capture d'écran du "apps.json" retourné par l'API de l'appstore de Nextcloud

Capture d'écran du "apps.json" retourné par l'API de l'appstore de Nextcloud

Visiblement quelque chose a empêché la mise à jour du fichier local et du coup je reste coincé avec mes vieilles apps... Zut ! 😔️

La solution

Après pas mal de recherches, j'ai fini par tomber sur ce rapport de bug sur GitHub qui m'a fourni une solution. Bon il faut aller bricoler dans la DB mais je suis pas à ça près... 😅️

Voici donc les étapes à suivre pour débloquer la situation.

Premièrement, on fait une sauvegarde au cas où. Ensuite, ON FAIT LA SAUVEGARDE POUR DE VRAI BORDAYL DE ZUT 😠️ ! Allé j'attends ! J'insiste un peu lourdement là-dessus car si les choses tournent mal il faut être en mesure de revenir en arrière. Pour ma part j'ai fait un snapshot du container car c'est plus facile, mais un dump SQL de la base de données fera aussi l'affaire.

Ensuite on se connecte à MariaDB. Sous Debian / Ubuntu, ça se fait tout simplement avec la commande suivante depuis l'utilisateur root :

$ mysql

Ensuite on peut se connecter à la base de données de Nextcloud qui dans mon cas s'appelle tout bêtement "nextcloud" (ouais, aucune originalité 😛️) :

MariaDB [(none)]> connect nextcloud;

Ensuite on vérifie que l'entrée concernant l'appstore est bien présente dans la table "oc_filecache" :

MariaDB [nextcloud]> SELECT * FROM oc_filecache WHERE name = 'appstore';

ce qui devrait nous retourner quelque chose comme ça :

+--------+---------+-------------------------------+----------------------------------+--------+----------+----------+----------+------+------------+---------------+-----------+------------------+---------------+-------------+----------+
| fileid | storage | path                          | path_hash                        | parent | name     | mimetype | mimepart | size | mtime      | storage_mtime | encrypted | unencrypted_size | etag          | permissions | checksum |
+--------+---------+-------------------------------+----------------------------------+--------+----------+----------+----------+------+------------+---------------+-----------+------------------+---------------+-------------+----------+
|      3 |       1 | appdata_xxxxxxxxxxxx/appstore | bfd1cb805760becacd4eef29a10806d4 |      2 | appstore |        2 |        1 |    0 | 1735378073 |    1735378073 |         0 |                0 | 6238da6a05810 |          31 |          |
+--------+---------+-------------------------------+----------------------------------+--------+----------+----------+----------+------+------------+---------------+-----------+------------------+---------------+-------------+----------+

On va maintenant supprimer cette ligne à l'aide de la requête suivante :

MariaDB [nextcloud]> DELETE FROM oc_filecache WHERE name = 'appstore';

Il ne reste plus qu'à recharger la page de l'appstore de Nextcloud, ce qui aura pour effet de mettre à jour le fichier "apps.json" et de recréer l'entrée qu'on vient de supprimer dans la base de données.

Et là miracle, la mise à jour de l'application News m'est enfin proposée ! 😁️

Capture d'écran de l'appstore de Nextcloud avec la mise à jour de l'application News proposée

Capture d'écran de l'appstore de Nextcloud avec la mise à jour de l'application News proposée

Et voilà !

Et voilà, problème réglé ! J'espère que je n'aurais plus à rester coincé sur une version de Nextcloud à l'avenir, c'est plus simple de faire les migrations au fur et à mesure ! 😋️

Comme vous avez pu le constater j'ai été assez peu présent ces derniers temps : j'ai été pas mal occupé par le développement de FLOZz Daily Mix, mon générateur de playlist dont je vous avais déjà parlé début octobre. Et j'ai également pas mal bossé sur un gros article en deux parties qui sortira en janvier... Et puis j'ai aussi pris un peu de temps off pour me reposer, on ne va pas recommencer comme en 2022 ! 🙃️

Je vous donne rendez-vous le 6 janvier pour le prochain article et je vous souhaite de bonnes fêtes de fin d'année ! 😁️