Project

General

Profile

HowTo configure Redmine for advanced git integration » History » Version 2

Felix Schäfer, 2010-07-13 12:55
Install grack

1 1 Felix Schäfer
h1. HowTo configure Redmine for advanced git integration
2
3
h2. Scope
4
5
This HowTo explains how to serve git repositories on apache through the http-based "git-smart-http protocol":http://progit.org/2010/03/04/smart-http.html introduced in git 1.6.6. The git-smart-http offers various advantages over ssh or git-based access: you can use redmine access control as-is, no need for extra ssh keys or whatnot, you can secure it through SSL as needed, and there's generally less problems with firewalls and https/https ports than exist with ssh and git ports. git-smart-http also doesn't have some of the drawbacks of its "dumb" predecessor, as it doesn't require any complex DAV setup.
6
7
This HowTo is mainly written from memory and was conducted on a setup which was already serving [[Repositories_access_control_with_apache_mod_dav_svn_and_mod_perl|svn repositories integrated with redmine]], so it might be possible that I forgot some things or take them for granted. This is a wiki page, feel free to correct or amend anything you find lacking :-)
8
9
h2. Prerequisites
10
11
* Apache with mod_perl (access control)
12
* git (version at least 1.6.6)
13
* A way to serve git-smart-http
14
** mod_cgi (or mod_cgid) if you want to use the stock "git-http-backend":http://www.kernel.org/pub/software/scm/git/docs/git-http-backend.html
15
** a rack server if you want to use "grack":http://github.com/schacon/grack (basically a rack wrapper around the right git commands)
16
17
You should already have a rack server to run redmine, and that's why I chose grack as the backend and which I will describe in this tutorial. Using the stock git-http-backend should be quite straightforward though.
18 2 Felix Schäfer
19
h2. Install grack
20
21
My rack server of choice is "passenger":http://modrails.com/ and it is already configured on my system. As this is not within the scope of this HowTo, please refer to the "passenger documentation":http://modrails.com/documentation.html or to the passenger installation guide from your distribution.
22
23
Fetch grack from its "github repository":http://github.com/schacon/grack, I checked out mine to @/var/www/git.myhost.com@:
24
25
<pre><code class="bash">git http://github.com/schacon/grack.git /var/www/git.myhost.com</code></pre>
26
27
Edit the @config.ru@ file and adapt it to your local configuration. @project_root@ must contain the path to the directory containing your git repositories, @git_path@ must obviously contain the path to the git, mine looks like this (on gentoo):
28
29
<pre><code class="ruby">$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/lib')
30
31
use Rack::ShowExceptions
32
33
require 'lib/git_http'
34
35
config = {
36
  :project_root => "/var/git/git.myhost.com",
37
  :git_path => '/usr/libexec/git-core/git',
38
  :upload_pack => true,
39
  :receive_pack => true,
40
}
41
42
run GitHttp::App.new(config)</code></pre>
43
44
There's a little more work to do here to get passenger to work with this, you will need to create the directories @public@ and @tmp@ in the grack directory. Please also be aware that in the standard configuration, passenger will run the grack application with the same user and group owning the @config.ru@ file. This user must have read- and write-access as needed to the git repositories!
45
46
The last step is to configure an apache vhost to serve the application:
47
48
<pre><code class="apache"><VirtualHost yo.ur.i.p:80>
49
    ServerName git.myhost.com
50
51
    ServerAdmin root@myhost.com
52
    DocumentRoot "/var/www/git.myhost.com/public"
53
54
    <Directory "/var/www/git.myhost.com/public">
55
        Options None
56
        AllowOverride None
57
        Order allow,deny
58
        Allow from all
59
    </Directory>
60
</VirtualHost></code></pre>
61
62
At this point, if you have a repository in @/var/git/git.myhost.com/myrepo@, you should be able to access it through @http://git.myhost.com/myrepo@, for example @git ls-remote http://git.myhost.com/myrepo@ should show you some information about the repository.