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?