Custom Backup : How does it work?

Hi,

I would like to backup a quite few more configuration files within the excellent Yunohost backup system.
I found out about this page and tried to apply it but it was a remarkable failure.

What I did :

  • I created the file /etc/yunohost/hooks.d/backup/99-conf_custom and edited it with something like :
#!/bin/bash

# Source YNH helpers
source /usr/share/yunohost/helpers

ynh_backup_dest (){
    YNH_CWD="${YNH_BACKUP_DIR%/}/$1"
    mkdir -p $YNH_CWD
    cd "$YNH_CWD"
}

# Exit hook on subcommand error or unset variable
ynh_abort_if_errors

# SnapCast
ynh_backup_dest "conf/custom/snapcast"
ynh_backup "/etc/default/snapclient"
ynh_backup "/etc/default/snapserver"


# Mopidy
ynh_backup_dest "conf/custom/mopidy"
ynh_backup "/etc/mopidy/mopidy.conf"

Then, I wanted to try it with the command :
root@box:~# yunohost backup create --method custom
(Is this command correct ?)

And then, the greek tragedy :

Warning: /usr/share/yunohost/helpers.d/backup: line 101: src_path: unbound variable
Error: Could not run script: /etc/yunohost/hooks.d/backup/99-conf_custom
Error: Could not backup the 'conf_custom' system part

I would be highly delighted if anyone could help me on this.

Peace :v:
Charly

Hi @charly ,
I guess the command must be:

yunohost backup create --system conf_custom

What does the following command say?

yunohost hook list backup

You can see the scripts in /usr/share/yunohost/hooks/backup/, it’s the defaults backup scripts of Yunohost. You can copy 21-cong_ynh_certs to /etc/yunohost/hooks.d/backup/99-conf_custom and modify it to your needs.
Sorry, i’m not familiar with english, could we continue the discussion in French. If we find the solution, you can translate it.

If the suggestions don’t work, i’ll test later.

3 Likes

+1

“Backup” hooks and “backup method” hooks are differents. A “backup” hook allows you to add specific files in backup (or to rewrite which files to backup).

A “backup method” hook allows you to create a custom way to backup the list of files to backup. For example you could print all your files with your printer or send those files in a blockchain ^^ . This kind of hooks are currently used by borg_ynh and restic_ynh and by some advanced users/setup.

1 Like

Bonjour bonjour !

D’accord je comprends.

root@box:~# yunohost hook list backup
hooks: 
  - conf_custom
  - conf_ynh_settings
  - conf_ynh_certs
  - data_home
  - conf_manually_modified_files
  - data_mail
  - conf_ldap
  - data_xmpp

Je vais regarder pour adapter ce script.

Merci en tout cas !

A priori, il y a rien à adapter, faut juste utiliser la bonne commande proposée par @metyun

Ah bin j’ai du foirer quelque part, voici ce que ça donne quand je lance la commande

yunohost backup create --system conf_custom

Essaie avec ce script

#!/bin/bash

# Source YNH helpers
source /usr/share/yunohost/helpers

ynh_backup_dest (){
    YNH_CWD="${YNH_BACKUP_DIR%/}/$1"
    mkdir -p $YNH_CWD
    cd "$YNH_CWD"
}

# Exit hook on subcommand error or unset variable
ynh_abort_if_errors

# SnapCast
ynh_backup_dest "conf/custom/snapcast"
ynh_backup --src_path="/etc/default/snapclient"
ynh_backup --src_path="/etc/default/snapserver"


# Mopidy
ynh_backup_dest "conf/custom/mopidy"
ynh_backup --src_path="/etc/mopidy/mopidy.conf"

Yep !
Ca donne ça :

https://paste.yunohost.org/raw/aqedepimus

Je comprends juste que le script s’arrêt au milieu (il ne sauvegarde pas tous les fichiers).
Cela vous dit quelque chose ?

Non pas vraiment.
As-tu essayer comme ceci? (en s’inspirant de 21-conf_ynh_certs)

#!/bin/bash

# Exit hook on subcommand error or unset variable
set -eu

# Source YNH helpers
source /usr/share/yunohost/helpers

# Backup destination snapcast
backup_dir="${1}/conf/custom/snapcast"

# Backup snapcast
ynh_backup "/etc/default/snapclient" "$backup_dir"
ynh_backup "/etc/default/snapserver" "$backup_dir"

# Backup destination  mopidy
backup_dir2="${1}/conf/custom/mopidy"

# Backup mopidy
ynh_backup "/etc/mopidy/mopidy.conf" "$backup_dir2"

De ce que je comprends, dans les scripts présents dans /usr/share/yunohost/hooks/backup, la commande ynh_backup s’utilise de cette façon:

ynh_backup source destination

alors que dans le script, seulement la source est indiquée. C’est peut-être normal car on se place dans le dossier avec le cd dans la fonction ynh_backup_dest, mais il faudrait lire le code de la commande ynh_backup pour en être sûr. Essaye comme dans l’exemple ci-dessous avec un point à la fin pour indiquer le dossier courant pour voir si ça change quelque chose:

ynh_backup “/etc/mopidy/mopidy.conf” .

Je viens d’essayer, les 2 types de scripts, celui de ton premier post ainsi que celui que je propose ci-dessus, ils fonctionnent en sauvegarde, je n’ai pas testé en restauration. Et ce que je suggérais que j’ai barré ne fonctionne pas, c’était une mauvaise piste. A en croire cette erreur:

WARNING - /usr/share/yunohost/helpers.d/backup: line 101: src_path: unbound variable
Et en faisant une recherche sur “unbound variable bash”, je suis tombé sur cette explication:

Du coup, il faudrait modifier la ligne 101 de /usr/share/yunohost/helpers.d/backup:

if [ ! -e "$src_path" ]

par

if [ ! -e "${src_path:-}" ]

ou autre solution à tester, essayer de définir ligne 76:
src_path="${src_path:-}"

A relire le script, ça me semble bien être ça, ajouter entre ligne 76 et 77 de /usr/share/yunohost/helpers.d/backup la ligne suivante:
src_path="${src_path:-}"

@ljf : Si tu pouvais confirmer S.T.P.

Non je pense pas que ce soit ça le soucis.

Logiquement ce helper sert à interpréter les arguments de la commande: yunohost/backup at dev · YunoHost/yunohost · GitHub
Le premier est censé devenir src_path… Ca ne devrait donc pas dire que c’est “unbound”

Quelle est la version de yunohost utilisée ?

yunohost --version
yunohost: 
  repo: stable
  version: 4.2.8.3

Sinon j’ai essayé en rajoutant la ligne src_path="${src_path:-}" dans le /usr/share/yunohost/helpers.d/backup entre la ligne 76 et 77 mais pas mieux.

J’ai aussi essayé ça mais sans succès.

Merci en tout cas pour votre aide

What is the exact file ? You can send it to me via private message if needed.

I suspect the error is not in the script you show us.

Are you sure there are no ynh_backup with no params ?

That was the solution.

C’était quoi exactement comme erreur au final?
Etait-ce la commande ynh_backup utilisée sans argument, donc sans source? Si oui, je comprends mieux, car ça on ne le voit pas dans le 1er script, si non, je veux bien voir ce qui bloquait pour comprendre ce qu’il s’est passé.

Oui c’était ça, je ne l’avais pas vu mais il y avait une ligne avec juste ybh_backup sans rien après.
Vraiment désolé pour le temps perdu :frowning:

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