gitolite 与 smart http

gitolite 默认采用ssh公私钥的方式来验证用户,通过配合 apache 可以使用 用户名/密码 的方式来进行用户验证

在debian下需要安装apache2 和 apache2-suexec 这两个包
# apt-get install apache2 apache2-suexec
假定gitolite安装在/opt/gitolite中

安装完毕后在.gitolite.rc的定部添加
$ENV{PATH} .= ":/opt/gitolite/bin";

之后通过以下命令来查看 apache 的doc_root在哪里
/usr/lib/apache2/suexec -V
以下假定 AP_DOC_ROOT=’/var/www’


install -d -m 0755 -o git -g git /var/www/bin
install -d -m 0755 -o www-data -g www-data /var/www/git

之后在/var/www/bin中创建一个名为gitolite-suexec-wrapper.sh的脚本,权限为0700
内容如下

#!/bin/bash
#
# Suexec wrapper for gitolite-shell
#

export GIT_PROJECT_ROOT="/home/git/repositories"
export GITOLITE_HTTP_HOME="/opt/gitolite"

exec ${GITOLITE_HTTP_HOME}/gitolite-source/src/gitolite-shell

http://sitaramc.github.com/gitolite/http.html

之后需要配置 apache 来创建一个virtual host
在 /etc/apache2/sites-avaliable/ 中创建一个名为 git 的配置文件内容如下

<VirtualHost *:80>
    ServerName git.example.com
    ServerAlias git
    ServerAdmin you@example.com
    DocumentRoot /home/git/repositories
    <Directory /var/www/git>
        Options None
        AllowOverride none
        Order allow,deny
        Allow from all
    </Directory>
        SuexecUserGroup git git
        ScriptAlias /git/ /var/www/bin/gitolite-suexec-wrapper.sh/
        ScriptAlias /gitmob/ /var/www/bin/gitolite-suexec-wrapper.sh/
    <Location /git>
    AuthType Basic
    AuthName "Git Access"
    Require valid-user
    AuthUserFile /etc/apache2/git.passwd
</Location> </VirtualHost>

最后一步很重要需要在gitolite-admin/conf/gitolite.conf中把想要通过http可以访问的库加上R = daemon这个上权限

完成后在/etc/apache2/git.passwd中使用htpasswd来创建user/password

如果没有什么问题的话gitolite+smart http就搭建好了
用户可以通过 git clone http://user:pass@server/repo_name.git 来访问代码库了

权限的配置文件中的只需用户名与 git.passwd 中的用户名相匹配就可以了,并且要加上R = daemon

debian gitolite 配置

折腾了一天终于把gitolite搞定了, debian源里的gitolite没有安装成功。最后从github下载源码安装,几步就搞定了。

su git
cd
~$ git clone git://github.com/sitaramc/gitolite
~$ mkdir ~/bin
~$ gitolite/install -ln

这里使用默认选项安装到了~/bin中
需要确认在PATH环境变量中有~/bin如是没有可以通过以下方式添加

echo "PATH=$PATH:~/bin" >> ~/.bashrc

配置好后需要在客户端生成一个ssh key上传到服务器作为来验证管理员的身份,这里不能和用作登陆的ssh key相同, 以admin.pub为例
首先在客户端生成一对key并上传到服务器上

ssh-keygen -t rsa -G .ssh/admin
scp .ssh/admin.pub git@server.hostname.or.ip:

在服务器上初始化gitolite

gitolite setup -pk admin.pub

成功后会在$HOME中创建一个`repositories’

如果失败的话可以试试把$HOME下的与.gitolite相关的配置文件删掉重试下

可以在客户端的配置.ssh/config来使用admin而不是默认的id_rs

HOST repo.server
USER git
IdentityFile ~/.ssh/admin

之后检出gitolite的管理配置,这里不能带有repositories,直接hostsname:responame就可以了

git clone git@server:gitolite-admin.git

好了,现在可以通过修改配置文件来直接创建版本库了

gitolite的wiki: http://sitaramc.github.com/gitolite/master-toc.html