まこと の ブログ

MaKoTo no burogu — Journal de bord…

Aller au contenu | Aller au menu | Aller à la recherche

Mot-clé - Yunohost

Fil des billets - Fil des commentaires

samedi, 25 juin 2022

Quand la mise à jour de Peertube crashe salement…

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
  • Supprimer le dossier des bases courant :
sudo sudo mv /var/lib/postgresql /var/lib/postgresql.hs
rm -R /var/lib/postgresql
  • 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/

dimanche, 5 avril 2020

Seafile, comment vider la corbeille ?

Si comme moi vous vous êtes trouvé désemparé devant la corbeille à fichier de Seafile, qui malgré vidage et suppression, ne libérait toujours pas son espace disque, Et bien c'est… Normal.

  • En effet, j'ai fini par apprendre qu'il fallait exécuter le garbage collector, alias Seafile GC (seaf-gc.sh) pour supprimer réellement les fichiers après avoir vidé la corbeille.

J'avais pourtant recherché après ce genre de fonction, mais sans jamais trouver ni de bouton cliquable dans l'interface web, ni d'info dans la documentation…
Et pourtant l'info existe bien, mais faut croire qu'elle n'est pas suffisamment mise en avant, l'obscure intitulé Seafile GC n’encourageant pas à faire cliquer le visiteur occasionnel…

  • Bref, comme je n'avais aussi rien trouvé de clair via les moteurs de rechercher web, voici un petit script pour Yunohost (les chemins et commandes service étant sinon différentes), à lancer manuellement ou à faire exécuter périodiquement par cron.
#!/bin/bash

echo "Poids total des fichiers contenu dans Seafile"
du -sh /home/yunohost.app/seafile-data/

echo "Arrêt du service"
#/opt/yunohost/seafile/seafile-server-7.0.5/seafile.sh stop
yunohost service stop seafile

#echo "État de la corbeille"
#/opt/yunohost/seafile/seafile-server-7.0.5/seaf-gc.sh –dry-run

echo "Vidage de la corbeille"
/opt/yunohost/seafile/seafile-server-7.0.5/seaf-gc.sh

echo "Poids total des fichiers contenu dans Seafile, après vidage corbeille"
du -sh /home/yunohost.app/seafile-data/

echo "Relance du service"
yunohost service start seafile

Merci @jcvassort pour l'info !

samedi, 8 décembre 2018

Upload de gros fichiers vidéos sur une instance Peertube

peertube.png Quand on lit la documentation où les issues « Github » de Peertube, Chocobozzz nous indique clairement qu'il fût un temps révolu où la taille maximale d'une vidéo accepté par Peertube était de 4Gio, mais que maintenant c'est bien 8Gio qu'il est possible d'envoyer.

  • Pour le vérifier, sous Yunohost il suffit d'aller voir le fichier de config nginx dédié :
cat /etc/nginx/conf.d/peertube.makotoworkshop.org.d/peertube.conf

Et de retrouver l'information spécifiée ici :

# Hard limit, PeerTube does not support videos > 8GB
    client_max_body_size 8G;
    proxy_connect_timeout       600;
    proxy_send_timeout          600;
    proxy_read_timeout          600;
    send_timeout                600;
  • Et pourtant, j'ai voulu uploader une vidéo de 5,2Gio, et de recevoir l'erreur « 500 Internal Server Error », délivrée par nginx

peertubenginx.png

Lire la suite...

samedi, 1 décembre 2018

Changer la date de publication d'une vidéo Peertube

J'ai récemment crée plusieurs chaînes Peertube sur mon serveur auto-hébergé (dans ma cuisine donc hein, pas un truc loué dans une salle machine).
Plusieurs afin de cloisonner un peu les sujets des vidéos publiées, à défaut de fonctionnalité « playlist » (disponible pour bientôt), bien que le raccourci « locales » présente tout par date décroissante.
Et autant en publiant au long court, comme un blog, les vidéos sont disponibles chronologiquement, autant lorsqu'on a déjà un stock de vidéos à mettre à disposition, il peut-être utile de pouvoir anti-dater les vidéos, et ce pour deux raisons :
- Je veux lister telle vidéo avant telle autre dans la liste des vidéos locales.
- Je veux simuler la publication des vidéos de l'époque, car Peertube n'existait pas encore.

J'ai donc gratté un peu, car une telle fonction n'existe pas, et conclu assez rapidement qu'il me faudrait éditer la base de donnée PostgreSQL de Peertube.
peertube.png

Prérequis :

  • On a besoin du nom de la base, du nom d'utilisateur et du mot de passe associé.

En fonction du type d'installation, vous n'aurez peut-être pas eu accès à ces infos. C'est le cas avec Yunohost qui m'a permis d'installer Peertube en un click !
Il faut donc consulter le fichier production.yaml pour y lire ces infos :

cat /var/www/peertube/config/production.yaml
# Your database name will be "peertube"+database.suffix
database:
  hostname: 'localhost'
  port: 5432
  suffix: '_peertube'
  username: 'peertube'
  password: 'xxxxxxxxxxx'

Le mot de passe est en clair, j'ai mis des xxxxx à la place.

Précautions :

  • Avant de faire quoique ce soit, il est sage de sauvegarder la base de donnée.

On peut le faire avec Yunohost par la fonctionnalité de backup > app, qui fait qu'on retrouve la base sous forme de fichier texte /apps/peertube/backup/db.sql dans l'archive.
Pour le faire manuellement, l'équivalent est cette commande :

pg_dump --file peertubeBasePostgreSQL_20181201.txt -d peertube_peertube -U peertube

Il peut être intéressant d'en profiter pour faire aussi une sauvegarde dans le format custom, l'intérêt peut se révéler utile en cas de soucis particulier, comme indiqué ici.

pg_dump --format=custom --file peertubeBasePostgreSQL_20181201.dump -d peertube_peertube -U peertube


Logiciel :

Pour éditer la base, j'ai choisis le logiciel pgAdmin qui sera installé sur un poste client du réseau local, car évidemment, le serveur qui fait tourner Peertube ne dispose pas d'interface graphique.

sudo apt install pgadmin3
  • Une fois installé, via le menu « Fichier > Ajouter un serveur…» on va pourvoir renseigner les infos utiles récoltées précédemment pour se connecter à la base :

pgadmin.png

Lire la suite...