É possível usar o etckeeper com um único repositório git compartilhado?

9

Notei que várias pessoas recomendaram o uso do etckeeper para aplicar o controle de versão ao meu diretório / etc.

Parece-me que a instalação padrão coloca um repositório na mesma máquina que o / etc que você está tentando gerenciar. Isso funciona bem para o controle de versão, mas não oferece o benefício adicional de fazer um backup fora dos servidores dos arquivos - nem me permite duplicar partes do / etc de uma máquina de origem para outra.

É possível compartilhar um único repositório git em uma máquina administrativa central, para que o etckeeper em cada servidor armazene seus dados no mesmo local?

(Estou fazendo uma coisa semelhante agora com svn e alguns scripts personalizados para confirmar e reverter arquivos, mas devo lembrar de confirmá-los quando fizer alterações.)

Brent
fonte

Respostas:

8

Primeiro, use install etckeeper, configurado para git em /etc/etckeeper/etckeeper.conf. Siga o método de instalação do etckeeper para sua distribuição ou da fonte.

Em breve, você terá um /etc/.git

Agora, no seu servidor, verifique se você possui um repositório (seguro) para ...

 # ssh faruser@farhost     
 # mkdir somedir cd somedir && git init && chmod 700 .git    
 # exit

Agora, no host inicial, envie seu repositório local para o servidor via ssh:

# cd /etc && git push faruser@farhost:somedir

É claro que Somedir pode ser relativo neste caso (seguindo a convenção ssh)

Faça isso a qualquer momento que fizer uma alteração que afeta o / etc (e é inserida no /etc/.git pelo etckeeper) e você terá repositórios locais e fora da máquina para sua máquina.

Ou configure o ssh sem senha e faça um gancho em /etc/etckeeper/commit.d/ para que isso aconteça automaticamente se a máquina estiver sempre conectada.

quanta
fonte
2
Isso parece ótimo. Existe uma maneira de armazenar o repositório local em um subdiretório do remoto? Eu gostaria de fazer algo semelhante, usando um único repositório remoto para armazenar as configurações (separadas) de vários servidores.
Andrew Ferrier
pode git pushtrabalhar para o seu repositório Git criado? Provavelmente você precisa criar repo nua em somedir o gancho sob commit.d é realmente uma boa idéia, eu gosto
larrycai
3

É possível adicionar uma configuração de filial remota para mapear a filial principal do repositório etckeeper de cada servidor para uma filial no repositório remoto. Para fazer isso, você pode executar os seguintes comandos em cada servidor:

cd /etc
git branch -m master $HOSTNAME
git remote add origin [email protected]:path/to/single/repo.git
git push -u origin master:$HOSTNAME

Após essa configuração, o subseqüente git pushenviará alterações de cada ramificação mestre do servidor para a ramificação dedicada do servidor no repositório central.

Embora as ramificações não tenham um ponto de partida comum, isso permite comparar facilmente o mesmo arquivo de duas ramificações diferentes, representando dois servidores diferentes, executando:

git diff origin/server1 origin/server2 -- file

Isso pode ser combinado com a configuração automatizada sugerida pelo jojoo .

TTT
fonte
mestre de origem do git push -u: $ HOSTNAME não funciona aqui. O repo remoto é um repo vazio. erro: src refspec master não corresponde a nenhum.
Bertl
1

Como fazer isso automaticamente, a história completa:

Crie o arquivo /etc/etckeeper/commit.d/60-push (não esqueça de chmod + x it) nos clientes.

#!/bin/sh
git push central_server:/var/git/client_name.git master

central_server é definido na configuração do ssh, veja abaixo. /var/git/client_name.git é o diretório no servidor central, contendo o repositório git.

O ~ / .ssh / config da raiz (!) Deve conter algo como isto:

host central_server
Hostname 192.168.0.1
User etckeeper #a user on the central server 
IdentityFile ~/.ssh/custom_key # key is in authorized_keys in
             #etcpeeper@central_server:~/.ssh/authorized_keys

Então você precisa iniciar o repositório git no servidor_servidor central

mkdir /var/git/client_name.git
su etckeeper
cd /var/git/client_name.git
git --bare init

Teste-o com uma edição menor em / etc e, em seguida, um etckeeper confirma "test push'ing".

jojoo
fonte
1

Essa não é a questão. Se você deseja distribuir amplamente a configuração, configure outro repositório, além do repositório local de cada máquina, e faça com que cada máquina faça uma escolha , conforme necessário. O que isso faz é permitir que cada máquina se desvie (ramificação, na verdade) e mantenha o controle de revisão.

jldugger
fonte
Não tenho certeza de como fazer isso (segundo repositório). Você pode elaborar?
Brent
Você provavelmente precisará clonar um dos repositórios no seu "repositório central"; você só precisa de um. A partir daí, você pode fazer alterações e, em seguida, cada um dos servidores pode escolher os patches armazenados em uma revisão. Como você o configura inicialmente varia entre os DSCMs. Para git, veja kernel.org/pub/software/scm/git-core/docs/gittutorial.html
jldugger
-2

Você realmente não quer fazer do etckeeper sua política de backup. Embora seja bom ter uma cópia dos seus arquivos de configuração, dificilmente é suficiente se qualificar como um plano de recuperação de desastre.

Concentre-se em ter backups reais do seu sistema. O simplista poderia ser um cronjob para alimentar um tarball com fita ... ah, certo. Ninguém mais usa fitas. Ok, um cronjob para sincronizar todos os seus arquivos em um NAS dedicado . Para soluções de backup mais robustas, dê uma olhada em Amanda e Bacula .

E, no caso dos acadêmicos, eu fui capaz de enviar meu repositório etckeeper para o github, como qualquer outro repositório git.

Shazburg
fonte
Ninguém está falando em fazer disso uma política de backup. Mas, na minha experiência, é conveniente ter tudo em um só lugar, em um servidor mais seguro.
Brent
11
Então eu entendi errado. Se o que você está realmente procurando é um meio de armazenar e distribuir centralmente a configuração de seus sistemas, talvez o Puppet ( reductivelabs.com/products/puppet ) seja útil .
Shazburg 21/06/09
por exemplo: estamos enviando todas as nossas configurações para um host. existe um trac, que é usado para visualizar as alterações de configuração (e, claro, escrever tickets, se algo não funcionar, ...) imo é superconveniente, posso, por exemplo, comparar os crontabs de todos os nossos hosts com alguns cliques.
Jojoo