Il m'est arrivé des mésaventures avec les mises à jour de logiciel sur yunohost, et souvent les problèmes se résolvent par une restauration de l'application, et de prévenir en déclarant une issue sur le github yunohost dédié à l'applicatif, pour ensuite patienter le temps que le problème soit résolu et de retenter une mise à jour.
Par contre, la mise à jour de peertube, grosse appli, m'a plusieurs fois pété à la tronche, et j'ai donc déployé un tas de précautions que je m'en vais décrire ici, vu qu'une fois de plus j'ai passé 2h à réparer mon instance peertube, l'occasion de parfaire ma procédure.
Précautions avant mise à jour:
- Avant la mise à jour, il faut déplacer les données vidéo, sinon elles sont prise dans le backpup Yunohost et ça met des plombes, en plus de prendre un espace disque monstre (80 Gio pour moi en ce moment).
Alors je sais qu'il est possible de demander une sauvegarde via la commande spéciale suivante, mais ça n'a jamais fonctionné pour peertube (et je n'ai pas retenté depuis un bail) :
sudo BACKUP_CORE_ONLY=1 yunohost backup create --apps peertube
Et quand bien même, le processus de mise à jour fera quand même le backup complet (j'ignore s'il existe une commande pour le modifier).
Donc je fais comme ceci :
sudo du -sh /home/yunohost.app/peertube/storage/ sudo mv /home/yunohost.app/peertube/storage/videos/ /home/tmp/ sudo mv /home/yunohost.app/peertube/storage/streaming-playlists /home/tmp/ sudo mv /home/yunohost.app/peertube/storage/logs/ /home/tmp/ sudo mv /home/yunohost.app/peertube/storage/thumbnails/ /home/tmp/ sudo mv /home/yunohost.app/peertube/storage/avatars/ /home/tmp/ sudo du -sh /home/yunohost.app/peertube/storage/
- Ensuite on va sauvegarder la base de donnée, plutôt 3 fois qu'une !
via PG_dump au format texte : (si vous ne connaissez-pas le mot de passe, lire ceci.)
sudo pg_dump --file /home/tmp/peertubeBasePostgreSQL_$(date '+%Y-%m-%d').txt -d peertube_peertube -U peertube
via PG_dump au format tar :
sudo pg_dump --format=tar --file /home/tmp/peertubeBasePostgreSQL_$(date '+%Y-%m-%d').tar peertube_peertube -U peertube
Manuellement, méthode pelleteuse :
sudo service postgresql stop sudo cp -a /var/lib/postgresql/ /home/tmp/postgresql.bak sudo service postgresql start
La mise à jour:
- Lancer la mise à jour par la commande
sudo yunohost app upgrade peertube
Je ne le fais plus par l'interface web, l'opération est trop lourde et inbuvable…
Après la mise à jour:
- Il faut donc remettre les données vidéos :
sudo mv /home/tmp/videos /home/yunohost.app/peertube/storage/ sudo mv /home/tmp/streaming-playlists/hls/* /home/yunohost.app/peertube/storage/streaming-playlists/hls sudo rmdir /home/tmp/streaming-playlists/hls/ sudo rmdir /home/tmp/streaming-playlists/
- Et les vignettes :
sudo mv /home/tmp/logs/* /home/yunohost.app/peertube/storage/logs sudo rmdir /home/tmp/logs/ sudo mv /home/tmp/thumbnails/0* /home/yunohost.app/peertube/storage/thumbnails sudo mv /home/tmp/thumbnails/1* /home/yunohost.app/peertube/storage/thumbnails sudo mv /home/tmp/thumbnails/2* /home/yunohost.app/peertube/storage/thumbnails sudo mv /home/tmp/thumbnails/3* /home/yunohost.app/peertube/storage/thumbnails sudo mv /home/tmp/thumbnails/4* /home/yunohost.app/peertube/storage/thumbnails sudo mv /home/tmp/thumbnails/5* /home/yunohost.app/peertube/storage/thumbnails sudo mv /home/tmp/thumbnails/6* /home/yunohost.app/peertube/storage/thumbnails sudo mv /home/tmp/thumbnails/7* /home/yunohost.app/peertube/storage/thumbnails sudo mv /home/tmp/thumbnails/8* /home/yunohost.app/peertube/storage/thumbnails sudo mv /home/tmp/thumbnails/9* /home/yunohost.app/peertube/storage/thumbnails sudo mv /home/tmp/thumbnails/a* /home/yunohost.app/peertube/storage/thumbnails sudo mv /home/tmp/thumbnails/b* /home/yunohost.app/peertube/storage/thumbnails sudo mv /home/tmp/thumbnails/c* /home/yunohost.app/peertube/storage/thumbnails sudo mv /home/tmp/thumbnails/d* /home/yunohost.app/peertube/storage/thumbnails sudo mv /home/tmp/thumbnails/e* /home/yunohost.app/peertube/storage/thumbnails sudo mv /home/tmp/thumbnails/f* /home/yunohost.app/peertube/storage/thumbnails sudo mv /home/tmp/thumbnails/p* /home/yunohost.app/peertube/storage/thumbnails sudo rmdir /home/tmp/thumbnails sudo mv /home/tmp/avatars/0* /home/yunohost.app/peertube/storage/avatars sudo mv /home/tmp/avatars/1* /home/yunohost.app/peertube/storage/avatars sudo mv /home/tmp/avatars/2* /home/yunohost.app/peertube/storage/avatars sudo mv /home/tmp/avatars/3* /home/yunohost.app/peertube/storage/avatars sudo mv /home/tmp/avatars/4* /home/yunohost.app/peertube/storage/avatars sudo mv /home/tmp/avatars/5* /home/yunohost.app/peertube/storage/avatars sudo mv /home/tmp/avatars/6* /home/yunohost.app/peertube/storage/avatars sudo mv /home/tmp/avatars/7* /home/yunohost.app/peertube/storage/avatars sudo mv /home/tmp/avatars/8* /home/yunohost.app/peertube/storage/avatars sudo mv /home/tmp/avatars/9* /home/yunohost.app/peertube/storage/avatars sudo mv /home/tmp/avatars/a* /home/yunohost.app/peertube/storage/avatars sudo mv /home/tmp/avatars/b* /home/yunohost.app/peertube/storage/avatars sudo mv /home/tmp/avatars/c* /home/yunohost.app/peertube/storage/avatars sudo mv /home/tmp/avatars/d* /home/yunohost.app/peertube/storage/avatars sudo mv /home/tmp/avatars/e* /home/yunohost.app/peertube/storage/avatars sudo mv /home/tmp/avatars/f* /home/yunohost.app/peertube/storage/avatars sudo rmdir /home/tmp/avatars
- Si tout est bon, on pourra effacer les backups :
sudo rm -R /home/tmp/postgresql.bak sudo rm peertubeBasePostgreSQL_*
En cas de crash de la mise à jour:
- Normalement le processus de mise à jour de yunohost restaure le backup effectué post mise à jour.
L'opération se termine souvent par un message comme celui-ci, indiquant qu'on est revenu en arrière :
666348 Restauration terminée 2022-06-25 11:05:37,729: DEBUG - 666348 action [9697.1] executed in 665.934s 2022-06-25 11:05:37,729: DEBUG - apps: 2022-06-25 11:05:37,729: DEBUG - peertube: Success 2022-06-25 11:05:37,729: DEBUG - system: 2022-06-25 11:05:37,890: DEBUG - + [[ -d /etc/yunohost/apps/peertube ]] 2022-06-25 11:05:37,890: DEBUG - + ynh_die '--message=The app was restored to the way it was before the failed upgrade.' 2022-06-25 11:05:37,932: WARNING - The app was restored to the way it was before the failed upgrade. 2022-06-25 11:05:38,935: ERROR - Impossible de mettre à jour peertube : Une erreur s'est produite durant l'exécution du script de mise à niveau de l'application
Sauf que !! En fait non, jamaissystématiquement l'erreur 502 s'y met.
Habituellement il suffit de restaurer la base de donnée.
- Utile : afficher taille de la base, avant et après :
sudo -u postgres psql -c "SELECT pg_size_pretty(pg_database_size('peertube_peertube'));"
- Il faut jeter l’actuelle base, et en recréer une :
sudo service peertube stop sudo -u postgres psql -c "DROP DATABASE IF EXISTS peertube_peertube;" sudo -u postgres createdb -O peertube -E UTF8 -T template0 peertube_peertube sudo -u postgres psql -c "CREATE EXTENSION pg_trgm;" peertube_peertube sudo -u postgres psql -c "CREATE EXTENSION unaccent;" peertube_peertube
- Restaurer ensuite la base, depuis un backup pg_dump au format texte :
sudo psql -d peertube_peertube -U peertube -1 -f /home/tmp/peertubeBasePostgreSQL_2022-06-25.txt -v ON_ERROR_STOP=1
- Restaurer ensuite la base, depuis un backup pg_dump au format tar :
sudo pg_restore -U peertube -d peertube_peertube /home/tmp/peertubeBasePostgreSQL_2022-06-25.tar
Aujourd'hui, une nouvelle fois, cette opération n'a pas fonctionné !
Je n'ai plus le message d'erreur sous la main, mais la restauration de la base s'arrête en cours de route, et me laisse au mieux avec une instance peertupe bancale.
Je m'y prend peut-être mal, aussi si vous y voyez une erreur, n'hésitez-pas à me l'indiquer.
En cas de crash, Restauration de la dernière chance:
- On va remplacer toute les bases à la pelleteuse, en commançant par arrêter peertube et postgresql :
sudo service peertube stop sudo service postgresql stop
- Déplacer le dossier des bases courant :
sudo sudo mv /var/lib/postgresql /var/lib/postgresql.hs
- Copier le backup en place :
sudo cp -a /home/tmp/postgresql.bak/ /var/lib/postgresql
- Relancer postgresql et peertube :
sudo service postgresql start sudo service peertube start
- Ouf…
Ressources :
- https://www.postgresql.org/docs/8.0/backup.html
- https://public.dalibo.com/exports/formation/manuels/modules/i1/i1.handout.html
- https://www.latavernedejohnjohn.fr/articles/24-logiciel-scripts/217-installation-d-une-instance-peertube-sur-debian-stretch-9-6/