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