Synchroniser automatiquement ses ordinateurs à l’aide d’une Raspberry Pi et d’un script bash utilisant rsync

Bonjour,

J’ai en ma possession  plusieurs ordinateurs. J’en ai quatre en fait :

  • Volgor, mon fidèle ordinateur de bureau,
  • une Raspberry Pi,
  • un netbook,
  • et une antiquité portable, à l’article de la mort.

Il m’arrive de travailler avec l’un ou l’autre, de créer un fichier sur Volgor, d’en effacer un sur mon netbook, d’importer des images sur ma Raspberry Pi. Bref, c’est devenu un véritable foutoir où je ne m’y retrouve plus, un boui-boui qui, je dois vous l’avouer, me fait grand honte.

J’ai donc décidé de remédier au problème en utilisant rsync, qui est un outil de synchronisation très utile.

Sélection_002

Une telle commande rsync exécute le travail à la perfection :

rsync -e ssh -av --delete-after --progress --exclude='.*/' --exclude='VirtualBox*' $HOME $USER@192.168.178.25:/home

Elle téléverse mon répertoire personnel sur ma Raspberry Pi, à l’exception des répertoires cachés et du répertoire VirtualBox.

Quant à cette commande, elle exécute l’opération inverse, c’est à dire qu’elle téléverse le répertoire personnel de ma raspberry Pi sur l’un de mes ordinateurs-cibles :

rsync -e ssh -av --delete-after --progress --exclude=".*/" $USER@192.168.178.25:$HOME /home

 

Mais comme je n’ai pas envie d’entrer ces deux commandes à chaque fois que j’allume mon ordinateur ou que je l’éteins, je me suis concocté un script bash pas piqué des hannetons qui effectue la synchronisation automatiquement, au démarrage et à l’extinction de l’ordinateur. Dans le mot « extinction », j’inclue également la déconnexion et le reboot.

Le script principal s’intitule rsync.sh. Il est constitué de deux blocs d’instructions,

  • un bloc qui s’exécute à l’extinction, si la variable value vaut 1.
  • un bloc qui s’exécute au démarrage, si la variable value vaut 0,

Si la variable value vaut 0, le fichier .config/openbox/autostart exécute le fichier rsync.sh et lance le second bloc d’instructions conditionnel qui téléverse les fichiers de la raspberry Pi sur l’ordinateur cible. La synchronisation s’effectue. Il en profite également pour incrémenter la variable value. Mon fichier openbox/autostart contient donc l’instruction suivante :

tilix -e "./Documents/config_files/synchronisation-automatique/rsync.sh" &

Maintenant,  la variable value vaut 1. Si je choisis d’éteindre l’ordinateur grâce au menu openbox (.config/openbox/menu.xml) qui apparait lorsque j’effectue un clic droit sur le bureau, cela exécute le fichier poweroff.sh qui ne contient que quelques lignes. Ce fichier incrémente la variable value au cas où celle-ci vaut 0. Normalement, ce n’est pas le cas mais cette situation peut se produire. C’est donc une mesure de sécurité pour éviter toute inversion du flux de synchronisation. La Raspberry Pi ne peut pas et ne doit pas téléverser des fichiers sur un ordinateur à l’extinction de ce dernier, car elle anéantirait toutes les modifications que vous auriez effectuées sur tel ou tel fichier! Et ça, c’est embêtant tout de même.

Sélection_004

Puis, ce même fichier poweroff.sh modifie la valeur de la variable quit. Celle-ci contient désormais la chaîne de caractères poweroff. Il en résulte que c’est le premier bloc d’instructions qui s’exécute. Il téléverse les fichiers ayant été modifiés, sur la Raspberry Pi. La synchronisation s’effectue. Il décrémente la variable value, de telle sorte qu’au démarrage d’un de mes ordinateurs, ce soit le second bloc d’instructions qui s’exécute. Puis, comme quit=poweroff, il éteint l’ordinateur.

Si je me déconnecte ou que je reboote, le fichier .config/openbox/menu.xml exécute log_out.sh ou reboot.shVoici le contenu de mon fichier .config/openbox/autostart et le contenu de mon fichier .config/openbox/menu.xml. Dans ce fichier, j’ai modifié les lignes 236, 244 et 260. Le menu est en allemand. herunterfahren signifie éteindre, abmelden signifie se déconnecter et neustarten signifie redémarrer.

Certes, il me reste des améliorations à apporter car le script est dépendant d’openbox alors que je souhaiterais qu’il fonctionne sur n’importe quelle configuration Linux, mais dans l’ensemble, je suis vraiment satisfait du résultat.

Sélection_005

Schéma de principe

 

 

8 commentaires sur “Synchroniser automatiquement ses ordinateurs à l’aide d’une Raspberry Pi et d’un script bash utilisant rsync

Ajouter un commentaire

  1. Salut si tous tes ordinateurs tournent avec systemd, sache que je viens récemment de découvrir le mode user de systemd : des fichiers service placés dans le répertoire ~/.config/systemd/user seront interprétés, une fois ‘systemctl -user enable ….’, en fonction des conditions fixées :
    par exemple j’ai un backup basé sur un timer :
    fichier backup.service :

    [Unit]
    Description=borgmatic backup

    [Service]
    Type=oneshot
    ExecStart=/usr/local/bin/borgmatic

    fichier backup.timer :
    [Unit]
    Description=Run borgmatic backup

    [Timer]
    OnCalendar=Wed 19:00
    Persistent=true

    [Install]
    WantedBy=timers.target

    ainsi qu’une synchronisation de clé USB, à l’insertion de celle-ci :
    Synchro.service
    [Unit]
    Description=synchro clé USB
    Requires=run-media-USER-NOMDECLÉUSB.mount
    After=run-media-USER-NOMDECLÉUSB.mount

    [Service]
    ExecStart=/path/to/scriptdesynchro.sh

    [Install]
    WantedBy=run-media-USER-NOMDECLÉUSB.mount

    La conf des fichiers service est relativement simple : Je pense qu’il doit y avoir moyen de faire des déclenchements au login et au logoff.

    Aimé par 1 personne

    1. Salut,

      Merci pour le conseil, Je vais regarder ça de plus près car ça me semble interessant. J’ai déjà utilisé une fois systemd/user avec un fichier bash juste pour voir ce que ça donnait donc je pense que ce ne devrait pas être trop compliqué.
      Cordialement.

      J'aime

  2. Salut,
    Je pense qu’une configuration différente (je ne sais pas dire si c’est plus simple ou plus complexe) serait d’avoir un serveur Nextcloud sur le raspberry et des clients associés sur les autres postes. Cela permet d’avoir les synchro quasiment en directe et d’intégrer une téléphone portable.

    J'aime

    1. Salut,

      Merci. C’est aussi une possiblité qui mérite d’être creusée. Dans mon article, je sais que d’une certaine manière, je ne fais que réinventer la roue. Mais j’ai fait ça juste pour le plaisir de coder et de bricoler quelque chose fait maison, à l’aide d’une Raspberry Pi. Ça entretient les neurones! 🙂
      Cordialement,
      Benoît.

      J'aime

    1. Bonjour Yves,

      Je ne connais pas mais je vais m’y intéresser. Le billet que j’ai rédigé, décrit un programme bash fait maison. Rien d’extraordinaire mais il me sufit pour synchroniser mes ordinateurs sans perte de données.

      J'aime

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

Créez un site ou un blog sur WordPress.com

Retour en haut ↑

%d blogueurs aiment cette page :