gerencia as configurações do usuário unix em várias máquinas

5

Eu tenho muitas máquinas linux diferentes com "perfis" semelhantes. Quero manter minhas configurações em sincronia. por exemplo, vimrc , zshrc ,. Eu tenho o problema que eles são várias distribuições do Linux com várias configurações e versões de software, por exemplo, alguns deles com um sistema de janelas, alguns não, alguns têm Zsh, outros não, alguns têm versões variadas do mesmo. Eu percebo que eu poderia dropbox, ou github, etc, minhas configurações. Mas como o ambiente se tornou mais complexo, isso se tornou mais difícil (eu já o Github). Eu também acho desafiador manter cada máquina em sincronia. Estas são principalmente máquinas clientes, com conexões de internet diferentes (e redes diferentes, por exemplo, algumas em casa, em algum escritório, então "empurrar" para a máquina não funcionará para manter em sincronia. Eu não espero que uma solução detecte automaticamente o meu código, Por exemplo, zshrc é incompatível com uma versão antiga, mas seria bom sugerir as coisas como tal para que elas não sejam sincronizadas, talvez um modelo.

Existe alguma solução existente que possa me ajudar a resolver esse problema?

    
por xenoterracide 26.11.2012 / 23:46

2 respostas

2

Eu posso te dizer o que faço. Isso pode ou não ser a melhor opção para você, dependendo de quais programas você possui arquivos de configuração, quanta variação existe entre máquinas e quanto esforço você prefere colocar na gravação de arquivos de configuração portáteis versus duplicar a manutenção entre as versões ou arquivos por site.

Todos os meus arquivos de configuração estão sob controle de versão. Eu uso o CVS, o que é perfeitamente suficiente para a tarefa, mas se você está começando agora (ao contrário de quando Linus não acredita em controle de versão), você pode usar outro sistema de controle de versão. O controle de versão é sempre bom, independentemente de você ter vários check-outs. Para sincronizar uma modificação entre sites, eu confirmo e atualizo.

Eu me esforço para escrever arquivos portáteis. Por exemplo, meu .zshrc deve ser compatível com todas as versões desde 2.5 (no entanto, isso é um pouco complicado: eu não testei recentemente, e a última vez que o carreguei em uma máquina com zsh 2.5, foi muito lento). Isso significa que eu tenho muitas coisas como if type someprogram >/dev/null 2>/dev/null e case $ZSH_VERSION (quando não posso evitá-lo). O mesmo vale para outros programas cujo arquivo de configuração é uma linguagem interpretada (bash, Emacs, Vim, Fvwm, Sawfish,…). Eu não queria manter versões separadas desses arquivos, portanto, cada definição dependente de versão está sob uma instrução condicional. Se você quiser manter o aborrecimento (às custas de suportar menos combinações), você pode fazer algo como

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

Mas há outras dependências do sistema (por exemplo, a versão de ls , para que você saiba se deseja alias a gnuls --color -b ou ls --color -b ou colorls -G ou ls -Fb ou…). Dividir tudo em arquivos separados fica cansativo rapidamente.

Eu mantenho um diretório por site com configurações por site, que são carregadas pelo arquivo principal. Por exemplo, meu .zshrc contém as linhas

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

Here é um link simbólico para um diretório que contém arquivos de configuração específicos do site. Não existe em sites que não foram personalizados. O .zshrc local geralmente contém aliases, aliases de diretório e afins. A maioria dos sites tem um .profile local que define algumas variáveis de ambiente. Todas as configurações específicas do site estão sob o mesmo sistema de controle de versão (verificar todas elas é de apenas alguns kB a mais).

Alguns arquivos são gerados automaticamente por um makefile. Por exemplo, eu tenho um script para gerar ~/.ssh/config a partir de uma lista comum de hosts (aliases e opções para máquinas acessíveis de qualquer lugar) mais uma lista de hosts específica do site (para máquinas acessíveis apenas dentro de uma rede).

    
por 27.11.2012 / 02:02
0
De modo geral, no mundo unix, quando você deseja manter esse material sincronizado em vários hosts (no mesmo ambiente), você usaria auto_home (montagens automáticas) para montar seu diretório inicial entre hosts.

Portanto, se todos os seus hosts estiverem na mesma rede, isso pode funcionar bem para você.

Caso contrário, você poderia configurar um servidor mestre e periodicamente rsync seus arquivos homedir (.bash_profile, .vimrc etc) para os hosts de destino.

    
por 27.11.2012 / 00:08