Journal Versionner ses fichiers de config

Posté par (page perso) . Licence CC by-sa
9
17
sept.
2012

Récemment, je me suis rendu compte de ce que j'avais plein de trucs installés que je devais mettre à jour à la main ; Des scripts, des utilitaires divers pour lesquels il n'existe qu'un dépot VC.

Par ailleurs, j'ai besoin d'être sur, sur chacune de mes machines, que l'environnement est à jour, du .zshrc à la liste des paquets que j'utilise.

Kituu est mon script d'install et de babysitting de toutes ces choses, il se télécharge/installe en une commande, et peut ensuite être lancé régulièrement (il n'est toutefois pas conçu pour être lancé de façon non-interactive, j'aime savoir quand même un peu ce qui se passe, mais je vais tout de même implémenter un argument "-y" (accepter toutes les réponses par défaut) une de ces quatre aurores).

Il y a plusieurs écoles sur le versionnage des fichiers de config, mon approche est de faire un lien symbolique dans mon répertoire personnel, de tous les fichiers du répertoire du projet. Donc si demain je veux versionner mon ~/.mailcap, je le copie dans le répertoire (~/.kituu) et il est maintenant synchronisé. (NB J'appelle de mes vœux le temps où tous les fichiers de config seront rangés dans ~/.config, ça rendra toutes ces contingences plus… Harmonieuses)

Ce script fait essentiellement trois choses :

  • Le travail de ménage que je veux voir fait sur toutes les machines (créer un ~/tmp, etc.).
  • L'installation de paquets, rangés par groupes (outils de compilation, outils, réseau, jeux, etc.).
  • L'installation et la mise à jour subséquente de divers trucs présents sur des dépots - git, bzr, svn, que sais-je - rangés eux aussi par groupe (Lisp, Perl, Python, etc.).
  • # Hmm

    Posté par (page perso) . Évalué à 3.

    Et pourquoi ne pas utiliser Puppet ou CFengine ?

    • [^] # Re: Hmm

      Posté par . Évalué à 5.

      Puppet, cfengine, fabric et autres sont des solutions d'administrateurs système et/ou réseau. Quand on a des machines qui ne sont pas sur le même réseau (la machine du boulot, des chez soit, celle chez les parents, l'ordinateur portable, le serveur loué chez un prestataire, etc), ces solutions ne sont pas adaptées.

      Perso pour moi c'est aussi une problématique importante. J'ai déjà décidé de la solution, il y a plus qu'à l'implémenter quand le courage me viendra : créer des paquets debian qui font le boulot et avoir mon propre dépôt. Toutes mes machines sont sous debian donc ça va bien et elle sont toutes mono-utilisateurs (et je suis administrateur de chacune).

      Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

      • [^] # Re: Hmm

        Posté par . Évalué à 4.

        CFEngine s'utilise très bien en mode non connecté : il suffit de lancer cf-agent avec le fichier de "promesses" en argument, et hop, le boulot est fait… (installation de packages, édition de fichiers de conf, etc)
        La partie réseau sert en fait simplement à distribuer les promesses à un ensemble de machines, mais on peut très bien le faire avec NFS, rsync, git, copier/coller, …

  • # ~/.config

    Posté par (page perso) . Évalué à 2.

    (NB J'appelle de mes vœux le temps où tous les fichiers de config seront rangés dans ~/.config, ça rendra toutes ces contingences plus… Harmonieuses)

    Ah, tiens, je croyais être seul. Le home est un tel maelström de dossiers dans tous les sens que j'ai cherché en vain un moyen de faire pointer tous les appels de ~/.* vers ~/.config/.*, quitte à avoir un .config dans .config.

    Si quelqu'un à une solution, il aura le droit à une nimage non discriminante.

  • # Regedit

    Posté par . Évalué à 4.

    J'appelle de mes vœux le temps où tous les fichiers de config seront rangés dans ~/.config, ça rendra toutes ces contingences plus… Harmonieuses

    Effectivement c'est assez pénible, je me suis récemment "amusé" à scruter les fichiers cachés de mon répertoire personnel (plusieurs années d'utilisation) et j'ai dû me retenir de vomir.

    • [^] # Re: Regedit

      Posté par (page perso) . Évalué à 4.

      Wai, enfin 3000 fichiers cachés dans ~ ou 3000 fichiers dans ~/.config …

      • [^] # Re: Regedit

        Posté par . Évalué à 2.

        Les 42k fichiers dans ~/.config c'est beaucoup plus facile de les gicler par inadvertance avec un rm -rf mal placé ^^

      • [^] # Re: Regedit

        Posté par (page perso) . Évalué à 5. Dernière modification le 17/09/12 à 20:05.

        Trois exemples :

        Sauvegarder toutes mes configurations, et uniquement mes configurations, sur OS X :
        cp -R ~/Library/Preferences /Backup
        Sauvegarder toutes mes configurations, et uniquement mes configurations, sur Linux :
        cp -R ~/.zshrc ~/.vimrc ~/.vim ~/.bashrc ~/.profile ~/.ssh ~/.subversion ~/.viminfo ~/.gitconfig […] /Backup
        Si jamais j'ajoute un logiciel, je dois identifier le fichier à ajouter, et l'ajouter à la liste. Et accessoirement, ne pas mettre les fichiers de cache dans la liste, mais je n'ai aucun moyen de le savoir sans examiner les fichiers.

        Versionner toutes mes configurations, et uniquement mes configurations, sur OS X :
        svn co https://monserveur/config ~/Library/Preferences

        Versionner toutes mes configurations, et uniquement mes configurations, sur Linux :
        svn co https://monserveur/config ~/.configurations
        ln -s ~/.configuration/vimrc ~/.vimrc
        ln -s ~/.configuration/bashrc ~/.bashrc
        ln -s ~/.configuration/profile ~/.profile
        […]

        J'exagère un peu, pour la simple raison que les outils UNIX historiques sur OS X ont leurs préférences en ~/.* :(

        De plus, je ne comprends pas pourquoi un fichier de préférences devrait être caché à l'utilisateur.

        • [^] # Re: Regedit

          Posté par (page perso) . Évalué à 4.

          « […] pourquoi un fichier de préférences devrait caché à l'utilisateur. »

          Le nom est peut-être trompeur. Ces fichiers sont seulement invisibles par défaut. Plutôt que de les cacher, l'idée est peut-être de ne pas distraire l'utilisateur lorsqu'il vaque à ses tâches quotidiennes et de ne les faire apparaître qu'en cas de besoin ?

          • [^] # Re: Regedit

            Posté par . Évalué à 1.

            moi je sauvegarde mon répertoire avec rdiffbackup … un fichiers ou 280000 de plus … rien à faire …c'est quoi cette lubie de ne sauvegarder que les fichiers de config ? Vous n'avez jamais de données ? En plus vu le poids des fichiers de config …

            enfin bon, chacun voit midi à sa porte …

            • [^] # Re: Regedit

              Posté par . Évalué à 3.

              c'est quoi cette lubie de ne sauvegarder que les fichiers de config ?

              Ce n'est pas parce que l'on parle de sauvegarder les fichiers de config qu'on ne sauvegarde pas les données. Pour moi ce sont 2 sauvegardes différentes.
              Tu peut vouloir restaurer l'un sans restaurer l'autre (avoir les même config' sur plusieurs compte de la même machine ou sur des machines qui n'ont pas le même usage (boulot, maison, serveur)).

              Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

            • [^] # Re: Regedit

              Posté par (page perso) . Évalué à 1.

              Je ne veux pas sauvegarder mes fichiers de config au même endroit, ne serait-ce que parce que je veux pouvoir répliquer facilement mes config sur toutes les machines que j'utilise, pas mes données.
              De plus, je ne veux pas que les fichiers de cache (genre l'historique web, les calendriers CalDAV, …) soient recopiés sur une autre machine.

        • [^] # Re: Regedit

          Posté par (page perso) . Évalué à 2. Dernière modification le 18/09/12 à 10:04.

          Moi j'aurais dit:
          cp -ax ~/.[a-z]* /Backup

          • [^] # Re: Regedit

            Posté par (page perso) . Évalué à 2.

            gnumdk > Non, avec ça tu ne sais pas ce que tu sauvegardes (je ne veux pas mon historique zsh, ni les fichiers de cache de certaines applications, …). Je ne veux que les config, pas l'historique web ou mes mails qui sont en IMAP (et les applications risquent de ne pas être contentes si on commence à modifier leurs fichiers internes)

  • # Extensions Mozilla

    Posté par (page perso) . Évalué à 2.

    J'ai oublié (on ne peut pas éditer un journal ?) le script gère aussi l'installation des extensions Mozilla dont j'ai besoin.
    Ce dernier (Mozilla) se charge de les mettre à jour.

  • # Ma méthode à moi (avec Subversion)

    Posté par (page perso) . Évalué à 2.

    Ah oui, il y a plusieurs écoles. Moi, je mets tout dans un dépôt Subversion. Toute la difficulté est de gérer les légères différences qu'il y a forcément entre machines :

    http://www.bortzmeyer.org/home-in-subversion.html

    • [^] # Re: Ma méthode à moi (avec Subversion)

      Posté par (page perso) . Évalué à 0.

      Oui, c'est pour ça qu'il y a des switchs "Y/n" à chaque famille de paquets, comme ça si j'installe une machine de production audio, qui nécessite une liste de packages bien précis, je réponds juste "yes" (Return, c'est l'option par defaut) à la question "Install packages (audio prod) ?"

      Bon, la "granularité" du systeme n'est pas totale, pour éviter un trop grand nombre de questions, donc oui, je versionne chaque fichier en me posant la question "est-ce que je veux vraiment ce truc/systeme/config sur chacune de mes machines ?" et la réponse est parfois non.

      Après les autres choses installées, dotfiles et autres scripts, ne sont pas d'assez bas niveau pour poser des problèmes de disparité matérielle (en fait cet environnement tourne même sur mon téléphone N900 :) ).

      Un truc comme les extensions Mozilla (Firefox & Thunderbird) c'est bète mais à un moment j'en ai eu marre de chercher "firebug" dans google et de cliquer à travers 4 pages/popups d'install (ou encore pire/plus de clics, le dictionnaire en français) et j'ai décider de standardiser la procédure. Ce n'est pas parfait mais je n'ai pas trouvé mieux que de générer une mini page web à la volée pointant directement vers les .xpi des extensions, que Firefox se charge de mettre à jour. Ca réduit drastiquement le nombre de clics, et ça évite d'en oublier.

      Récemment j'y ai rajouté mes scripts greasemonkey (qui sont versionnés aussi) donc je peux les éditer sur chaque machine, c'est vraiment pratique.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.