Borg : no more backup available

borg (not borg server) updated to testing, and still the same error :

~ sudo systemctl start borg.service
~ sudo systemctl status --lines 100 borg.service
● borg.service - Run backup borg
   Loaded: loaded (/etc/systemd/system/borg.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Fri 2020-07-31 11:22:29 CEST; 3min 8s ago
  Process: 4225 ExecStart=/usr/local/bin/backup-with-borg (code=exited, status=1/FAILURE)
 Main PID: 4225 (code=exited, status=1/FAILURE)

juil. 31 11:18:53 myserver.fr backup-with-borg[4225]: [########++++........] > Backing up database...
juil. 31 11:18:53 myserver.fr sudo[8474]:     root : TTY=unknown ; PWD=/home/yunohost.backup/tmp/auto_kresus/apps/kresus/backup ; USER=postgres ; COMMAND=/bin/bash -
juil. 31 11:18:53 myserver.fr sudo[8474]: pam_unix(sudo:session): session opened for user postgres by (uid=0)
juil. 31 11:18:54 myserver.fr sudo[8474]: pam_unix(sudo:session): session closed for user postgres
juil. 31 11:18:54 myserver.fr backup-with-borg[4225]: [############++++....] > Backing up systemd service...
juil. 31 11:18:56 myserver.fr backup-with-borg[4225]: Création d’une archive de sauvegarde à partir des fichiers collectés …
juil. 31 11:19:02 myserver.fr backup-with-borg[4225]: Échec de l’exécution du script : /etc/yunohost/hooks.d/backup_method/05-borg_app
juil. 31 11:19:02 myserver.fr backup-with-borg[4225]: Échec de la méthode de sauvegarde personnalisée à l’étape 'backup'
[etc… for all services]

I have the exact same issue as @Mamie.

In 4.X, I reinstalled borg (client) and I got the same error. I also upgraded the app to the testing branch and the error is still there.

@ljf I’m going to dig a bit more to get a solution. But if you need any more information, don’t hesitate to ask.

I guess what would be nice would be to have the output of the backup command ran with the --debug option :s

And also the result of this command:

tail -n100 /var/log/backup_borg.err

Here is the content of /var/log/backup_borg.err (only the end, this is the same lines again and again)

Remote: Debian GNU/Linux 10
passphrase supplied in BORG_PASSPHRASE, by BORG_PASSCOMMAND or via BORG_PASSPHRASE_FD is incorrect.
Remote: Debian GNU/Linux 10
A repository already exists at ssh://borgborg@myserver.fr/~/backup.
Remote: Debian GNU/Linux 10
passphrase supplied in BORG_PASSPHRASE, by BORG_PASSCOMMAND or via BORG_PASSPHRASE_FD is incorrect.
Remote: Debian GNU/Linux 10
A repository already exists at ssh://borgborg@myserver.fr/~/backup.
Remote: Debian GNU/Linux 10
passphrase supplied in BORG_PASSPHRASE, by BORG_PASSCOMMAND or via BORG_PASSPHRASE_FD is incorrect.
Remote: Debian GNU/LinuxRemote: Debian GNU/Linux 10
passphrase supplied in BORG_PASSPHRASE, by BORG_PASSCOMMAND or via BORG_PASSPHRASE_FD is incorrect.
Remote: Debian GNU/Linux 10
A repository already exists at ssh://borgborg@myserver.fr/~/backup.
Remote: Debian GNU/Linux 10
passphrase supplied in BORG_PASSPHRASE, by BORG_PASSCOMMAND or via BORG_PASSPHRASE_FD is incorrect.
Remote: Debian GNU/Linux 10
A repository already exists at ssh://borgborg@myserver.fr/~/backup.
Remote: Debian GNU/Linux 10
passphrase supplied in BORG_PASSPHRASE, by BORG_PASSCOMMAND or via BORG_PASSPHRASE_FD is incorrect.
Remote: Debian GNU/Linux 10
A repository already exists at ssh://borgborg@myserver.fr/~/backup.
Remote: Debian GNU/Linux 10
passphrase supplied in BORG_PASSPHRASE, by BORG_PASSCOMMAND or via BORG_PASSPHRASE_FD is incorrect.
 10
A repository already exists at ssh://borgborg@myserver.fr/~/backup.
Remote: Debian GNU/Linux 10
passphrase supplied in BORG_PASSPHRASE, by BORG_PASSCOMMAND or via BORG_PASSPHRASE_FD is incorrect.

sudo service borg start --debug does not display anything, only the final error (and nothing more in the logs than in the previous messages).

Reading the server log, it seems the passphrase have a problem somehow, but I use the same server from other clients without any problems, and since there are no mail on error, that’s how I noticed the lack of backups.

Hello !

Sorry pour le retard, le fichier /var/log/backup_borg.err est rempli en boucle de ces lignes (par sécurité, j’ai remplacé les occurrences de mon user et du serveur de backup par “USER” et “SERVER”) :

A repository already exists at ssh://USER@SERVER/~/backup.
Warning: The repository at location ssh://USER@SERVER/~/backup was previously located at ssh://USER@SERVER:22682/~/backup
Do you want to continue? [yN] Aborting.
Repository access aborted

Le problème était donc assez évident (et il n’est pas le même que celui de @Mamie). J’ai manuellement changé le port d’écoute du service ssh de mon serveur de backup. borg a en conséquence vu le changement et demande interactivement une confirmation que le nouveau chemin est OK. Si j’avais cherché dans le bon log file, j’aurais pu facilement le résoudre… :confused:

Pour le résoudre, j’ai exécuté les commandes suivantes :

# Se connecter au user root
sudo su -
# Démarrer le SSH agent et charger la clé privée SSH
eval $(ssh-agent)
ssh-add ~/.ssh/id_borg_ed25519
# Créer les différentes variables nécessaires à l'exécution du backup
repo=ssh://<MON_BACKUP_USER>@<MON_BACKUP_SERVER>/~/backup
current_date=$(date +"%d_%m_%y_%H:%M")
name=dummy
# HISTCONTROL permet de ne pas stocker la passphrase dans l'historique de bash quand on ajoute un espace au tout début de la commande
HISTCONTROL=ignoreboth
 BORG_PASSPHRASE="METTEZ_ICI_VOTRE_PASSPHRASE"
export BORG_PASSPHRASE
# Création d'un fichier "dummy"
echo "coucou" > ./dummy
# Exécution de la commande de backup
borg create $repo::${name}_${current_date} ./dummy

borg demande alors de confirmer (interactivement) la nouvelle adresse du serveur de backup. Il faut confirmer (y).

Warning: The repository at location ssh://USER@SERVER/~/backup was previously located at ssh://USER@SERVER:22682/~/backup
Do you want to continue? [yN] y

borg devrait finir le backup en quelques secondes (vu que le fichier ./dummy ne contient que la string “coucou”).

Avant d’exécuter le backup complet du système, on peut exécuter cette commande dans un deuxième terminal pour suivre son avancement :

sudo journalctl -fu borg.service

Dans le premier terminal, on peut enfin manuellement tenter de ré-exécuter le backup du système :

systemctl start borg.service

Si tout va bien, à la fin du backup, les logs affichés par la commande sudo journalctl -fu borg.service devraient se terminer par ces lignes :

Aug 10 10:26:08 mon_serveur_ynh systemd[1]: borg.service: Succeeded.
Aug 10 10:26:08 mon_serveur_ynh systemd[1]: Started Run backup borg.

Si vous voulez supprimer le fichier ./dummy (afin d’avoir un repo tout propre :slight_smile: ), lancez la commande suivante dans le premier terminal (depuis lequel vous avez exécuté la commande borg create) :

# Vérifiez que vous allez supprimer le bon backup (dry-run)
borg delete -v -n $repo::${name}_${current_date}
# Si c'est OK, supprimez le backup en question
borg delete -v $repo::${name}_${current_date}

Du coup, je me suis motivé à essayer des trucs.
Jusqu’à présent, les sauvegardes marchaient, et je pouvais y accéder depuis un autre outil borg (vorta dans mon cas) et tout était chouette.

Ensuite, les sauvegardes ne se faisaient plus, mais je pouvais toujours accéder aux anciennes via vorta, pour les sauvegardes YunoHost, j’avais le message suivant :

ERROR - passphrase supplied in BORG_PASSPHRASE, by BORG_PASSCOMMAND or via BORG_PASSPHRASE_FD is incorrect.

Hier j’ai décidé de vider mes sauvegardes (juste déplacées pour l’instant) pour en relancer une.
Plusieurs heures plus tard, ça se termine, c’est super !
Ce matin j’essaie donc d’y accéder via vorta pour voir ce qu’il y a dedans, et la…

ERROR - passphrase supplied in BORG_PASSPHRASE, by BORG_PASSCOMMAND or via BORG_PASSPHRASE_FD is incorrect.

Du coup, je me demande, est ce que la manière de passer ou d’utiliser le mot de passe aurait pu changer après le 13/07 ?

Ah et surtout, LA grande question : vu que ce que j’ai saisi dans vorta n’a plus l’air de marcher alors que c’était ce que j’avais saisi dans borg, où est ce que je peux trouver ce mot de passe ?

Hello,

Tu peux le trouver avec cette commande :

sudo grep "BORG_PASSPHRASE=" /etc/yunohost/hooks.d/backup_method/05-borg_app | cut -d'"' -f2

Oh !
Il y a visiblement eu un bug à un moment.

J’avais mis une phrase de passe, disons pour l’exemple (le 1er mot est bon, au cas où ça impacte)
Sauvegarde de mon Serveur <3

La j’ai trouvé ce qui était utilisé :

sudo yunohost app setting borg passphrase
Sauvegarde

Seul le 1er mot a été pris en compte :scream:

Du coup, restauration de l’ancien dossier de sauvegarde, restauration du mot de passe, et je relance une sauvegarde.
Et raté, toujours

passphrase supplied in BORG_PASSPHRASE, by BORG_PASSCOMMAND or via BORG_PASSPHRASE_FD is incorrect.

J’y ai cru

Je viens de tester ça, et ça me retourne à nouveau

Sauvegarde
Du coup il y a un soucis quelquepart, je vais ouvrir un ticket, je suppose que c’est une piste suffisante.

Ce coup ci c’est la bonne, merci @SohKa !
Je suis du coup allé voir le fichier /etc/yunohost/hooks.d/backup_method/05-borg_app et dans celui ci le mot de passe était aussi erroné.

J’ai corrigé dans le fichier et la ça marche !

J’ai du coup ouvert un ticket avec tout ça dedans, en espérant que ça puisse aider à corriger.
(et j’espère au passage que le ticket à propos du mail d’erreur en cas d’échec de sauvegarde arrivera un jour :smile:)

2 Likes

Je me rends compte que ton issue ( https://github.com/YunoHost-Apps/borg_ynh/issues/49 ) ne correspond pas au problème que j’ai rencontré et que j’ai ajouté dans cette issue.

Dans ton cas, il semblerait que ça soit au moment de l’installation où ça coince (la passphrase n’arrive pas entière dans /etc/yunohost/hooks.d/backup_method/05-borg_app, dans mon cas elle arrive entière mais une partie est interprêtée comme une variable (car il y a un “$” dans ma passĥrase).

Je vais ouvrir une autre issue.

Je pense au contraire que c’est exactement la même.
La chaine de caractère est passée tel quel, du coup avec un espace ça considère que c’est un autre paramètre, et avec un $ ça considère qu’il y a une variable.

Ce qui manque ce n’est pas une vérification pour éviter les caractères spéciaux, mais d’échapper la chaîne et la passer comme étant un String

Il y a une similitude mais ça coince pas au même endroit, je pense. (Puisque tu n’avais pas la passphrase complète dans le script de backup alors que moi si.)

Je ne sais pas où il a supprimé ce qui était après le premier espace, dans ton cas.

Quelques essais :

$ PASSPHRASE="salut toto"

$ echo $PASSPHRASE
salut toto

$ PASSPHRASE="salut $toto!"

$ echo $PASSPHRASE
salut !

$ PASSPHRASE='salut $toto!'

$ echo $PASSPHRASE
salut $toto!

Avec ce que je comprends actuellement, mettre BORG_PASSPHRASE='maPassphrase' au lieu de BORG_PASSPHRASE="maPassphrase" règlerait mon problème mais pas le tien.

N’hésitez pas à proposer une pr, j’aurais le temps de la relire et de l’intégrer mais pas de coder ça (je me suis cassé la main droite, et j’ai pas mal de trucs à coder donc je vais prioriser).

2 Likes

Je pense que ça résoudrai le mien, dans le code actuel il n’y a même pas de quotes
export passphrase=$(ynh_app_setting_get $app passphrase)

mais en même temps, non, parce que cette valeur la aussi était mauvaise chez moi

Mais du coup c’est peut être au niveau du helper YunoHost lui même qu’il y a un soucis ?

Dans le repo borg, le seul endroit où la passphrase est traitée avec des quotes, c’est là : https://github.com/YunoHost-Apps/borg_ynh/blob/testing/conf/backup_method.j2

1 Like

C’est bien là que je changerais pour résoudre le problème que j’ai rencontré. Et encore une fois, je pense qu’on est face à deux problèmes distincts.

Et je ne sais pas exactement, dans ton cas, où se situe le problème. C’est possible que ça soit au niveau du helper de Yunohost, il faudrait creuser. Peut-être qu’ @Aleks aurait une idée pour nous aiguiller ?

(Edit: marf j’aurais du lire plus haut avant de faire la même explication qui a déjà été donnée sorry)

De ce que j’en comprends : ce fichier .j2 est un template utilisé pour générer le “vrai” script.

Donc si ton mot de passe est “coucou$toto”, le vrai script va ressembler à :

set -e

BORG_PASSPHRASE="coucou$toto"

Et comme c’est entre double quotes, pendant l’execution du backup, bash va remplacer $toto par le contenu de la variable toto … qui probablement n’existe pas, et donc la variable finale vaudra juste “coucou”

Effectivement, une solution est de remplacer les doubles quotes par des simples quotes (bash n’interprete pas les variables lorsqu’entre simple quotes). Par contre dans l’absolu il peut aussi y’avoir des soucis si jamais la personne met un ’ (ou ") dans son mot de passe … le vrai truc c’est de s’arranger en amont (ou bien avec une syntaxe jinja) pour échaper les caractères qui vont bien.

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