Ich schreibe eine Web-Benutzeroberfläche für das Repo-Management auf einem Server, um zu vermeiden, dass gitolite-admin geklont werden muss, die Datei conf und die keydir-Datei bearbeitet und anschließend gepusht wird.
Der Administrator meldet sich nur in der Web-App an, erhält eine Liste aller Repos und Berechtigungen und kann von dort aus neue Repos, SSH-Schlüssel für Benutzer usw. hinzufügen.
Ich suchte nach einem Python-Modul, das alles für mich tut, aber das Beste, was ich finden konnte, war https://github.com/smailq/gitolite-manager/blob/master/gitolite_manager/gitolite.py, und es ist noch lange nicht fertig. Wir haben ein Python-Skript geschrieben, das Berechtigungen in der Datei gitolite.conf analysieren und bearbeiten kann, SSH-Schlüssel hinzufügt / entfernt und neue Repos im Repository-Verzeichnis hinzufügt / entfernt.
Ich wollte vermeiden, gitolite-admin zu klonen, zu bearbeiten und zu pushen, da dies die Erstellung eines SSH-Schlüssels für Apache, das Hinzufügen dieses Schlüssels zum gitolite-Administrator usw. bedeuten würde. Eine Menge Ärger aus Sicht der Installation und Verteilung.
Ich ~git/bin/gitolite compileloggte mich als git ein und lief und das conf wurde ok kompiliert, alles lief wie erwartet, Berechtigungen für Repositories waren OK.
Das Problem trat auf, als ich versuche, den Befehl zum Kompilieren als root oder als Apache-Benutzer auszuführen.
Ich habe folgende Fehlermeldungen erhalten:
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>>
Es scheint mir, dass Gitolit das Heimatverzeichnis des Anwenders verwendet, der den Befehl ausführt.
Ich habe versucht, die Umgebungsvariablen GL_BINDIR, GL_REPO_BASE, GL_ADMIN_BASEauf die richtigen Verzeichnisse zu verweisen aber kein Glück:
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>>
Gibt es eine Möglichkeit, den Compiler als einen anderen Benutzer als git auszuführen, ohne den gitolite-Code zu ändern?
1 Antwort auf die Frage
1
Virgiliu
Nach einem Gespräch mit dem Autor von gitolite fand ich eine Lösung:
Ich habe dies zu Sudoers als Test hinzugefügt:
yoshi ALL=(git) NOPASSWD: /home/git/bin/gitolite
und das Ausführen dieser Befehle funktionierte wie erwartet: