Rdiff-backup : fonctionne partiellement depuis la mise à jour vers Debian 12

Bonjour,

J’ai deux machines. J’en ai une qui est sous Debian 11 (Crossbow) et une qui était sous Debian 10 et que j’ai réinstallé sous Debian 12 cette semaine (Worm).
La machine sous Debian 11 exécute des tâches planifiées de sauvegarde basées sur rdiff-backup, elle récupère les sauvegarde dans un stockage local puis, dans un second temps, utilise rdiff-backup pour envoyer une copie de ces sauvegardes vers la machine que j’ai réinstallée sous Debian 12.

Suite à la réinstallation de la machine sous Debian 12, la seconde partie fonctionne sans aucun problème, mais plus la première partie.
En fait, la machine sous Debian 11 ne peut plus sauvegarder la machine sous Debian 12, j’ai lancé la tâche à la main et voilà le retour que j’ai :

┌ (almtesh@Crossbow + 0) (31/08/23 - 12:06:13) (2.94 - 0%) (~)
└% sudo /usr/bin/rdiff-backup --exclude /mnt/home/almtesh/Sync --exclude /mnt/home/almtesh/Temporaire --exclude /mnt/home/almtesh/.local/share/wineprefixes --exclude /mnt/home/almtesh/.steam --exclude /srv/netboot/systems --exclude /var/cache --exclude /var/log --exclude /var/tmp --include /etc --include /home --include /mnt/home/almtesh --include /opt --include /root --include /srv --include /var --exclude / --verbosity 5 worm.home.almtesh.net::/ /mnt/save/hosts/worm.home.almtesh.net
WARNING: this command line interface is deprecated and will disappear, start using the new one as described with '--new --help'.
* Sending back exception ''restrict_path'' of type <class 'KeyError'> with traceback   File "/usr/lib/python3/dist-packages/rdiff_backup/connection.py", line 474, in _answer_request
    result = eval(request.function_string)(*argument_list)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/rdiff_backup/Globals.py", line 298, in get
    return globals()[name]
           ~~~~~~~~~^^^^^^

Warning: Local version 2.0.5 does not match remote version 2.2.2.
Exception ''restrict_path'' raised of class '<class 'KeyError'>':
  File "/usr/lib/python3/dist-packages/rdiff_backup/Main.py", line 395, in error_check_Main
    Main(arglist)
  File "/usr/lib/python3/dist-packages/rdiff_backup/Main.py", line 415, in Main
    final_set_action(rps)
  File "/usr/lib/python3/dist-packages/rdiff_backup/Main.py", line 301, in final_set_action
    if restore_set_root(rps[0]):
  File "/usr/lib/python3/dist-packages/rdiff_backup/Main.py", line 855, in restore_set_root
    if parent_dir.path == rpin.conn.Globals.get('restrict_path'):
  File "/usr/lib/python3/dist-packages/rdiff_backup/connection.py", line 526, in __call__
    return self.connection.reval(*(self.name, ) + args)
  File "/usr/lib/python3/dist-packages/rdiff_backup/connection.py", line 439, in reval
    raise result

Using rdiff-backup version 2.0.5
        with cpython /usr/bin/python3 version 3.9.2
        on Linux-5.10.0-25-amd64-x86_64-with-glibc2.31, fs encoding utf-8
Executing ssh -C worm.home.almtesh.net rdiff-backup --server
Traceback (most recent call last):
  File "/usr/bin/rdiff-backup", line 32, in <module>
    rdiff_backup.Main.error_check_Main(sys.argv[1:])
  File "/usr/lib/python3/dist-packages/rdiff_backup/Main.py", line 395, in error_check_Main
    Main(arglist)
  File "/usr/lib/python3/dist-packages/rdiff_backup/Main.py", line 415, in Main
    final_set_action(rps)
  File "/usr/lib/python3/dist-packages/rdiff_backup/Main.py", line 301, in final_set_action
    if restore_set_root(rps[0]):
  File "/usr/lib/python3/dist-packages/rdiff_backup/Main.py", line 855, in restore_set_root
    if parent_dir.path == rpin.conn.Globals.get('restrict_path'):
  File "/usr/lib/python3/dist-packages/rdiff_backup/connection.py", line 526, in __call__
    return self.connection.reval(*(self.name, ) + args)
  File "/usr/lib/python3/dist-packages/rdiff_backup/connection.py", line 439, in reval
    raise result
