Forum général.général git over http, casse tête...

Posté par (page perso) .
2
6
déc.
2011

Bonjour à tous.

Je cherche à monter un serveur git accessible en http/https avec un contrôle d'accès via LDAP.

La partie ldap est ok de même que la partie clone/pull via http, le tout paramétré comme il faut dans apache2.

Par contre j'ai des problèmes pour faire un git push sur le dépot distant.

Joli message d'erreur:
Cannot access URL http://monurl.com/dépot/.git/, return code 22
fatal: git-http-push failed

Et un git remote -v me donne les bonnes adresses de push et de fetch (fetch fonctionne par ailleurs, ce qui me fait penser que c'est vraiment un problème de git-http-push).

J'ai lu qu'il y a 2 solutions, une première avec un webdav et la seconde avec le smart http. La solution webdav ne me plait pas trop (moins j'ai de composants à maintenir mieux je me porterai...). J'ai lu cette doc mais j'ai toujours le même problème. git-http-push est installé (il fait partie de git-core sous debian).

L'un d'entre vous a-t-il une idée salvatrice pour moi ou a-t-il rencontré le même problème ???

Merci d'avance !

P.S: Je précise que l'accès http/https n'est pas une option, les dev internes auront accès à git via ssh avec un compte sur le serveur, par contre les clients doivent accéder via http/https.

Voilà le vhost si ça peut vous aider (j'ai modifié certaines informations sensibles qui ne sont pas affichées ici...):

 #file managed by puppet
<VirtualHost *:80>
  ServerName SERVEUR
  SetEnv GIT_PROJECT_ROOT /srv/git
  SetEnv GIT_HTTP_EXPORT_ALL
  SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER
  <Location />
    AuthLDAPURL "ldap://SERVEUR-LDAP"
    AuthLDAPGroupAttribute memberUid
    AuthLDAPGroupAttributeIsDN off
    AuthzLDAPAuthoritative off
    AuthBasicProvider ldap
  </Location>
  DocumentRoot /srv/git

  LogLevel warn

  ErrorLog /var/www/FQDN/logs/error.log
  CustomLog /var/www/FQDN/logs/access.log "combined"
  HostnameLookups On

  Include /var/www/FQDN/conf/*.conf  #useless, no config files in here NEED FIX

  ScriptAlias /git /usr/lib/git-core/git-http-backend/
  <Directory /srv/git>
    # Options +ExecCGI
    # AddHandler cgi-script .cgi
    AllowOverride None
    Options Indexes FollowSymlinks
    Order Allow,Deny
    Allow From All
    Authname "Restricted Access"
    Authtype Basic
    require ldap-group RULES
    require ldap-user sysadmin
  </Directory>

  ServerSignature Off
</VirtualHost>

  • # de ce que je comprend

    Posté par . Évalué à 2.

    tu cherches à joindre ton SERVEUR (monurl.com)
    puis à rentrer dans un dossier dépot

    mais dans ton virtualhost

    tu definis bien un ServerName SERVEUR
    qui va chercher ses pages dans /srv/git (DocumentRoot)

    puis plus loin tu definis que /git est un alias vers le backend
    donc il faudrait aller sur http://SERVEUR/git pour le faire fonctionner

    enfin et sinon, que dit le manuel à propos d'un git push qui renverrait une erreur 22.

    ne serait-ce pas simplement que ton utilisateur web (www-data) ne peut pas ecrire dans le dossier du projet ?

    • [^] # Re: de ce que je comprend

      Posté par (page perso) . Évalué à 1.

      Il ne s'agit pas du tout d'accéder au serveur via un navigateur web mais d'utiliser le dépôt git avec http:// plutôt que git:// en tant que remote, ce dernier pouvant poser problème en cas de par feu un peut trop zélé et aussi de permettre l'utilisation via un proxy (le serveur git est dans une dmz, inaccessible depuis le net).

      J'aurai un sous domaine avec gitweb mais c'est un tout autre outil.

      Si tu ne sais pas demande, si tu sais partage !

  • # J'utilise grack pour ça

    Posté par . Évalué à 1.

    https://github.com/schacon/grack
    avec en plus Apache et mod_perl juste pour le contrôle d'accès ainsi que le server rack passenger (libapache2-mod-passenger)

    Un virtualHost apache avec le serveurName qui va bien le documentRoot qui pointe vers les fichiers de conf du rack, notamment le fichier config.ru configuré pour utiliser ton dépôt git ex: /var/git/your.project.fr/PROJECT_NAME

    La couche access control (surement inutile pour toi, tu veux un accès public au repository?) se caractérise dans le vhost de cette façon

    PerlAccessHandler Apache::Authn::Redmine::access_handler
    PerlAuthenHandler Apache::Authn::Redmine::authen_handler
    ## for mysql
    RedmineDSN "DBI:mysql:database=databasename;host=my.db.server" 
    RedmineDbUser "chiliproject"
    RedmineDbPass "yourpass"
    RedmineGitSmartHttp yes
    
    

    J'ai à disposition un gitweb par défaut public que je peux baliser en accès a mes users, le niveau en sécurité est en retrait par rapport à un cryptage asymétrique ssh

    C'est une solution packagé avec un soft de gestion de projet écrit en RoR: Chiliproject/redmine

    D'ailleurs le module perl_apache d'authentification est fournit avec le soft

    Je sais pas à quelle niveau c'est crade mais chezmoiçamarche

    envoyé depuis mon clavier bépo

  • # ?

    Posté par . Évalué à 0.

    http://monurl.com/dépot/.git/
    SetEnv GIT_PROJECT_ROOT /srv/git

    Ca serait pas /srv/git/.git ton git plutot?

  • # bad ScriptAlias

    Posté par . Évalué à 1.

    Salut,

    Moi aussi je cherche à faire la même chose.

    Si tu est sur un base debian déjà ton ScriptAlias est faux.

    /usr/lib/git-core/git-http-backend/
    Ce n'est pas un dossier mais un fichier

    ton ScriptAlias devrais plutôt être
    ScriptAlias /git/ /usr/lib/git-core/

    Et d'après ta conf ton adresse vers un dépôt est de type http://SERVEUR/DEPOT
    DEPOT étant un dossier de /srv/git

    • [^] # Re: bad ScriptAlias

      Posté par (page perso) . Évalué à 1.

      Merci, en effet de cette manière ça fonctionne beaucoup mieux !!!
      En fait c'était le scriptAlias qui ne trouvait que le git-http-backend et donc ne pouvait pas accéder à d'autres fonctionnalités.

      Si tu ne sais pas demande, si tu sais partage !

  • # Solution trouvé

    Posté par . Évalué à 1.

    Alors en faite faut bien pointer sur git-http-backend même si c'est un exe.

    **ScriptAlias / /usr/lib/git-core/git-http-backend/**
    
    

    Le slash à la fin est primordiale !

    source => http://p0l0.binware.org/index.php/2011/08/26/git-over-http-git-http-backend/

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.