momo zone

调核人的blog

svndav gitolite and gitweb

svn服务器端建立在DAV基础上,重点自然是apache,由于之前没有摸过apache所以走了不少弯路。git服务器端建立在gitolite上,由于每个版本的安装方法还不太一样,所以也做了很多无用功。

PART1 -SVN:

每个发行版apache组件的包名称还都不一样,有的叫apache2,有的叫httpd,导致/etc下的配置档名称也不一样。这部分介绍以centos发行版为例。

step1. 建一个虚拟主机,便于发布一些内容。

编辑/etc/httpd/conf/httpd.conf 在末尾增加:

Include “vhosts.d/*.conf”

然后新建/etc/httpd/vhosts.d/repo-svn.conf,内容如下:

#默认虚拟主机端口9900
Listen 9900 
NameVirtualHost *:9900

#使用SSL
SSLEngine On
#使用SSL握手证书
SSLCertificateFile /data/www/apache.pem
#用于gitweb,下文有介绍

    DocumentRoot /data/www
    ServerName repo.yamutech.com
Alias /doc "/data/www/"
<Directory "/data/www">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all

#增加一个repo虚拟路径,用来列出版本库实际的文件目录
Alias /repo "/data/repo/"
<Directory "/data/repo/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from 192.168.8.63

step2. 编辑vi /etc/httpd/conf.d/subversion.conf

  DAV svn
#指定版本库目录,SVNParentPath和SVNPath的区别在于前者将指定目录下的所有子目录一并包含
  SVNParentPath /data/repo/svnroot
# SVNPath /data/repo/svnroot/test
  AuthType Digest
#注意这个需要和AuthUserFile里的字段一致
  AuthName "site general"
#  AuthDigestDomain /svn/svnroot
#用户名和密码文件
  AuthUserFile /data/repo/svnroot/passwd
#用户名权限配置文件
  AuthzSVNAccessFile /data/repo/svnroot/authz
#  
#所有操作都需要用户验证
        Require valid-user
#

passwd文件格式类似如下内容:
heihj:site general:18e8969c2b335d5334813a2ad4bdf2aa
jialq:site general:a29a999439b9e3de47fc3976699e8afb
gupf:site general:70d9e6d0ae019c4b36021101d9af86a4
ygm:site general:f67eeb9e435f2ae2ef24b79ee503afd6
yanggm:site general:9977d4938d34e370e4c08e3c96f13f8d
phq:site general:22b5abea72d25b6fbb24f5c94470ec71
pp:site general:fb5b9926c81d82f4c7cc11ca699f044c
gp:site general:f659ab4f518ce2b03b09b8967eac2103
ljh:site general:9724fa98cbc0dd18eb99a3fd2afe5d16
wc:site general:264ede607d4986652a380e0a9e11f90d

生成方法是使用htdigest pass_file username

authz文件格式类似如下内容:

#定义用户组
[groups]
ADMIN = AAA

#“/”指的是SVNParentPath或SVNPath目录,“:”前面指的是子目录。可见,如果不用SVNParentPath,设置权限的根目录将是每个版本库自身
[products:/]
@ADMIN = rw

[products:/dns_2]
@ADMIN = r
AA = rw
.......

step3. 创建一个svn版本库
cd /data/repo/svnroot
svnadmin create test

PART2 -GIT:

gitolite稍微麻烦点,我用的是分支版本,其他的版本可能不适用于此安装方法。

step1. 在服务器端新增git帐号:

adduser –system –home /home/git –shell /bin/bash -g git git

mkdir /home/git

chown git:git /home/git

step2. 在客户端生成管理员公钥私钥对:

ssh-keygen -t das

需要的话可以秘钥加密码

step3.  在服务器端安装gitolite

这里是针对的 git://github.com/ossxp-com/gitolite.git 这个3.0分支版本,其他版本并不适用。

su git

cd gitolite/src

./gl-system-install /usr/bin /usr/share/gitolite/conf /usr/share/gitolite/hooks

这个安装其实主要是把文件copy到对应的目录中去,并没有编译动作。

step4. 修改配置

vi ${HOME}/.gitolite.rc

主要是修改这一行,否则与之依赖的路径都是错的

$GL_ADMINDIR=$ENV{HOME} . “/.gitolite”;

step5. 新增gitolite用户

将step2中生成的XXX.pub公钥copy到服务器端,执行

gl-setup /pathto/XXX.pub 安装公钥到 ~/.ssh/authorized_keys

注意XXX.pub的XXX将作为gitolite用户名。

step6. clone gitolite-admin 到管理客户端

git clone git@server:gitolite-admin.git

step7. 配置用户权限

vi gitolite-admin/conf/gitolite.conf

git commit -a -m “update auth”

git push

misc. 新增版本库

最简单的办法就是在gitolite.conf 新增一个不存在的版本库的权限配置项,这样提交并上传到远程的时候,gitolite会自动创建一个指定名字的版本库。

也可以到服务器上手动执行,只不过这样的hook要自己去加了。

PART3-GITWEB:

1. 安装gitweb的二进制包。

2. 将/etc/gitweb.conf的内容替换为gitolite源码目录中的contrib/gitweb/gitweb.conf文件。注意设置好里面的home路径。

3. 确保/etc/httpd/conf.d/gitweb.conf有如下内容:

Alias /git /var/www/git
  Options +ExecCGI
  AddHandler cgi-script .cgi
  DirectoryIndex gitweb.cgi

4. 确保虚拟主机中有添加如下内容:
SuexecUserGroup git git

Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: