Tag: GIT

  • Configuring GIT

    First up, I found most of my information on this here:

    Seth Robertson – Git On The Web

    The one thing that I didn’t realise initially is that you can’t use the gitweb URL to do clones etc.
    I spent ages trying to do this, until I found Seth’s page. It explains things in a very structured manner that can be applied to most situations I suspect.

    The only other thing I think I should point out is related to rewrites. If you are using them in an Apache configuration section that is higher than site that everything will be accessed from you need to remember to set the following, otherwise they will be ignored:

            RewriteEngine On
            RewriteOptions Inherit

    So, in my case, I am accessing git via a VirtualHost that I have. The virtual host needed these lines adding to it otherwise the rewrite configuration in conf.d/gitweb didn’t get picked up.

    To enable LDAP, I also had to do this:

            sudo a2enmod authnz_ldap
            sudo a2enmod cgi
            sudo service apache restart

    In the end, to have a Git Repository​ authenticating with LDAP (with Group) authenticating, with GitWeb, some aliases, source IP restrictions and some rewrites to a gitweb file that looks like this:

    Alias /<gitweb alias> /usr/share/gitweb
    Alias /<shortened gitweb alias> /usr/share/gitweb
    
    RewriteEngine On
    RewriteRule ^/<shortened gitweb alias>/([^/]+)$ /g/?p=$1 [R,NE]
    RewriteRule ^/<shortened gitweb alias>//([^/]+)/([0-9a-f]+)$ /<shortened gitweb alias>/?p=$1/.git;a=commitdiff;h=$2 [R,NE]
    RewriteRule ^/<shortened gitweb alias>/([^/]+)/([0-9a-f]+)$ /<shortened gitweb alias>/?p=$1;a=commitdiff;h=$2 [R,NE]
    
    <Directory /usr/share/gitweb>
      Options FollowSymLinks +ExecCGI
      AllowOverride all
      AddHandler cgi-script .cgi
      Order deny,allow
      Deny from all
      Allow from <restricting IP addresses>
      SSLRequireSSL
      AuthType basic
      AuthName "Private git repository"
      AuthBasicProvider ldap
      AuthLDAPURL "ldap://<ldap server>:<port>/<LDAP User DN>?<LDAP User ID>?sub?(objectClass=*)"
      Require valid-user
      AuthLDAPGroupAttribute memberUid
      AUthLDAPGroupAttributeIsDn off
      Require ldap-group <LDAP Group DN>
    </Directory>
    
    ScriptAlias /<shortened git alias>/ /usr/lib/git-core/git-http-backend/
    <Directory "/usr/lib/git-core/">
      Options +ExecCGI
      SetEnv GIT_PROJECT_ROOT <path to projects>
      SetEnv GIT_HTTP_EXPORT_ALL
      Order deny,allow
      Deny from all
      Allow from <restricting IP addresses>
      SSLRequireSSL
      AuthType basic
      AuthName "Private git repository"
      AuthBasicProvider ldap
      AuthLDAPURL "ldap://<ldap server>:<port>/<LDAP User DN>?<LDAP User ID>?sub?(objectClass=*)"
      Require valid-user
      AuthLDAPGroupAttribute memberUid
      AUthLDAPGroupAttributeIsDn off
      Require ldap-group <LDAP Group DN>​
    </Directory>

    And we are done (well other than making the virtual host allow the rewrites).

    Just to prove it, here is a sample checkout:

    ~/temp$ git clone https://<server>/<GIT Alias>/test.git
    Cloning into 'test'...
    Username for 'https://<server>': <good user>
    Password for 'https://<good user>@<server>': 
    remote: Counting objects: 10, done.
    remote: Compressing objects: 100% (6/6), done.
    remote: Total 10 (delta 0), reused 4 (delta 0)
    Unpacking objects: 100% (10/10), done.
    ~/temp$ rm -rf test
    ~/temp$ git clone https://<server>/<GIT Alias>/test.git
    Cloning into 'test'...
    Username for 'https://<server>': <bad user>
    Password for 'https://<bad user>@<server>': 
    fatal: Authentication failed