Propager son home
Niveau :
Résumé :
Aujourd'hui nous allons mettre en valeur deux articles précédents. J'espère que vous avez déjà mis votre home sous un système de suivi de version pour suivre ses évolutions. J'ai déjà décrit à dans un article précédent. En résumé :
$ cd $ git init $ git add .bashrc # et tout ce que vous voulez $ git commit
Le but étant de propager tout cela automatiquement sur différentes machines. Il est difficile de toujours penser à mettre a jour lorsqu'on fait une modification. C'est pourquoi nous allons mettre à profit l'article précédent et intercepter ssh. Grâce à cela le home de toutes nos machines seront à jour sans qu'on ait à s'en préoccuper.
Mise en place
Cette fois nous allons modifier le script en question pour lancer automatiquement une mise à jour de git de façon furtive à chaque connexion ssh. La méthode run était prévue pour :
# test permettant de savoir qu'on est bien sur le bon dépôt git pour les mises à jour (id du premier commit) MASTER=11edf02e95ceac1fa58d4444f82f8cd4ae9c1cf5 # command tu run via the ssh socket run() { # no test if running init if [ "$MASTER" != "" ] then # test if distant has OUR git ssh -S "$1" XXX '[ -e /usr/bin/git ] && [ -d .git ] && git rev-list --reverse master 2>/dev/null | head -1' | grep "$MASTER" > /dev/null else ssh -S "$1" XXX '[ -e /usr/bin/git ]' fi if [ $? -eq 0 ] then # if yes push updates tmp=$(mktemp ~/.sshgit.XXXXXX) echo "#!/bin/sh" > $tmp echo "exec ssh -S $1 "$@"" >> $tmp chmod +x $tmp GIT_SSH=$tmp git push --all ssh://XXX/~ > /dev/null 2> /dev/null rm -f $tmp ssh -S "$1" XXX 'git checkout -f > /dev/null' fi }
De plus j'ai ajouté un paramètre spécial permettant d'initialiser le dépôt de la machine en face. En effet, on ne va pas forcer la mise à jour si le home en face n'a pas de dépôt, il se peut que l'utilisateur ne le veuille pas. C'est aussi pour ce qu'on vérifie que le dépôt git utilisé contient bien le bon commit initial.
ssh -S "$2" XXX '[ -e /usr/bin/git ] && [ ! -d .git ] && git init > /dev/null'
Usage
Pour que ça fonctionne on ajoute un alias et tant qu'à faire, on ajoute le script au dépôt :
$ alias ssh='~/.sshgit' # à mettre aussi dans le .bashrc $ git add .sshgit $ git commit
Et maintenant on initialise la machine en face :
$ ssh -= autremachine.net
Et voila, tout ssh ultérieur résultera en un git push suivi d'un git checkout, plus besoin de réfléchir. Ce qui veut dire qu'au fur et à mesure de vos ssh votre home se propagera un peu partout, que le réseau où vous êtes soit privé ou non car c'est la connexion normale du ssh qui est empruntée. Reste juste à faire un ssh de temps en temps un peu partout pour mettre à jour :-)
Autre
Si vous n'avez pas git sur toutes les machines, vous pouvez aussi utiliser autre chose pour synchroniser automatiquement vos home. rsync par exemple (regardez l'option -u pour les mises à jour) ou scp.
Mais pour le coup je vous laisse écrire la méthode :)
Tags:Commande, planet-libre, Ssh