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. |