J’essaie de configurer un repository git sur mon Apache 2.2 sur une boîte CentOS 6, avec git installé. J’ai essayé de suivre de nombreuses directions différentes et je suis perdue. Ma situation actuelle consiste à pouvoir clone
normalement, mais être totalement incapable de pousser.
Il semble que je sois incapable de faire fonctionner correctement le bit d’authentification, car je peux normalement effectuer le push tout en définissant http.receivepack
sur true
.
J’ai installé AuthzUnixGroup
ainsi que mod_authz_external
.
Je suis allé dans /var/www/git
et my-repo.git
créé un repo nommé my-repo.git
et my-repo.git
fait un git init --bare
intérieur.
Ensuite, je configure mon fichier git.conf
dans /etc/httpd/conf.d/
comme suit:
SetEnv GIT_HTTP_EXPORT_ALL SetEnv GIT_PROJECT_ROOT /var/www/git SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER ScriptAlias /git /usr/libexec/git-core/git-http-backend AddExternalAuth pwauth /usr/local/libexec/pwauth SetExternalAuthMethod pwauth pipe AllowOverride None Options +ExecCGI -Includes Order allow,deny Allow from all AuthzUnixGroup on AuthType Basic AuthName "Git repository" AuthBasicProvider external AuthExternal pwauth Require group git
Le fait de pointer mon navigateur Web vers mysite/git
me montre bien la boîte de dialog de connexion HTTP de base, qui fonctionne parfaitement. Je me suis ajouté au groupe git
, et faire un groups
sur mes retours de shell:
naseri sudo git
qui est comme prévu.
Quand je git clone http://mysite/git/my-repo.git
Je reçois les informations suivantes du fichier access_log pour httpd sous /var/logs/httpd/access_log
:
2.177.130.21 - - [11/Jun/2014:18:51:07 +0000] "GET /git/my-repo.git/info/refs?service=git-upload-pack HTTP/1.1" 401 480 "-" "git/1.8.5.2 (Apple Git-48)" 2.177.130.21 - - [11/Jun/2014:18:51:08 +0000] "GET /git/my-repo.git/info/refs?service=git-upload-pack HTTP/1.1" 401 480 "-" "git/1.8.5.2 (Apple Git-48)" 2.177.130.21 - naseri [11/Jun/2014:18:51:08 +0000] "GET /git/my-repo.git/info/refs?service=git-upload-pack HTTP/1.1" 200 256 "-" "git/1.8.5.2 (Apple Git-48)" 2.177.130.21 - naseri [11/Jun/2014:18:51:09 +0000] "POST /git/my-repo.git/git-upload-pack HTTP/1.1" 200 368 "-" "git/1.8.5.2 (Apple Git-48)"
Sur le client, le clone
fonctionne correctement. Je change de contenu, puis essaie de pousser après un commit en git push
le contenu.
C’est ce que j’obtiens dans le journal côté serveur:
2.177.130.21 - - [11/Jun/2014:18:53:26 +0000] "GET /git/my-repo.git/info/refs?service=git-receive-pack HTTP/1.1" 401 480 "-" "git/1.8.5.2 (Apple Git-48)" 2.177.130.21 - naseri [11/Jun/2014:18:53:27 +0000] "GET /git/my-repo.git/info/refs?service=git-receive-pack HTTP/1.1" 401 480 "-" "git/1.8.5.2 (Apple Git-48)" 2.177.130.21 - naseri [11/Jun/2014:18:53:30 +0000] "GET /git/my-repo.git/info/refs?service=git-receive-pack HTTP/1.1" 403 - "-" "git/1.8.5.2 (Apple Git-48)"
Je peux voir que ma réponse “Authentication Required” est renvoyée par Apache sur la première ligne de réponse (401) mais le client me montre:
fatal: unable to access 'http://mysite/git/my-repo.git/': The requested URL returned error: 403
Je n’ai aucune idée du problème, car le fait de pointer mon navigateur vers la même URL fait apparaître l’authentification et fonctionne même correctement.
Cette réponse plus ancienne
git-http-backend
renvoie un code 403 / Forbidden lorsque le client demande à utiliser la méthode git-receive-pack.
Il revient alors à WebDAV, mais l’utilisation de WebDAV n’est pas nécessaire .J’ai eu le même problème; dans mon cas, cela était dû au fait que
REMOTE_USER
n’était pas défini
Étant donné que n’importe quelle configuration d’Apache utilise un ‘ =
‘ lors de la définition d’une variable, vérifiez si cela fonctionne mieux:
SetEnv REMOTE_USER $REDIRECT_REMOTE_USER
(non ‘ -
‘ entre les deux variables)
Vérifiez également si (re) la définition de REMOTE_USER
fonctionne pas (car elle a peut-être déjà été définie, alors que REDIRECT_REMOTE_USER
peut ne pas l’être): essayez sans cette ligne.
Je n’ai jamais à le définir dans ma configuration Apache Git.
J’ai été dans une situation comme celle-ci, et j’ai découvert qu’essayer d’utiliser Apache pour servir git était loin d’être simple ou facile.
Au lieu de cela, je recommanderais d’installer Gerrit – il permet d’héberger plusieurs référentiels, et surtout, un modèle extrêmement flexible de gestion des utilisateurs / groupes et des permissions. En prime, il s’agit également d’un moteur de révision de code très puissant, mais il est complètement facultatif – vous n’avez pas à utiliser les fonctionnalités de révision de code si vous ne le souhaitez pas.
Les autres solutions connues sont le Gitlab et le Gitolite – vous voudrez peut-être les examiner également.