第31章 Gitosis服务架设

Gitosis是Gitolite的鼻祖,同样也是一款基于SSH公钥认证的Git服务管理工具,但是功能要比之前介绍的Gitolite弱一些。Gitosis由Python语言开发,对于偏爱Python不喜欢Perl的开发者(我就是其中之一),可以对Gitosis加以关注。

Gitosis的出现远早于Gitolite,作者Tommi Virtanen从2007年5月就开始了Gitosis的开发,最后一次提交是在2009年9月,已经停止更新了。但是Gitosis依然有其生命力。

配置简洁,可以直接在服务器端编辑,可成为针对某些服务定制的、内置的、无须管理的Git服务。

Gitosis的配置文件非常简单,直接保存于服务安装用户(如git)的主目录下的.gitosis.conf文件中,可以直接在服务器端创建和编辑。而与之相比,Gitolite的授权文件需要复杂的编译,一般需要管理员克隆gitolite-admin库,远程编辑并推送至服务器。若要用Gitolite实现一个无须管理的Git服务,难度要大很多。

支持版本库重定向。

版本库重定向一方面在版本库路径变更后保持旧的URL仍可工作,另一方面用在客户端,以简洁的地址屏蔽服务器端复杂的地址。例如我开发的一款备份工具(Gistore),版本库位于/etc/gistore/tasks/system/repo.git(符号链接),客户端使用system.git即映射到复杂的服务器端地址。

注:我在定制的Gitolite,这个功能也已实现。

Python语言开发,对于喜欢Python不喜欢Perl的用户可以选择Gitosis。

在Github上有很多Gitosis的克隆,我对Gitosis的改动放在了github上:http://github.com/ossxp-com/gitosis。

因为Gitosis是Gitolite的鼻祖,因此下面介绍的Gitosis实现机理会让您感到似曾相识:

Gitosis安装在服务器(如server)的某个账号(如git)之下。

管理员通过git命令检出名为gitosis-admin的版本库。


$git clone git@server:gitosis-admin.git


管理员将git用户的公钥保存在gitosis-admin库的keydir目录下,并编辑gitosis.conf文件为用户授权。

当管理员提交对gitosis-admin库的修改并推送到服务器之后,服务器上gitosis-admin版本库的钩子脚本将执行相应的设置工作。

〇新用户公钥自动追加到服务器端安装账号用户主目录中的.ssh/authorized_keys文件中,并设置新用户的登录shell为gitosis的一条命令gitosis-serve。


command="gitosis-serve

jiangxin",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa<公钥内容来自于jiangxin.pub…>


〇更新服务器端的授权文件~/.gitosis.conf。

用户可以用Git命令访问授权的版本库。

当管理员授权后,用户可以远程在服务器上创建新版本库。

下面介绍Gitosis的部署和使用。在下面的示例中约定:服务器的名称为server,Gitosis的安装账号为git。

31.1 安装Gitosis

Gitosis的部署和使用可以直接参考源代码中的README.rst。可以直接访问Github上我的Gitosis克隆,因为Github能够直接将rst文件显示为网页。

具体参考:


http://github.com/ossxp-com/gitosis/blob/master/README.rst


31.1.1 Gitosis的安装

Gitosis的官方Git库位于git://eagain.net/gitosis.git。我在Github上创建了一个克隆[1]。Gitosis的安装需要在服务器端执行。下面介绍直接从源代码进行安装,以便获得最新的改进。

使用Git下载Gitosis的源代码。


$git clone git://github.com/ossxp-com/gitosis.git


进入gitosis目录,执行安装。


$cd gitosis

$sudo python setup.py install


可执行脚本安装在/usr/local/bin目录下。


$ls/usr/local/bin/gitosis-*

/usr/local/bin/gitosis-init/usr/local/bin/gitosis-run-hook

/usr/local/bin/gitosis-serve


[1]http://github.com/ossxp-com/gitosis