Créer un hook restore

:fr:

Mon serveur YunoHost

Matériel: Raspberry Pi 3b+ à la maison
Version de YunoHost: 3.5.2.2
J’ai accès à mon serveur : En SSH | Par la webadmin
Êtes-vous dans un contexte particulier ou avez-vous effectué des modifications particulières sur votre instance ? : oui
Modification de certains fichiers nginx pour autoriser l’accès à la Webadmin uniquement en local.
Installation de Sonerezh par yunohost puis application mise à jour manuellement
backup Borg

Description du problème

La sauvegarde ne sauvegarde pas tout le dossier /etc/yunohost, est-ce un bug ou un oubli?
J’ai eu le fichier /etc/yunohost/appslists.json de corrompu et je ne pouvais plus mettre à jour avec la commande yunohost upgrade , dépanné en remplaçant par celui d’un autre utilisateur yunohost.
J’ai donc crée un hook dans /etc/yunohost/hook.d/backup si c’est bien comme cela que ça s’appelle avec le contenu suivant:

#!/bin/bash
set -eu
source /usr/share/yunohost/helpers

backup_dir="${1}/conf/ynh"

# Save json files
ynh_backup "/etc/yunohost/appslists.json" "${backup_dir}/appslists.json"

Ça fonctionne. Ensuite je veux créer celui de restauration mais la restauration échoue. Qu’ai-je fait comme erreur?
Voici le script dans /etc/yunohost/hooks.d/restore

#!/bin/bash
set -eu
source /usr/share/yunohost/helpers

# Restore destination
restore_dest="/etc/yunohost"

#Restore json files
ynh_restore_file --origin_path="${restore_dest}/appslists.json"

Et le message d’erreur:

2019-06-22 12:36:53,937: WARNING - mv: impossible d'évaluer '/home/yunohost.backup/tmp/20190620-214002/conf/ynh/appslists.json': Aucun fichier ou dossier de ce type

Salut,
En fait si tu veux pas te casser la tête, tu fais:

Dans le fichier backup

#!/bin/bash
set -eu
source /usr/share/yunohost/helpers

ynh_backup "/etc/yunohost/appslists.json"

Et dans le fichier restore

#!/bin/bash
set -eu
source /usr/share/yunohost/helpers

ynh_restore_file "/etc/yunohost/appslists.json"

Logiquement ça devrait fonctionner, à condition que le fichier appslists.json existe bien à l’origine.

Est-ce un oublie ? Sans doute, a priori je dirais que oui si on imagine que la personne a ajouté la liste community ou la brique internet, plutôt non dans le cas contraire.
Comme la liste community et la liste de la brique sont en train de disparaître, au profit d’une liste d’apps général, j’aurais tendance à penser que si le fichier est corrompu, nous devrions plutôt le recréer. Mais une liste d’apps non-free.json apparaîtra peut être un jour.

Toujours est il que ça ressemble à un bug, où il y a plusieurs solutions. La solution du backup/restore peut causer des soucis si on restore le fichier d’une version ancienne de YunoHost vers celui d’une plus récente version. (en ce moment on migre les instances vers la nouvelles listes apps.json).

Merci ljf pour ta réponse.
Logiquement ça devrait fonctionner, mais en fait non :worried:
Voici le rapport de log complet: https://paste.yunohost.org/raw/giyoramesu
Le fichier /etc/yunohost/appslists.json existe bien.
Ce n’est pas bien grave, le backup se faisant bien je peux rétablir manuellement en récupérant le fichier dans l’archive, cependant je découvre ce système de “hook” et c’est quand même bien pratique pour sauvegarder/restaurer des fichiers avec une intégration parfaite à yunohost. Par ailleurs, y-a-t-il une règle à respecter pour le nom de ces scripts hooks?

Dans mon cas la liste community était ajoutée, cependant la situation a été résolue en ajoutant un fichier appslists.json avec uniquement la liste officielle et j’ai ensuite mis à jour le fichier en ajoutant la liste community à partir de la Webadmin. Je comprends le risque avec la restauration d’une version ancienne, j’ai une sauvegarde journalière aussi en cas de souci je rétablirai une version récente. Je trouve l’idée d’une liste unique d’apps nettement mieux que la façon dont c’est géré actuellement et de recréer celle-ci si le fichier est corrompu. C’est ce qu’il y a de plus transparent pour l’utilisateur. Et pour une liste non-free.json, pourquoi pas, si elle est gérée dans un fichier à part, ça devrait quand même simplifier les choses en cas de soucis en récréant la liste des apps générales et ne pas bloquer le système des mises à jours de celles-ci.

Après avoir regardé plus attentivement, il semble qu’il y ai un soucis avec le helper de restore…

Du coup, :
12-conf_ynh_appslists

#!/bin/bash
set -eu
source /usr/share/yunohost/helpers

backup_dir="${1}/conf/ynh"
ynh_backup "${backup_dir}/appslists.json"

Hook restore
12-conf_ynh_appslists

#!/bin/bash
set -eu
source /usr/share/yunohost/helpers

backup_dir="$1/conf/ynh"

cp -a "${backup_dir}/appslists.json" /etc/yunohost/appslists.json

Pas mieux, toujours ce message d’erreur:

WARNING - cp: impossible d’évaluer ‘/home/yunohost.backup/tmp/20190624-175949/conf/ynh/appslists.json’: Aucun fichier ou dossier de ce type

J’ai vérifié que les droits et propriétaire étaient les mêmes, j’ai même essayé de mettre le script dans /usr/share/yunohost/hooks/restore. J’ai également essayé en prenant pour modèle le script 40-conf_ynh_currenthost et en gardant exactement la même structure et toujours rien. Dans ce dernier essai, j’ai donné un nom différent (12-myconf_ynh_appslists au lieu de 12-conf_ynh_appslists) afin de pouvoir sauvegarder indépendamment du reste du système.

Le problème semble se situer dans l’archive décompressée qui ne contient pas ce fichier alors qu’il est bien présent dans l’archive.

I opened an issue : https://github.com/YunoHost/issues/issues/1370

Ok merci.
Si ça peux servir, voici ce que le mail cron me rapporte ce matin avec, je le rappelle, une sauvegarde borg gérée par un script:

Le script de restauration '{part:s}' n’est pas disponible sur votre système, et ne l'est pas non plus dans l’archive.

Puis un peu plus loin:

Could not link /etc/yunohost/appslists.json to /home/yunohost.backup/tmp/sauvegarde_automatique_du_mardi-25-juin-2019/conf/ynh/appslists.json ([Errno 17] File exists) ... falling back to regular copy.
File "/usr/lib/python2.7/shutil.py", line 69, in copyfile
raise Error("`%s` and `%s` are the same file" % (src, dst))
shutil.Error: `/etc/yunohost/appslists.json` and `/home/yunohost.backup/tmp/sauvegarde_automatique_du_mardi-25-juin-2019/conf/ynh/appslists.json` are the same file

This topic was automatically closed 15 days after the last reply. New replies are no longer allowed.