まこと の ブログ

MaKoTo no burogu — Journal de bord…

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

Mot-clé - Logiciel libre

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/

jeudi, 26 mai 2022

Haaa ! Snap alors !

Les utilisateurs et utilisatrices d'Ubuntu l'auront peut-être remarqués, depuis quelques versions, certains logiciels s'installent sans donner le choix depuis des paquets snap au lieu du traditionnel paquet « apt » deb.
Ç'aurait pu passer relativement inaperçu, sauf que cela a plusieurs conséquences, notamment prendre beaucoup d'espace disque, et d'être plus lent au démarrage des logiciels.
Autre conséquences, et non des moindre concernant par exemple, au hasard, le soft qui me sert le plus, Firefox.
Une bonne partie de ses extensions, ne fonctionnent plus, ce qui est relativement fâcheux. Ceci s'explique par le fait qu'un snap vient avec son propre petit environnement « sandboxé » ce qui empêche certaines extensions donc de communiquer avec « l'extérieur ».
Alors certes une « sandbox » c'est un gain de sécurité, mais si c'est au détriment de l'utilisabilité, c'est non.


L'espace disque :

  • Mon disque est partitionné comme il se doit, avec un home séparé. J'ai donc une racine qui ne me sert que pour le système d'exploitation et les logiciels. Avec 10 Gio de libre, jusqu'à présent je n'ai jamais eu de problème de saturation du disque.
/dev/sda1                          47G     35G  9,4G  79% /

Pourtant dés la mise à niveau vers Ubuntu 22.04LTS, encours de route, la mise à niveau s'est arrêtée net… Téléchargement des paquets ok, et pendant l’installation de ceux-ci, disque plein au moment de mettre à jour KiCad.
J'ai alors désinstallé celui-ci pour gagner un peu d'espace disque, et heureusement que le logiciel de mise à niveau est bien fichu, car j'ai pu, avec la commande adaptée, relancer la procédure et terminer la mise à niveau.

  • Me voici donc avec la 22.04, je réinstalle 'KiCad'', et me reste à peine 8 Gio de disque… Bon ok.

Quelques jours plus tard, des mises à jours arrivent, et ho, 4.4 Gio de libre… Heuuuuu, qué passa !?

Firefox :

J'ai suivis un des nombreux tutos qui indiquent la démarche pour repasser à un deb.

  • Suppression du snap et installation depuis le ppa :
sudo snap remove firefox
 sudo add-apt-repository ppa:mozillateam/ppa
sudo apt update
sudo apt install firefox
  • Pour activer la mise à jour automatique depuis le ppa
echo 'Unattended-Upgrade::Allowed-Origins:: "LP-PPA-mozillateam:${distro_codename}";' | sudo tee /etc/apt/apt.conf.d/51unattended-upgrades-firefox
  • Pour empêcher le remplacement par les mises à jours de Firefox en snap, éditer le fichier suivant :
sudo nano /etc/apt/preferences.d/firefox-no-snap
  • Avec dedans :
Package: firefox*
Pin: release o=Ubuntu*
Pin-Priority: -1

Haaa mes extensions Firefox fonctionnent à nouveau !

Lire la suite...

lundi, 11 janvier 2021

Un Raspberry Pi 3 en MediaCenter #Kodi

On va ici reparler de l'installation manuelle de Kodi sur RaspberryPi, étant donné les quelques difficultés qui se sont présentées, alors que je souhaitais installer un Add-on sur ma précédente installation datant de 2016.

