Chinaunix首页 | 论坛 | 博客
  • 博客访问: 26267146
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: LINUX

2010-03-13 18:09:50

linux中配置SVN专题

[整理人: 遥方 整理时间:2010-3-13]

环境:64位的centos 2.6.9-67 的内核

安装篇

一、安装Apache

安装脚本如下:

mkdir /usr/svn/ && cd /usr/svn/

wget /apache/httpd-2.2.4.tar.gz2

tar -jxvf httpd-2.2.4.tar.bz2  &&  cd httpd-2.2.4

./configure --enable-dav --enable-so --enable-nonportable-atomics

说明:

其中--enable-dav允许Apache提供DAV协议支持,--enable-so允许运行时加载DSO模块,--enable-nonportable-atomics可以在486以上的CPU上启用更加高效的基于互斥执行的原子操作。前两个参数是必须要加的,你还可以根据您的需要添加其他的参数。这里我们使用最简的安装模式。

Make && make install       

启动:/usr/local/apache2/bin/apachectl  start

 

二、安装SVN

下载包的地址:

1.4.3.tar.bz2

deps-1.4.3.tar.bz2

解压至同一目录下,这样subversion会自动地编译、安装依赖库;

tar -jxvf subversion-1.4.3.tar.bz2

tar -jxvf subversion-deps-1.4.3.tar.bz2        将两个包解压缩。自动会解压缩到相同的一个目录下面我想应该是依赖包的原因吧。

然后进入到解压缩的目录里面

./configure --with-apxs=/usr/local/apache2/bin/apxs --enable-shared

说明:

其中,--with-apxs 用于生成apache httpdmod_dav_svnmod_authz_svn模块

Make && make install       

 

三、创建 repository

假设我们把版本库建立在/home目录下,那么执行mkdir repository新建版本库文件夹,通过svnadmin create repository/test命令可创建名为test的版本库。若创建成功,则subversion的安装便已成功完成。

具体操作步骤:

# cd /home && mkdir svnroot && cd svnroot

# mkdir repository

# svnadmin create repository/test        

发现就会自动生成如下的几个文件:

conf  dav  db  format  hooks  locks  README.txt

 

四、导入源代码

现在我们有了自已的一个版本库了。现在就可以导入源代码进来

目前我的目录是:/home/svnroot/repository 

# ls

Test    

在这里面我们再运行:mkdir -p import/{trunk,branches,tags} 此命令

就可以创建新的文件目录层次出来 即import目录下面再包含三个子目录出来!

下面的语句:

svn import /home/svnroot/repository/import file:///home/svnroot/repository/test/ -m "Init repository"

这条语句将把路径/home/svnroot/repository/import下的目录和文件导入到你创建的Subversion 仓库中去,

运行此语句之后的输出:

新增           /home/svnroot/repository/import/trunk

新增           /home/svnroot/repository/import/branches

新增           /home/svnroot/repository/import/tags

 

提交后的版本为 1

 

五、版本库所有者与权限修改

目前,repository目录依然为root用户所有,默认权限为755,为了让用户能够通过apache正常读写该目录,我们需要先将该目录以及该目录的上层目录svnroot的所有权交给apache 用户,然后为了安全起见,将repositorysvnroot目录的权限都改为700

操作步骤:

第一步:打开apache配置文件/usr/local/apache2/conf/httpd.conf,确保将UserGroup 设置为

User www

Group www         

第二步:进入/home目录,修改svn仓库的所有者

chown -R www:www svnroot

chmod 700 svnroot

chmod 700 svnroot/repository

 

六、生成身份认证文件

身份认证文件保存用户的用户名和密码,用于确定用户身份。

命令: /usr/local/apache2/bin/htpasswd -cm /home/svnroot/repository/pwdfile test

说明: 其中-c表示创建身份认证文件,-m则表示密码使用md5加密。

这样就可以创建了一个用户test

最后将pwdfile文件的所有者改为www并将其权限设置为700

chown -R www:www pwdfile        

chmod 700 pwdfile               

 

七、创建授权文件

其中,trunk表示主干,branches则为项目的分支,tags存放某个版本的快照。习惯上来说,大多数开发人的本地拷贝都来自truck目录,所以每个开发人员都应有trunk目录的读写权限,这样他们才能正常的进行日常的开发;而分支目录一般在,如某些开发人员需要大幅修改代码以增加新功能,或者代码进入较为稳定的阶段,开始bug去处工作等情况下使用,尽管这意味着这些代码总是有固定的一个或几个开发人员维护,但是基于“源代码共同拥有”的原则,我们还是可以将其设置为所有用户具有读写权限;tags目录则一般用于某个版本的发布,比如当项目到达版本1834时,release1已经完成,那么就可以将它复制到tags目录,作为一个快照存放,取一个好记得多的名字,比如release1(似乎应该只让某些人有写入权限,这样可以防止快照被破坏,可是即使被破坏了又怎么样呢,不要忘了我们在使用一个版本管理软件)。

