Como armazenar repositórios do etckeeper em um servidor central via git

7

Eu gostaria de ter um repositório git central para todos os repositórios etckeeper .git dos meus servidores. Aqui a sugestão foi para usar um arquivo em /etc/etckeeper/commit.d, que basicamente se parece com isso, supondo que um repositório git tenha sido configurado em algum objeto em algum host:

#!/bin/sh
cd /etc
git push faruser@farhost:somedir

O problema é que seria muito bom ter todos os servidores no mesmo repositório no servidor central. Eu tentei

git push faruser@farhost:somedir/server1

mas isso falhou.

Como você pode ver, eu nunca trabalhei com o git antes ... Qualquer idéia de como isso pode ser feito é muito apreciada:)

Felicidades,

Andreas

    
por andreas-h 22.05.2010 / 19:31

5 respostas

2

Eu posso entender o desejo de um local central com todas as suas informações de configuração, mas você provavelmente quer que elas ainda sejam seus próprios repositórios separados, apenas em um local central. Para fazer isso, pesquise como empurrar para locais remotos no git (usando git push ). Em seguida, você precisará configurar o acesso a esse local em todos os seus servidores. Nesse ponto, você poderá fazer o push de todos eles. Em que ponto a sugestão que você apontou deve funcionar.

    
por 27.08.2010 / 21:43
3

Além da boa resposta do pjz, veja como isso pode ser feito, passo a passo:

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

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

central_server é definido na configuração 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 assim:

    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 do git no central_server

    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 depois um commit do etckeeper "test pushing".

    
por 02.02.2013 / 09:38
2

Você precisa configurar o host remoto de tal forma que o usuário local (i asume root, como você usa o etckeeper) tenha permissão para enviar para o repositório remoto. Como fazer isso, depende da maneira como você deseja que seus git-repos no site remoto sejam publicados / disponibilizados. Por exemplo, ao usar o git via ssh, você provavelmente configuraria um par sshkey sem passphrase e, portanto, permitiria que a raiz local fizesse login no reomedeside sem (keyoard -, ...) ineraction. E sim, ao enviar para o site remoto, o repositório tem que estar existente, então pelo menos um repositório vazio deve estar presente. Então, primeiro nos diga a situação exata com a qual você está trabalhando e o erro exato que você está tendo.

    
por 23.05.2010 / 16:10
1

Eu acho que a questão inicial é como empurrar para diferentes filiais no mesmo repositório. Uma maneira de arquivar isso é usar a sintaxe:

git push faruser@farhost:somedir master:server1

Isso empurrará a ramificação 'principal' local para a ramificação 'server1' remota. Você pode ter variações sobre isso, como:

git push faruser@farhost:somedir master:auto/$(hostname)

Várias observações:

  1. como todos os ramos não possuem um ancestral comum, talvez você precise de um --force para o primeiro commit

  2. pelo mesmo motivo, no repositório remoto, você verá n histórico independente linear. Em particular, você não verá facilmente a parte comum de seu ramo. Idéia para um projeto: pegue vários git branch, crie novos para compartilhar atualizações comuns e assegure que o estado em commits iniciais também esteja presente em commits reescritos (isto é, reescreva o histórico adicionando commit / merge / ... mas certifique-se de ver o estado dos commits iniciais)

por 26.03.2015 / 09:19
0

Pelo menos no debian existe uma opção no etckeeper.conf.

...
# To push each commit to a remote, put the name of the remote here.    
# (eg, "origin" for git).
PUSH_REMOTE="origin"
...

Depois de adicionar manualmente o remote ao git repos, ele deve funcionar imediatamente.

    
por 11.03.2016 / 13:34

Tags