gérer les parameters user Unix sur plusieurs machines

J'ai plusieurs machines Linux différentes avec des "profils" similaires. Je veux garder mes parameters synchronisés. par exemple vimrc , zshrc J'ai le problème qu'il y a différentes dissortingbutions de Linux avec diverses configurations et versions de logiciels, par exemple certaines avec un système de fenêtrage, d'autres non, Certaines ont Zsh, d'autres non, d'autres ont des versions différentes. Je réalise que je pourrais dropbox, ou github, etc, mes parameters. Mais comme l'environnement est devenu plus complexe cela est devenu plus difficile (je l'ai déjà Github). Je trouve également difficile de synchroniser chaque machine. Ce sont principalement des machines clientes, avec des connections Internet différentes (et des réseaux différents, par exemple un certain bureau à domicile, donc "push" à la machine ne fonctionnera pas pour garder la synchronisation.Je ne m'attends pas à ce qu'une solution détecte automatiquement mon code, Par exemple, zshrc est incompatible avec une ancienne version, mais il serait bon de laisser entendre les choses en tant que telles afin qu'elles ne soient pas synchronisées, peut-être un model.

Y a-t-il des solutions existantes qui pourraient m'aider à résoudre ce problème?

Je peux vous dire ce que je fais. Cela peut ou ne peut pas être la meilleure option pour vous, selon les programmes pour lesquels vous avez des files de configuration, la variation entre les machines et la quantité d'effort que vous préférez pour écrire des files de configuration portables par rapport à la duplication de maintenance entre les versions ou des files par site.

Tous mes files de configuration sont sous contrôle de version. J'utilise CVS, ce qui est tout à fait suffisant pour la tâche, mais si vous commencez maintenant (par opposition à l'inverse quand Linus ne croyait pas au contrôle de version), vous pouvez utiliser un autre système de contrôle de version. Le contrôle de version est toujours bon, que vous ayez plusieurs caisses. Pour synchroniser une modification entre les sites, je valide et met à jour.

Je m'efforce d'écrire des files portables. Par exemple, mon .zshrc est supposé être compatible avec toutes les versions depuis la version 2.5 (mais c'est un peu étirant: je ne l'ai pas testé récemment, et la dernière fois que je l'ai chargé sur une machine avec zsh 2.5, c'était vraiment lent). Cela signifie que j'ai beaucoup de choses comme if type someprogram >/dev/null 2>/dev/null et une case $ZSH_VERSION (quand je ne peux pas l'éviter). Il en va de même pour les autres programmes dont le file de configuration est un langage interprété (bash, Emacs, Vim, Fvwm, Sawfish, …). Je ne voulais pas conserver des versions séparées de ces files, de sorte que chaque définition dépendant de la version est sous une déclaration conditionnelle. Si vous voulez garder le désarroi (au désortingment de soutenir less de combinaisons), vous pouvez faire quelque chose comme

 case $ZSH_VERSION in [5-9]*|4.[2-9].*) . ~/.zshrc-42;; 4.[01].*) . ~/.zshrc-40;; 3.1.[6789]) . ~/.zshrc-31;; *) . ~/.zshrc-2;; esac 

Mais il existe d'autres dependencies du système (par exemple, la version de ls pour savoir s'il faut l'alias à gnuls --color -b ou ls --color -b ou colorls -G ou ls -Fb ou …). Diviser tout en files séparés devient fastidieux assez rapidement.

Je garde un directory par site avec les parameters par site, qui sont chargés par le file principal. Par exemple, mon .zshrc contient les lignes

 if [ -r ~/Here/lib/shell/local.zshrc ]; then . ~/Here/lib/shell/local.zshrc fi 

Here un lien symbolique vers un directory contenant des files de configuration spécifiques au site. Il n'existe pas sur les sites que je n'ai pas personnalisés. Le .zshrc local .zshrc contient généralement des alias, des alias de directory et autres. La plupart des sites ont un .profile local qui définit quelques variables d'environnement. Toutes les configurations spécifiques à un site sont sous le même système de contrôle de version (il suffit de quelques kilos supplémentaires pour les vérifier).

Quelques files sont générés automatiquement par un makefile. Par exemple, j'ai un script pour générer ~/.ssh/config partir d'une list commune d'hôtes (alias et options pour les machines joignables de n'importe où) et d'une list d'hôtes spécifique au site.

En général, dans le monde unix, lorsque vous souhaitez synchroniser ces éléments sur plusieurs hôtes (dans le même environnement), utilisez auto_home (assemblys automatiques) pour monter votre directory personnel entre les hôtes.

Donc, si tous vos hôtes sont sur le même réseau, cela pourrait bien fonctionner pour vous.

Sinon, vous pouvez configurer un server maître et périodiquement rsync vos files homedir (.bash_profile, .vimrc etc) aux hôtes cibles.