Depuis 2016 oui !
Entre temps j'avais juste — sans modification logicielle — échangé le Pi2 par un Pi3, pour un petit gain de performances appréciable.

  • Sans soucis majeur donc, sauf à avoir des Add-on parfois défaillants, comme l'Add-on youtube (sans pub !) qui demande maintenant (mais à priori les dév travaillent à y remédier) à ce que soit renseigné une identité d'API développer pour faire fonctionner l'Add-on.
  • Autre problème cet été… La chaleur. Comme chacun·e sait, le Pi3 vient sans dissipateur thermique, et il ne chauffe pas trop en temps normal, autour de 40° suivant la température ambiante. Jusqu'ici tout va bien comme dirait l'autre, mais arrivé en Août, pourquoi diable ma télécommande InfraRouge se met elle à déconner grave !?? J'appuie une fois sur le bouton et zouuu la commande est prise façon mitraillette par le Pi… J'ai rapidement remarqué qu'au démarrage du médiacenter, la télécommande fonctionnait bien, et ce n'est qu'au bout de quelques courtes minutes que le problème apparaissait, et vu les fortes chaleurs, j'ai fais le lien… Et « anéfé» le Pi tournait autour de 50° !
  • J'ai donc entrepris de changer mon boîtier (cf. Précédent billet) et d'en imprimer un nouveau (téléchargeable ici ou en annexe de ce billet), tenant compte du dissipateur thermique de récup découpé en gros rectangle et de ventilateurs ajoutés.

Voilà, avec ça c'est autour de 30°C et la télécommande n'a plus bronché !

  • Le système tournait donc, après mise à jour, avec Kodi 17.3, sur Raspbian GNU/Linux 8 (jessie), et un Kernel Linux 4.9.

Mais le nouvel Add-on ma dit : « trop vieux mec ! »… Mm'ok, je pourrais mettre à jour l'OS… Mais sur un Pi, avec une carte SD, c'est non, alors je réinstalle !

Le nouvel OS pour RaspberryPi à changé, c'est maintenant Raspberry Pi OS qui remplace Raspbian… cherchez pas c'est juste le nom qui change…
Allons-zy !

Lire la suite...

jeudi, 16 avril 2020

Créer une vidéo à partir d'une sauvegarde de partie MAME

Comme je le racontais il y a 6 ans, il est possible d'enregistrer des parties de jeux sur MAME, de rejouer la partie et si besoin d'enregistrer une vidéo de celle-ci.

J'en avais profité pour publier une page dédiée.
Comme je trouvais les manipulations en ligne de commande fastidieuses, j'avais écris un script bash pour faciliter l'opération, mais ça restait de l'austère ligne de commande.

  • Un peu moins austère, j'ambitionnais de créer une interface graphique pour faire cela, et c'est donc aujourd'hui que je publie enfin un script python3 qui permet donc en quelques clicks de rejouer une partie et d'en générer une vidéo au format mp4/h264, le tout de manière automatisée.

Le code de ce logiciel est disponible ici, mais il vous manquera l'exécutable MAME que j'ai compilé.

  • J'ai donc réunis tout le nécessaire dans le fichier zip en annexe de ce billet.[1]

Une fois extrait, il suffit d'exécuter install.sh afin d'installer les paquets pré-requis.
Ensuite exécuter Lanceur_Mame-inp2video4GnuLinux.sh qui a pour tâche de démarrer le logiciel que j'ai nommé pompeusement Mame-inp2video4GnuLinux.

  • Voici une capture d'écran…


C'est un peu moins austère que je disais…

  • À toute fin utiles, et comme il faudra bien ça pour alimenter le logiciel, voici la commande qui permettra d'enregistrer la partie de jeu, valable pour Windows® ou GNU/Linux :
mame nom_de_la_rom -record ma_partie.inp

Attention, il faut juste se contenter de jouer et de quitter l'émulateur en fin de partie, le fichier inp étant dés lors disponible, généralement dans le dossier inp.
En effet il semble qu'utiliser les menu mame ou les raccourcis clavier (par ex pour faire un save_state) soit incompatible avec un enregistrement correct de la partie de jeu dans le fichier inp.

  • Enfin, puisqu'il faut évidemment le préciser, le Logiciel Mame-inp2video4GnuLinux fonctionnera, depuis n'importe quel ordinateur équipé de GNU/Linux de la famille Debian (Ubuntu18.04 testé ok).

Il n'est pas nécessaire d'avoir MAME installé sur cette machine.
Vous aurez besoin cependant du fichier ROM et bien entendu du fichier INP correspondant.
Laissez vous ensuite guidé par l'interface graphique…

  • Je suis débutant dans l'exercice, suis ouvert à l'apprentissage, et ne recevrais donc aucune critique non-constructive. Vous pouvez bien entendu me faire part des problèmes d'exécutions qui pourraient advenir.

Note

[1] Ci-dessous…

- page 1 de 16