KeyError: 'restrict_path'
* Cleaning up
Traceback (most recent call last):
  File "/usr/bin/rdiff-backup", line 33, in <module>
    sys.exit(load_entry_point('rdiff-backup==2.2.2', 'console_scripts', 'rdiff-backup')())
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/rdiffbackup/run.py", line 37, in main
    sys.exit(main_run(sys.argv[1:]))
             ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/rdiffbackup/run.py", line 105, in main_run
    ret_val |= conn_act.run()
               ^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/rdiffbackup/actions/server.py", line 66, in run
    sys.stdout.buffer).Server()
                       ^^^^^^^^
  File "/usr/lib/python3/dist-packages/rdiff_backup/connection.py", line 405, in Server
    self._get_response(-1)
  File "/usr/lib/python3/dist-packages/rdiff_backup/connection.py", line 449, in _get_response
┌ (almtesh@Crossbow + 1) (31/08/23 - 12:06:16) (2.94 - 0%) (~)
└%     req_num, object = self._get()
                      ^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/rdiff_backup/connection.py", line 296, in _get
    raise ConnectionReadError(
rdiff_backup.connection.ConnectionReadError: Truncated header <b''> (problem probably originated remotely)

Je vois bien les deux avertissements

WARNING: this command line interface is deprecated and will disappear, start using the new one as described with '--new --help'.

et

Warning: Local version 2.0.5 does not match remote version 2.2.2.

mais ce sont des avertissements qui doivent probablement aussi apparaître pour la copie des sauvegardes entre les deux machines.

D’autre part, j’ai essayé de voir pour changer la version de rdiff-backup sur les deux machines, mais la version de Debian 11 ne fonctionne pas sous Debian 12 et la version de Debian 12 ne fonctionne pas sous Debian 11 et il n’existe pas de backports qui peut faire correspondre les deux versions. Il faudrait changer la version de Python pour ça, ce qui veut dire modifier les versions d’une grande quantité de paquets.

Est-ce que quelqu’un a une idée ?

c’est pas pénalisant pour le moment et n’empêche pas rdiff-backup d’être utilisé
un rdiff-backup --new --help vous aidera à fair ela transition.

Pour la diffénce de version regardez ici à REMOTE OPERATION il y a une explication
https://rdiff-backup.net/rdiff-backup.1.html

J’ai lu la section, j’ai donc ajouté l’option --remote-schema 'ssh -C %s rdiff-backup server' à ma ligne de commande :

┌ (almtesh@Crossbow + 0) (31/08/23 - 17:17:27) (1.01 - 0%) (~)
└% sudo /usr/bin/rdiff-backup --remote-schema 'ssh -C %s rdiff-backup server' --exclude /mnt/home/almtesh/Sync --exclude /mnt/home/almtesh/Temporaire --exclude /mnt/home/almtesh/.local/share/wineprefixes --exclude /mnt/home/almtesh/.steam --exclude /srv/netboot/systems --exclude /var/cache --exclude /var/log --exclude /var/tmp --include /etc --include /home --include /mnt/home/almtesh --include /opt --include /root --include /srv --include /var --exclude / --verbosity 5 worm.home.almtesh.net::/ /mnt/save/hosts/worm.home.almtesh.net
Warning: Permanently added the RSA host key for IP address '2a01:e0a:12c:3941:7285:c2ff:fed1:21dd' to the list of known hosts.
* Sending back exception ''restrict_path'' of type <class 'KeyError'> with traceback   File "/usr/lib/python3/dist-packages/rdiff_backup/connection.py", line 474, in _answer_request
    result = eval(request.function_string)(*argument_list)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/rdiff_backup/Globals.py", line 298, in get
    return globals()[name]
           ~~~~~~~~~^^^^^^

Warning: Local version 2.0.5 does not match remote version 2.2.2.
Exception ''restrict_path'' raised of class '<class 'KeyError'>':
  File "/usr/lib/python3/dist-packages/rdiff_backup/Main.py", line 395, in error_check_Main
    Main(arglist)
  File "/usr/lib/python3/dist-packages/rdiff_backup/Main.py", line 415, in Main
    final_set_action(rps)
  File "/usr/lib/python3/dist-packages/rdiff_backup/Main.py", line 301, in final_set_action
    if restore_set_root(rps[0]):
  File "/usr/lib/python3/dist-packages/rdiff_backup/Main.py", line 855, in restore_set_root
    if parent_dir.path == rpin.conn.Globals.get('restrict_path'):
  File "/usr/lib/python3/dist-packages/rdiff_backup/connection.py", line 526, in __call__
    return self.connection.reval(*(self.name, ) + args)
  File "/usr/lib/python3/dist-packages/rdiff_backup/connection.py", line 439, in reval
    raise result

Using rdiff-backup version 2.0.5
        with cpython /usr/bin/python3 version 3.9.2
        on Linux-5.10.0-25-amd64-x86_64-with-glibc2.31, fs encoding utf-8
Executing ssh -C worm.home.almtesh.net rdiff-backup server
Traceback (most recent call last):
  File "/usr/bin/rdiff-backup", line 32, in <module>
    rdiff_backup.Main.error_check_Main(sys.argv[1:])
  File "/usr/lib/python3/dist-packages/rdiff_backup/Main.py", line 395, in error_check_Main
    Main(arglist)
  File "/usr/lib/python3/dist-packages/rdiff_backup/Main.py", line 415, in Main
    final_set_action(rps)
  File "/usr/lib/python3/dist-packages/rdiff_backup/Main.py", line 301, in final_set_action
    if restore_set_root(rps[0]):
  File "/usr/lib/python3/dist-packages/rdiff_backup/Main.py", line 855, in restore_set_root
    if parent_dir.path == rpin.conn.Globals.get('restrict_path'):
  File "/usr/lib/python3/dist-packages/rdiff_backup/connection.py", line 526, in __call__
    return self.connection.reval(*(self.name, ) + args)
  File "/usr/lib/python3/dist-packages/rdiff_backup/connection.py", line 439, in reval
    raise result
KeyError: 'restrict_path'
┌ (almtesh@Crossbow + 1) (31/08/23 - 17:17:36) (0.93 - 0%) (~)
└% * Cleaning up
Traceback (most recent call last):
  File "/usr/bin/rdiff-backup", line 33, in <module>
    sys.exit(load_entry_point('rdiff-backup==2.2.2', 'console_scripts', 'rdiff-backup')())
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/rdiffbackup/run.py", line 37, in main
    sys.exit(main_run(sys.argv[1:]))
             ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/rdiffbackup/run.py", line 105, in main_run
    ret_val |= conn_act.run()
               ^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/rdiffbackup/actions/server.py", line 66, in run
    sys.stdout.buffer).Server()
                       ^^^^^^^^
  File "/usr/lib/python3/dist-packages/rdiff_backup/connection.py", line 405, in Server
    self._get_response(-1)
  File "/usr/lib/python3/dist-packages/rdiff_backup/connection.py", line 449, in _get_response
    req_num, object = self._get()
                      ^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/rdiff_backup/connection.py", line 296, in _get
    raise ConnectionReadError(
rdiff_backup.connection.ConnectionReadError: Truncated header <b''> (problem probably originated remotely)

Le retour d’erreur a l’air sensiblement analogue, je pense que j’ai dû me tromper quelque part ou que ce n’est pas le problème.

Faut indiquer le chemin de Rdiff-backup sur l’autre machine

For example, if you have rdiff-backup 2.1.5 and 2.2.1 installed in virtual environments on the server, respectively under ‹ /usr/local/lib/rdiff-backup-2.0 › and ‹ /usr/local/lib/rdiff-backup-2.1 › (we assume that the z-Version isn’t relevant to any kind of compatibility), then the client may be called with the following remote schema:
ssh -C {h} /usr/local/lib/rdiff-backup-{Vx}.{Vy} --server
The client will then use the correct version of rdiff-backup based on its own version ‹ x.y.z ›. You’ll find more explanations in the migration file in the documentation.

Soit, j’ai remplacé l’option --remote-schema par --remote-schema 'ssh -C %s /usr/bin/rdiff-backup --server' et je ne vois pas la moindre différence dans le résultat :

┌ (almtesh@Crossbow + 0) (31/08/23 - 17:29:47) (0.65 - 0%) (~)
└% sudo /usr/bin/rdiff-backup --remote-schema 'ssh -C %s /usr/bin/rdiff-backup --server' --exclude /mnt/home/almtesh/Sync --exclude /mnt/home/almtesh/Temporaire --exclude /mnt/home/almtesh/.local/share/wineprefixes --exclude /mnt/home/almtesh/.steam --exclude /srv/netboot/systems --exclude /var/cache --exclude /var/log --exclude /var/tmp --include /etc --include /home --include /mnt/home/almtesh --include /opt --include /root --include /srv --include /var --exclude / --verbosity 5 worm.home.almtesh.net::/ /mnt/save/hosts/worm.home.almtesh
.net
Warning: Permanently added the RSA host key for IP address '2a01:e0a:12c:3941:7285:c2ff:fed1:21dd' to the list of known hosts.
WARNING: this command line interface is deprecated and will disappear, start using the new one as described with '--new --help'.
* Sending back exception ''restrict_path'' of type <class 'KeyError'> with traceback   File "/usr/lib/python3/dist-packages/rdiff_backup/connection.py", line 474, in _answer_request
    result = eval(request.function_string)(*argument_list)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/rdiff_backup/Globals.py", line 298, in get
    return globals()[name]
           ~~~~~~~~~^^^^^^

Warning: Local version 2.0.5 does not match remote version 2.2.2.
Exception ''restrict_path'' raised of class '<class 'KeyError'>':
  File "/usr/lib/python3/dist-packages/rdiff_backup/Main.py", line 395, in error_check_Main
    Main(arglist)
  File "/usr/lib/python3/dist-packages/rdiff_backup/Main.py", line 415, in Main
    final_set_action(rps)
  File "/usr/lib/python3/dist-packages/rdiff_backup/Main.py", line 301, in final_set_action
    if restore_set_root(rps[0]):
  File "/usr/lib/python3/dist-packages/rdiff_backup/Main.py", line 855, in restore_set_root
    if parent_dir.path == rpin.conn.Globals.get('restrict_path'):
  File "/usr/lib/python3/dist-packages/rdiff_backup/connection.py", line 526, in __call__
    return self.connection.reval(*(self.name, ) + args)
  File "/usr/lib/python3/dist-packages/rdiff_backup/connection.py", line 439, in reval
    raise result

Using rdiff-backup version 2.0.5
        with cpython /usr/bin/python3 version 3.9.2
        on Linux-5.10.0-25-amd64-x86_64-with-glibc2.31, fs encoding utf-8
Executing ssh -C worm.home.almtesh.net /usr/bin/rdiff-backup --server
Traceback (most recent call last):
  File "/usr/bin/rdiff-backup", line 32, in <module>
    rdiff_backup.Main.error_check_Main(sys.argv[1:])
  File "/usr/lib/python3/dist-packages/rdiff_backup/Main.py", line 395, in error_check_Main
    Main(arglist)
  File "/usr/lib/python3/dist-packages/rdiff_backup/Main.py", line 415, in Main
    final_set_action(rps)
  File "/usr/lib/python3/dist-packages/rdiff_backup/Main.py", line 301, in final_set_action
    if restore_set_root(rps[0]):
  File "/usr/lib/python3/dist-packages/rdiff_backup/Main.py", line 855, in restore_set_root
    if parent_dir.path == rpin.conn.Globals.get('restrict_path'):
  File "/usr/lib/python3/dist-packages/rdiff_backup/connection.py", line 526, in __call__
    return self.connection.reval(*(self.name, ) + args)
  File "/usr/lib/python3/dist-packages/rdiff_backup/connection.py", line 439, in reval
    raise result
KeyError: 'restrict_path'
* Cleaning up
Traceback (most recent call last):
  File "/usr/bin/rdiff-backup", line 33, in <module>
    sys.exit(load_entry_point('rdiff-backup==2.2.2', 'console_scripts', 'rdiff-backup')())
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/rdiffbackup/run.py", line 37, in main
┌ (almtesh@Crossbow + 1) (31/08/23 - 17:31:07) (2.02 - 0%) (~)
└%     sys.exit(main_run(sys.argv[1:]))
             ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/rdiffbackup/run.py", line 105, in main_run
    ret_val |= conn_act.run()
               ^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/rdiffbackup/actions/server.py", line 66, in run
    sys.stdout.buffer).Server()
                       ^^^^^^^^
  File "/usr/lib/python3/dist-packages/rdiff_backup/connection.py", line 405, in Server
    self._get_response(-1)
  File "/usr/lib/python3/dist-packages/rdiff_backup/connection.py", line 449, in _get_response
    req_num, object = self._get()
                      ^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/rdiff_backup/connection.py", line 296, in _get
    raise ConnectionReadError(
rdiff_backup.connection.ConnectionReadError: Truncated header <b''> (problem probably originated remotely)

Probablement encore un truc que je n’ai pas compris.
Pour info :

┌ (almtesh@Worm + 0) (31/08/23 - 17:32:43) (0.12 - 0%) (~)
└% command -v rdiff-backup
/usr/bin/rdiff-backup
┌ (almtesh@Worm + 0) (31/08/23 - 17:32:45) (0.11 - 0%) (~)
└%

ce sont deux pc en local ou vraiment distant ?

en local j’utilise cette commande, epurer d’option pour explication, avec la nouvelle version:
rdiff-backup backup « quoi » user@192.168.1.10:://chemin de la sauvegarde

Je ne pense pas avoir compris ta question, mais j’ai une machine qui est un espace de sauvegarde secondaire, il serait totalement inutile de les mettre dans des endroits qui seraient trop proches, au risque de perdre les deux sauvegardes en même temps.

Alors, deux remarques sur ta proposition :

  1. La machine qui lance la sauvegarde est sous Debian 11 et n’a pas la version de rdiff-backup qui prend en charge les nouvelles options.
  2. Ton exemple concerne une action de sauvegarde d’un répertoire local vers un répertoire distant, et c’est justement ce qui fonctionne, c’est l’opération inverse qui me pose problème.

Ok donc
lieux n° 1 distant à sauvegarder a la version 2.0.5
lieux n°2 local qui sauvegarde a la version ? 2.2.2
–new fonctionne à partir de la v 2
Tu lance bien la cmd depuis le lieux n°1 ?
tu essaye r
diff-backup backup ton dossier_à_sauvegarder_du_lieu_n° 1 user_du_lieux_n°2@l_ip_du_lieux_n°2:://ton_dossier_de_sauvegarde_lieu_n°2

Pas du tout.
Crossbow est la machine sous Debian 11 qui lance toutes les tâches de sauvegarde, à savoir, se connecter à toutes les machines pour récupérer les modifications à l’aide de rdiff-backup 2.0.5 pour les sauvegarder localement, puis se connecter à la machine qui a la sauvegarde secondaire pour synchroniser les sauvegardes avec rdiff-backup aussi.
Worm est la machine sous Debian 12 qui reçoit la sauvegarde secondaire avec succès avec la version 2.2.2 de rdiff-backup depuis Crossbow.
Le problème qui survient, c’est que Worm est une machine qui est sauvegardée par le plan lancé par Crossbow, mais Crossbow, qui a la version 2.0.5 de rdiff-backup, n’arrive pas à récupérer les modifications de la part de Worm, qui a la version 2.2.2 de rdiff-backup.

Crossbow est donc le pc qui centralise les sauvegarde les autres pc dans un répertoire.
rdiff-backup user @pc1 vers Crossbow ok quelle version 2.2.2 ou 2.0.5
rdiff-backup user @pc2 vers Crossbow ok quelle version 2.2.2 ou 2.0.5
rdiff-backup Crossbow user @Worm ok version 2.2.2 vers 2.0.5
rdiff-backup user @Worm vers Crossbow erreur 2.0.5 vers 2.2.2

Testes juste avec un dossier de test de chaque coté

rdiff-backup backup ---exclude= ta liste --remote-schema 'ssh -C %s rdiff-backup-2.0.5 --server' -b /sourcedir user@serverhost::/backup-repo
adapte /sourcedir et user@serverhost::/backup-repo
ou celle-la plutôt

rdiff-backup backup ---exclude= ta liste --remote-schema 'ssh -C {h} rdiff-backup-{Vx}.{Vy} server' backup /sourcedir user@serverhost::/backup-repo

adapte backup /sourcedir et user@serverhost::/backup-repo
Voir dans /usr/share/doc/rdiff-backup/examples.adoc.gz

Alors, la version sur Crossbow est la 2.0.5, du coup, elle ne gère ni cette syntaxe pour les actions, ni cette syntaxe pour le schéma distant.
En plus, aucune machine n’a de programme rdiff-backup-2.0.5 connu.
Aucune de tes propositions ne fonctionnera.

tu as essayer ?
la version en bas c’est pour les 2.1 et plus
adapte celon ta version

Oui, c’est ce qui était recommandé par la page de manuel que tu as partagée dans ta première réponse.

Il n’y a rien à adapter, il n’y a QUE la version 2.0.5 sur Debian 11 et QUE la version 2.2.2 sur Debian 12. Ce sont les seules versions disponibles sur les machines respectives et je ne peux pas en installer d’autre. J’ai tenté avec une installation manuelle des paquets et via pip.

Bon, il n’y a pas de solution, je vais donc laisser ça en l’état en attendant que la machine sous Debian 11 soit migrée sous Debian 12. Merci pour ton aide.