根据authz文件的语法,我么可以把上述的设置表达成这样:(注意每个有效配置行的前面都不能有空格)

 

   [groups]                                          //群组设置

   g_pm = micheal                                    //某群组里的成员

   g_dev = harry,sally

 

   [test:/]                             //仓库test的根目录的访问权限

   @g_pm = r                            //g_pm组用户具有读和写权限,’@’开头的表示群组设置

   @g_dev = r                               //g_dev用户具有读写权限

 

   [test:/trunk]                       //仓库testtrunk目录的访问权限

   @g_pm = rw                       //g_pm组用户具有读和写权限,’@’开头的表示群组设置

   @g_dev = rw                       //g_dev用户具有读写权限

 

   [test:/branches]               //仓库testbranches目录下的访问权限

   @g_pm = rw                   //g_pm组用户具有读和写权限,’@’开头的表示群组设置

   @g_dev = rw                 //g_dev用户具有读写权限

 

   [test:/tags]                  //仓库testtags目录下的访问权限

   @g_pm = rw                   //g_pm组用户具有读和写权限,’@’开头的表示群组设置

   @g_dev = rw                  //g_dev用户具有读写权限

 

 

如果需要对某个用户授权,可以这么写:

   [test:/branches]               //仓库testbranches目录下的访问权限

   sally = r                       //sally用户具有读权限

 

编辑完成之后将此文件的权限变更过来 

不要忘记将authz文件的所有者改为apache,并且将其权限设为700

 

八、修改Apache配置文件

vi /usr/local/apache2/conf/httpd.conf

确保以下两行已被subversion正确添加

LoadModule dav_svn_module     modules/mod_dav_svn.so

LoadModule authz_svn_module   modules/mod_authz_svn.so

接着,在httpd.conf的最后添加以下内容

  

   DAV svn

   SVNParentPath /home/svnroot/repository/                           

 

   AuthType Basic                                                                       

   AuthName "Subversion Repository"                                        

   AuthUserFile /home/svnroot/repository/pwdfile                   

 

   AuthzSVNAccessFile /home/svnroot/repository/authz         

   Satisfy Any                                                                            

   Require valid-user                                                                  

  

 

其中/svn表示一个url的模式,匹配形如urlSVNParentPath 指定的目录下的所有项目都被subversion 认为是合法的版本库;AuthzSVNAccessFile为授权文件 ;AuthType 则制定了客户端身份认证机制,Basic表示http基本认证机制;AuthUserFile就是先前创建的密码文件;Satisfy Any Require valid-user告诉apache所有用户先使用匿名方式访问版本库,只有当访问控制策略要求一个真实的用户名时,apache才会对客户端进行身份验证,这是使用得最多的一种授权方式。

 

最后,使用如下命令重启apache httpd,打开浏览器访问这个URL便可访问版本库了,当然,受权限的限制,必须是合法用户才能访问且具有相应的权限的目录。

 

安装配置过程中 常见的BUG

BUG403 不让访问

解决:

[root@master repository]# more authz

[groups]

g_pm = test

[test:/]

@g_pm=r

 

[test:/trunk]

@g_pm=rw

 

[test:/branches]

@g_pm=rw

 

[test:/tags]

@g_pm=rw

 

添加一个我们的权限控制配置文件进来。这样的话就可以限制哪个账号对哪些目录具备了什么样的操作权限了。非常方便哦!到时我们可以给一个开发的账号与一个其上管理员的账号信息出来!

 

BUG二:Server sent unexpected return value (403 Forbidden) in response to CHECKOUT

在客户端想要checkout 的时候报403错误!

还是一样的权限错误。要注意好是否有写的权限

 

 

BUG3: 在安装SVN的时候可能会报

如果在执行make的时候报错:

could not read symbols: Bad value   SVN

我上网找了一下发现好像是说要修改MakeFile文件

解决方法:修改MakeFile文件里面的

CFLAGS = -fPIC -g -O2  -g -O2 -pthread  $(EXTRA_CFLAGS)      添加-fPIC

保存:必须make distclean->./configure->make

 


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