第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