Chinaunix首页 | 论坛 | 博客
  • 博客访问: 450413
  • 博文数量: 135
  • 博客积分: 4177
  • 博客等级: 上校
  • 技术积分: 1145
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-13 17:16
文章分类

全部博文(135)

文章存档

2011年(5)

2010年(4)

2009年(26)

2008年(25)

2007年(29)

2006年(42)

2005年(4)

分类: LINUX

2007-04-09 20:12:38

1、安装必要软件包
 我们假设您已经正确的安装了Debian系统。
 SVN最常用的方式是通过Apache2使用(其他方式本文不会涉及,最主要是我也没做过.^_^),因此需要安装apache2。在一般情况下,我的服务器上会安装php,因为我选择了apache的apache2-mpm-prefork包。安装命令:
    shell#apt-get install apache2-mpm-prefork libapache2-svn subversion
    Debian的包管理系统会自动安装缺少的包。
2、配置
    svn作为apache2的一个模块,配置文件在Debian下位于/etc/apache2/mods-available/dav_svn.conf(其他发行版或许有所区别)。首先我们看一个配置文件示例:
       
                DAV svn
                SVNParentPath /data/svn_repos/
                AuthzSVNAccessFile /etc/apache2/erya.authz
                AuthType Basic
                AuthName "Subversion Repository"
                AuthUserFile /etc/apache2/dav_svn.passwd
                Require valid-user
       

    说明:
    a)第一行:表示svn仓库位于/svn虚拟目录下面(Location的作用有点类似Alias的作用)。当然你可以的目录,比如。那么这样配置一般您将可以通过浏览器进行浏览(如果权限足够的话)。
    b)第二行:DAV svn表示dav启用svn支持。如果您想更详细了解dav是啥去baidu或者google一下,网上资料蛮多的。
    c)第三行:SVNParentPath /data/svn_repos表示使用SVNParent方式,并且仓库的物理路径为/data/svn_repos.SVN支持两种对项目的管理方式,一种是SVNParent,另一种是SVN(?)。我一般更喜欢SVNParent这种方式,因为使用这种方式添加一个新项目是不需要重启apache的,而另一种方式则需要。对于一个实际使用的服务器来说,是否需要常常重启是一件很重要的事情了。这儿的/data/svn_repos目录必须是存在而且目录的属主应该为apache的用户(Debian下一般为www-data)。mkdir -p /data/svn_repos;chown -R www-data:www-data /data/svn_repos。注意:配置文件默认的是SVNPath,即使用的后一种方式。
    d)第四行:AuthzSVNAccessFile /etc/apache2/erya.authz。表示用户权限文件是/etc/apache2/erya.authz(权限文件的写法我在后面再说)。文件可以位于任意其他位置。
    e)第五至八行:经常配置apache的朋友,我想一定看出来了,这个是apache的配置,使用使用apache的用户文件作为身份验证,需且要求有效用户才可以访问。如果您使用其他用户管理方式,比如pam,LDAP或者MySQL等都是一样的。其实在配置文件注释中已经说明了怎么样使用htpasswd进行用户管理的方式。在此需要注意的是第四行的配置与此处的配置,在authz权限文件中,只配置哪个用户是什么样的权限,而判断是否已经通过密码验证却是由apache的用户管理实现的。也就是说,比如我有一个用户qsg,那么判断这个用户的密码是否正确是由此处完成的,而判断此用户对哪些项目有什么样的权限则是由authz文件完成的。
    上面这个配置示例是最简单的一个配置,其实您还可以通过这个配置xlst文件,以改变通过浏览器查看的效果(我尝试过几次,不过配置出来的效果比默认更难看,所以索性作罢。)
    配置完成后,进入/etc/apache2/mods_enabled查看指向dav_svn.conf和dav_svn.load的文件链接是否存在(apache据此启动模块)。
3、创建用户文件
    在dav_svn.conf的注释中已经说明了创建用户文件的方法:
    htpasswd2 -c /etc/apache2/dav_svn.passwd qsg

    Debian下没有htppasswd2 只有htpasswd;而且每次只能建立一个用户,而再建用户时会盖掉原来的用户!建立一个中间过渡的文件可以解决此问题:

方式如下:

#!/bin/bash

echo "create new user!"
htpasswd -c /etc/apache2/dav_svn.test $1
#echo dav_svn.test

cat /etc/apache2/dav_svn.test >> /etc/apache2/dav_svn.passwd


    添加用户qsg到/etc/apache2/dav_svn.passwd文件中,如果文件不存在,则创建。
4、建立项目仓库
    我们假设您的配置的SVNParentPath目录是/data/svn_repos。进入/data/svn_repos,此时目录应该是空的。
    创建一个项目仓库分为三个步骤:a)建立目录b)使用svnadmin初始化新项目目录c)将目录属主改为apache的用户(本文中我们都假设您使用默认为www-data用户)。
    我写了一个小脚本(假设文件名为createnew):
    #!/bin/bash
   
    echo "Create a new resposity ..."
    mkdir $1
    svnadmin create $1
    chown -R www-data:www-data $1
    很简单,三条命令。用法:./createnew test,则我们就建立了一个test项目。建立其他项目也一样,比如:./createnew project1
    执行完以后再查看一下目录情况下。我们可以进入test目录看看,它不象CVS一样,你能够看到什么,因为svn使用了Berkeley数据库来存放代码.
