Gitolite: вручную скомпилировать файл conf?

2609
Virgiliu

Я пишу веб-интерфейс для управления репо на сервере, чтобы избежать клонирования gitolite-admin, редактирования файлов conf и keydir, а затем нажатия.

Администратор просто входит в веб-приложение, получает список всех репозиториев и разрешений для каждого, и оттуда он может добавлять новые репозитории, ключи SSH для пользователей и т. Д.

Я искал модуль Python, который делает все для меня, но лучшее, что я смог найти, было https://github.com/smailq/gitolite-manager/blob/master/gitolite_manager/gitolite.py, и он далек от завершения, поэтому я ' Мы написали скрипт Python, который может анализировать и редактировать разрешения в файле gitolite.conf, добавляет / удаляет ключи SSH и добавляет / удаляет новые репозитории в каталоге репозиториев.

Я хотел избежать клонирования gitolite-admin, отредактировать и отправить его, потому что это означало бы создание SSH-ключа для Apache, добавление этого ключа к gitolite admin и т. Д. Много хлопот с точки зрения установки и распространения.

Я вошел в систему как git и запустился, ~git/bin/gitolite compileи conf был скомпилирован нормально, все прошло как положено, разрешения для репозиториев были в порядке.

Проблема возникла, когда я попытался запустить команду компиляции от имени пользователя root или пользователя Apache.

Я получил эти сообщения об ошибках:

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>> 

Мне кажется, что gitolite использует домашнюю директорию того, кто запускает команду.

Я попытался установить переменные окружения GL_BINDIR, GL_REPO_BASE, GL_ADMIN_BASEчтобы указать на соответствующие каталоги, но не повезло:

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>> 

Есть ли способ, без изменения кода gitolite, запустить компиляцию от имени другого пользователя, кроме git?

2

1 ответ на вопрос

1
Virgiliu

After talking to gitolite's author I found a solution:

I added this to sudoers as a test:

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

and running these commands worked as expected:

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 ~ $ 

Похожие вопросы