Gitolite: compila manualmente o arquivo conf?

2

Estou escrevendo uma interface web para gerenciamento de recompra em um servidor para evitar clonar o gitolite-admin, editando o arquivo conf e keydir e, em seguida, empurrando.

O administrador apenas faz login no aplicativo da web, obtém uma lista de todos os repositórios e permissões para cada um e, a partir daí, ele pode adicionar novos repos, chaves SSH para usuários, etc.

Eu procurei por um módulo Python que faz tudo para mim, mas a melhor coisa que eu encontrei foi link e está longe de ser concluído, então escrevi um script Python que pode analisar e editar permissões no arquivo gitolite.conf, adiciona / remove chaves SSH e adiciona / remove novas repos no diretório de repositórios.

Eu queria evitar clonar o gitolite-admin, editá-lo e empurrá-lo porque isso significaria criar uma chave SSH para o Apache, adicionar essa chave ao administrador do gitolite, etc. Um monte de complicações de um ponto de instalação e distribuição de vista.

Eu loguei como git e executei ~git/bin/gitolite compile e o conf foi compilado ok, tudo correu como esperado, permissões para repositórios foram OK.

O problema surgiu quando tentei executar o comando compile como root ou o usuário do Apache.

Recebi estas mensagens de erro:

root@debian:/home/git/bin# ./gitolite compile
FATAL: errors found but logfile could not be created
FATAL: /root/.gitolite/logs/gitolite-2014-05.log: No such file or directory
FATAL: die      chdir /root/.gitolite failed: No such file or directory<<newline>>


www-data@debian:/home/git/bin$ ./gitolite compile
FATAL: errors found but logfile could not be created
FATAL: /var/www/.gitolite/logs/gitolite-2014-05.log: No such file or directory
FATAL: die      chdir /var/www/.gitolite failed: No such file or directory<<newline>>

Parece-me que o gitolite usa o diretório home de qualquer usuário que esteja executando o comando.

Eu tentei definir as variáveis de ambiente GL_BINDIR , GL_REPO_BASE , GL_ADMIN_BASE para apontar para os diretórios corretos, mas sem sorte:

root@debian:/home/git/bin# export GL_BINDIR=/home/git/bin/
root@debian:/home/git/bin# export GL_REPO_BASE=/home/git/repositories/
root@debian:/home/git/bin# export GL_ADMIN_BASE=/home/git/.gitolite
root@debian:/home/git/bin# ./gitolite compile
FATAL: errors found but logfile could not be created
FATAL: /root/.gitolite/logs/gitolite-2014-05.log: No such file or directory
FATAL: die      chdir /root/.gitolite failed: No such file or directory<<newline>>

Existe alguma maneira, sem modificar o código gitolite, para executar a compilação como outro usuário diferente de git?

    
por Virgiliu 08.05.2014 / 13:11

1 resposta

1

Depois de conversar com o autor do gitolite, encontrei uma solução:

Eu adicionei isso aos sudoers como um teste:

yoshi ALL=(git) NOPASSWD: /home/git/bin/gitolite

e a execução desses comandos funcionou como esperado:

yoshi@debian ~ $ sudo -u git /home/git/bin/gitolite compile

Initialized empty Git repository in /home/git/repositories/testrepo.git/

yoshi@debian ~ $ sudo -u git /home/git/bin/gitolite trigger POST_COMPILE
yoshi@debian ~ $
    
por 08.05.2014 / 14:39

Tags