5、建议权限文件(authz)
    svn授权粒度可以是单独用户,也可以是用户组。
    svn的权限分为三种:无权限,读权限,读写权限。无权限当然是禁止访问,读权限也就是说有浏览权限,你可以checkout代码,但不能提交。读写权限当然是最大权限了,读写添加删除都可以。
    svn的授权深度是它最大的特点了,它不仅可以对整个项目授权,甚至于它可以对项目下的某个目录,某个文件进行单独授权。我认为这是非常有用的一个功能。
    咱们还是先来看一个文件示例吧:
    [groups]
    manager = qsg
    user = user1,user2

    [test:/]
    @manager = rw
    user1 = r
    user2 =

    [test:/file1]
    @manager = rw
    user1 =
    user2 = rw
    先来解释一下吧:
    a)groups区段,就如它的名字所说的那样,是定义用户组用的。比如在示例文件中定义了两个组maanger组和user组。
    b)项目区段,每一个区段是一个授权单位。比如示例中有两个项目区段test:/和test:/file1。对于test:/表示对test项目的根目录授权,test:/file1表示对test项目下的/file1文件授权(目录也是一样)。如果我们还需要对test项目的dir1目录进行授权,则我们需要再增加一个test:/dir1区段。
    c)授权。如果要对某个项目的某部分进行项目组授权,则写法为组名前加@符号(如@manager),如果要对单独用户授权,则直接为用户名。等号(=)后面是权限,有三种写法:空(无权限),r(读权限),rw(读写权限)。默认为空,即无权限。
    d)权限优先级。您可能已经看到了我在test:/区段对user1授了读权限,而对user2是无权限,而对于/file1下的文件,我给user1授了无权限,给user2授了读写权限。这个就是权限的优先级问题,即目录越深,权限越是优先。比如test下有一目录/dir1/dir2/dir3/dir4/file5,那么对于用户user1来说,svn首先检查是否有针对user1的对file5的授权,若有,则用此授权;如果没有,再判断user1对dir4的权限,至到/目录。如果至根目录依然没有设置,则使用默认权限(无权限)。
6、重启apache
    该写的配置文件都写了,那我们就重启一下apache服务吧。/etc/init.d/apache2 restart
    然后通过浏览器查看一下吧:
    现在因为我们还没有往svn是添加任何东西,所以我们看到的是"Revision 0: /"
7、svn的简单操作
    svn操作除了命令行以后,在windows和linux的图形化界面下,都有相应的客户端软件。
    a)导入
    初始化以后,库中没有任何东西,所以我们首先要将我们的内容import进去。
    作为一个演示:
    mkdir /tmp/svn
    cd /tmp/svn
    touch file1
    svn import -m "init"   #会提示你输入用户名和口令,用户默认为当前用户,如果不正确,直接回车再输入用户名
    现在通过浏览器查看,我们可以看到现在已经变成"Revision 1: /"而且我们可以看到file1文件也存在了。
    b)Checkout
    checkout的操作是将代码从svn服务器上取下来。
    继续上面的演示:
    cd ..
    rm -rf svn
    svn co    #我们看到在tmp目录下多了一个test目录。
    C)Add和Commit
    cd test
    vi file1    #修改一下file1文件
    touch file2 #新增一个file2文件
    svn stat    #查看一下当前目录的文件改动情况
    我们看到file2前面是一个问号,表示file2还没有加到仓库中。file1前面是一个M,表示修改。
    svn add file2   #添加file2,add与import的区别是add并不会直接加到svn服务器上,而import则会。add只是增加了一个添加作业项。
    svn ci -m "add file2 and modify file1"  #提交
    现在通过浏览器查看,我们可以看到现在已经变成"Revision 2: /"而且我们可以看到file2文件也存在了。
8、常见问题
    a)配置后通过浏览器提示权限禁止
    将/etc/apache2/mods-available/dav_svn.conf中的行和注释掉。本文仅是一个基本配置,如果您想了解这两行的含义可以通过网络搜索一下吧。
    注:本文应该说是svn最简单的一个配置示例了,以后如果有时间我会将svn使用ldap进行身份验证的方法写出来(其实是apache使用ldap进行身份验证)。

 


   DAV svn
   SVNParentPath /data/svn_repos/
   AuthzSVNAccessFile /etc/apache2/erya.authz
   AuthType Basic
   AuthName "Subversion Repository"
   AuthUserFile /etc/apache2/dav_svn.passwd
   Require valid-user

 

[groups]
software = hbli,william,alex,jason,sylvia,drld,tomas
hardware = mike,william,chengjunyao,allen,swallow
admin = william,hbli

[svn:/]
@software = rw
@hardware = rw
@admin = rw

[Adv:/]
#* =
@software = rw
hbli=rw
@admin=rw

[test:/]
@admin = rw

[Go30:/]
#* =
@hardware = rw
@admin = rw

alex:QpJdYNTNjrx2.
hbli:JPgWgyx0AtHZc
william:60bAYmbDC8YTA
sylvia:8GTJ6BdJEqqRY
jason:ZAagpq/DZ6YI.
drld:/jvrfyA3xUXCY
tomas:qkWt6WWeTl0aw
swallow:KjvWyQ1QU1NGM
allan:143FDZehBCJsY
mike:.I3qYoGCC2yD6
chenjunyao:w3lR7OIMUiheg

client save password

客户端的密码保存位置!

C:\Documents and Settings\ablelee\Application Data\Subversion\auth\svn.simple

 

 

阅读(1107) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~