[Borg] Borg pas dans le $PATH?

Mes serveurs YunoHost

Matériel: Deux VPS en ligne
Version de YunoHost: :

# yunohost --version
yunohost: 
  repo: stable
  version: 11.2.22
yunohost-admin: 
  repo: stable
  version: 11.2.7
moulinette: 
  repo: stable
  version: 11.2.1
ssowat: 
  repo: stable
  version: 11.2.1.1

J’ai accès à mes serveurs : En SSH et par la webadmin
Êtes-vous dans un contexte particulier ou avez-vous effectué des modifications particulières sur vos instances ? : Non, à part les mises à jours régulières.

Description du problème

Après avoir eu des soucis de lock avec borg (voir : borg qui ne fonctionne plus (“lock”)), voilà que j’ai à nouveau des problèmes avec les backups.

Tout d’abord j’ai eu des soucis après une mise à jour de l’app borg parce qu’il avait changé le script de sauvegarde et à nouveau effacé le port que j’utilise. Ça, j’ai corrigé.

Maintenant on dirait qu’il ne trouve pas l’application borg :

# cat /var/log/borg/240722_0000.err 
Failed to format translated string 'backup_applying_method_custom': 'Calling the custom backup method '{method}'…' with arguments '()' and '{}, raising error: KeyError('method') (don't panic this is just a warning)
Failed to format translatable string 'backup_applying_method_custom': 'Calling the custom backup method '{method}'…' with arguments '()' and '{}', raising  error: KeyError('method') (don't panic this is just a warning)
Remote: bash: line 1: borg: command not found
Remote: bash: line 1: borg: command not found
Could not run script: /etc/yunohost/hooks.d/backup_method/05-borg_app
Custom backup method could not get past the 'backup' step
Failed to format translated string 'backup_applying_method_custom': 'Calling the custom backup method '{method}'…' with arguments '()' and '{}, raising error: KeyError('method') (don't panic this is just a warning)
Failed to format translatable string 'backup_applying_method_custom': 'Calling the custom backup method '{method}'…' with arguments '()' and '{}', raising  error: KeyError('method') (don't panic this is just a warning)
Remote: bash: line 1: borg: command not found
Remote: bash: line 1: borg: command not found

Effectivement, que ça soit sur le premier serveur ou sur le second, je ne trouve pas borg :

# whereis borg
borg:

Le service est planté sur les deux serveurs :

root@serveurA:~# systemctl status borg
● borg.service - Run backup borg
     Loaded: loaded (/etc/systemd/system/borg.service; static)
     Active: failed (Result: exit-code) since Mon 2024-07-22 00:04:46 UTC; 8h ago
TriggeredBy: ● borg.timer
    Process: 952189 ExecStart=/usr/bin/sudo /var/www/borg/backup-with-borg borg (code=exited,>
   Main PID: 952189 (code=exited, status=1/FAILURE)
        CPU: 3min 50.609s
root@serveurB:~# systemctl status borg
● borg.service - Run backup borg
     Loaded: loaded (/etc/systemd/system/borg.service; static)
     Active: failed (Result: exit-code) since Mon 2024-07-22 00:29:47 UTC; 7h ago
TriggeredBy: ● borg.timer
    Process: 36339 ExecStart=/usr/bin/sudo /var/www/borg/backup-with-borg borg (code=exited, >
   Main PID: 36339 (code=exited, status=1/FAILURE)
        CPU: 5min 26.704s

En regardant le process lancé par les services, je réalise que Borg est dans ce dossier :

# ls -al /var/www/borg/venv/bin/
total 32
drwxr-xr-x 2 borg borg 4096 May 31 08:30 .
drwxr-xr-x 6 borg borg 4096 May 31 08:19 ..
-rwxr-xr-x 1 borg borg  226 May 31 08:30 borg
-rwxr-xr-x 1 borg borg  226 May 31 08:30 borgfs
-rwxr-xr-x 1 borg borg  235 May 31 08:19 pip
-rwxr-xr-x 1 borg borg  235 May 31 08:19 pip3
-rwxr-xr-x 1 borg borg  235 May 31 08:19 pip3.9
lrwxrwxrwx 1 borg borg    7 May 31 08:19 python -> python3
lrwxrwxrwx 1 borg borg   16 May 31 08:19 python3 -> /usr/bin/python3
lrwxrwxrwx 1 borg borg    7 May 31 08:19 python3.9 -> python3
-rwxr-xr-x 1 borg borg  222 May 31 08:19 wheel

Sauf que les utilisateurs userA sur le serveurB et userB sur le serveurA n’ont probablement pas ce dossier dans leur $PATH ?

Par exemple, si je suis sur le serveurA, qui reçoit les backups du serveurB et qui a un utilisateur userB pour cette tache :

root@serveurA:~# su userB
userB@serveurA:~$ whereis borg
borg:
userB@serveurA:~$ ls -al /var/www/borg/venv/bin
ls: cannot access '/var/www/borg/venv/bin': Permission denied

J’ai l’impression que ça ne peut pas marcher… Comment résoudre ce problème proprement ?

Je pourrais ajouter “/var/www/borg/venv/bin” dans le $PATH de userB et modifier les droits pour qu’il ait accès au programme. Mais ça va probablement se faire écraser par la prochaine mise à jour de borgserver-ynh ?

(En cours d’investigation…)

Les users n’en ont pas besoin dans leur path car dans le script /etc/yunohost/hooks.d/backup_method/05-borg_app, il est écrit
borg="/var/www/borg/venv/bin/borg" et ensuite tous les appels se font par $borg

Ton erreur dit “Remote: bash: line 1: borg: command not found” donc selon moi “Remote” ce serait le borg distant qui ne serait pas trouvé par SSH ?

Bonjour @adlmr et merci de prendre le temps de me répondre.

Je comprends ce que tu veux dire, l’utilisateur qui exécute le script de backup trouve Borg grâce à l’emplacement dans le script. Mais effectivement, je pense que c’est l’utilisateur sur le serveur qui reçoit le backup qui ne trouve pas borg.

Si je me connecte sur le serveur qui reçoit le backup :

userA@serveurB:~$ borg --help
bash: borg: command not found

userA@serveurB:~$ borg="/var/www/borg/venv/bin/borg"

userA@serveurB:~$ $borg --help
bash: /var/www/borg/venv/bin/borg: Permission denied

Or, ce userA peut seulement lancer la commande “borg serve”

userA@serveurB:~$ cat /home/userA/.ssh/authorized_keys 
command="borg serve --storage-quota 1000G --restrict-to-repository /home/fagus/backup",no-pty,no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-user-rc ssh-ed25519 A(...)i root@serveurA.be

(Je ne sais pas si l’installation fait toujours ça ou si c’est quelque chose qui ne se fait plus ? Dans mes notes, c’était bien géré par l’installation de borg-server.)

Je remarque que ça a été discuté sur github :

Je remarque aussi que la documentation semble avoir été migrée vers la dépôt github de l’application :

Mais ça n’explique pas vraiment mon problème.

J’ai posé une issue sur le github :

J’ai finalement essayé de redonner les accès à borg pour l’utilisateur distant :

root@serverB:~# groups userA
userA : userA ssh.app

root@serverB:~# id userA
uid=1001(userA) gid=1001(userA) groups=1001(userA),1002(ssh.app)

root@serverB:~# usermod -a -G borg userA

root@serverB:~# id userA
uid=1001(userA) gid=1001(userA) groups=1001(userA),993(borg),1002(ssh.app)

root@serverB:~# su userA

userA@serverB:~$ borg="/var/www/borg/venv/bin/borg"

userA@serverB:~$ $borg --help
usage: borg [-V] [-h] [--critical] [--error] [--warning]
            [--info] [--debug] [--debug-topic TOPIC] [-p]
            (...)

L’utilisateur “userA” sur le “serverB” peut maintenant lancer borg :

userA@serverB:~$ borg="/var/www/borg/venv/bin/borg"
userA@serverB:~$ $borg list /home/userA/backup/
(...)
_auto_conf-2024-05-31_00:00          Fri, 2024-05-31 00:00:38 [5f9....50d0]
(...)

J’ai encore modifié la commande dans authorized_keys :

$ cat /home/userA/.ssh/authorized_keys
command="/var/www/borg/venv/bin/borg serve --storage-quota 1000G --restrict-to-repository /home/userA/backup",no-pty,no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-user-rc ssh-ed25519 AA(...)8i root@serverA.be

J’ai ensuite relancé le service borg sur le serveur A :

$ sudo systemctl start borg &

$ sudo systemctl status borg
● borg.service - Run backup borg
     Loaded: loaded (/etc/systemd/system/borg.service; static)
     Active: activating (start) since Wed 2024-07-24 08:04:55 UTC; 14min ago
     (...)

J’ai voulu vérifier sur le serveurB :

$ $borg list /home/userA/backup/
Failed to create/acquire the lock /home/userA/backup/lock.exclusive (timeout).

$ ls -alh /home/userA/backup/data | grep "Jul 24"
drwx------   3 userA userA 4.0K Jul 24 08:27 ..
drwx------   2 userA userA  12K Jul 24 08:26 119

$ du -sh /home/userA/backup/
596G	/home/userA/backup/

#un peu plus tard:
$ du -sh /home/userA/backup/
597G	/home/userA/backup/

On dirait qu’il se passe un truc en tout cas. :crossed_fingers:

[edit: Après 3h, le backup tourne toujours. Tout semble bien se passer.

Ça marche, j’ai bien à nouveau des backups journaliers qui arrivent sur les deux serveurs. J’ai juste peur que ça ne fonctionne à nouveau plus lors de la prochaine mise à jour… :worried:

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