环境

Linux version 2.6.9-89.ELlargesmp  (gcc version 3.4.6 20060404 (Red Hat 3.4.6-11)) #1 SMP Mon Apr 20 10:43:12 EDT 2009
 

 

安装篇

一、安装Apache

安装脚本如下:

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

下载 httpd-2.2.17.tar.gz

tar xvzf httpd-2.2.17.tar.gz  &&  cd httpd-2.2.17

安装 apr

现在在httpd-2.2.17目录下。

cd srclib/apr

./configure -prefix=/usr/local/apr

make

make install

安装 apr-util

cd srclib/apr-util

./configure -prefix=/usr/local/apr-util -with-apr=/usr/local/apr

make

make install

回到httpd-2.2.17目录下

./configure  -enable-dav -enable-so --prefix=/usr/local/apache2/ -with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util

make

make install

 

说明:

其中--enable-dav允许Apache提供DAV协议支持,--enable-so允许运行时加载DSO模块,前两个参数是必须要加的,你还可以根据您的需要添加其他的参数。这里我们使用最简的安装模式.      

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

 

二、安装SVN

下载 sqllite

tar xvzf sqlite-amalgamation-3.6.13.tar.gz  &&  cd sqlite-3.6.13

./configure --prefix=/usr/local/sqlite

make

make install

下载 subversion-1.6.15.tar.gz 

tar xvzf subversion-1.6.15.tar.gz  &&  cd subversion-1.6.15

 

 

./configure --with-apxs=/usr/local/apache2/bin/apxs --prefix=/usr/local/subversion -with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-ssl  --enable-maintainer-mode --with-sqlite=/usr/local/sqlite

make

make install

说明:

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

三、创建 repository

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

 

具体操作步骤:

groupadd svnroot

 

useradd -g svnroot svnroot           (红色表示用户组,黑色表示用户名)   

passwd svnroot (键入svnroot的口令)

 

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

# mkdir repository

# /usr/local/subversion/bin/svnadmin create repository/test        

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

conf  dav  db  format  hooks  locks  README.txt

 

四、导入源代码

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

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

# ls

Test    

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

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

下面的语句:

/usr/local/subversion/bin/svn import /home/svnroot/repository/import file:///home/svnroot/repository/test/ -m "Init repository"

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

运行此语句之后的输出:

新增           /root/repository/import/trunk

新增           /root/repository/import/branches

新增           /root/repository/import/tags

 

提交后的版本为 1

 

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

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

 

操作步骤:

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

User svnroot

Group svnroot   

在最后新加

<Location /svn>

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

 

      

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

chown -R svnroot:svnroot svnroot

chmod 700 root

chmod 700 svnroot/repository

 

六、生成身份认证文件

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

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

/usr/local/apache2/bin/htpasswd -m /home/svnroot/repository/pwdfile daiyanfei

/usr/local/apache2/bin/htpasswd -m /home/svnroot/repository/pwdfile guolei

/usr/local/apache2/bin/htpasswd -m /home/svnroot/repository/pwdfile zhouwenming

/usr/local/apache2/bin/htpasswd -m /home/svnroot/repository/pwdfile daishuwei

/usr/local/apache2/bin/htpasswd -m /home/svnroot/repository/pwdfile zhangwu

/usr/local/apache2/bin/htpasswd -m /home/svnroot/repository/pwdfile zhangyueshan

/usr/local/apache2/bin/htpasswd -m /home/svnroot/repository/pwdfile yuhaidong

 

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

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

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

chown -R svnroot: svnrootpwdfile        

chmod 700 pwdfile               

 

七、创建授权文件

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

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

 vi /home/svnroot/repository/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文件的所有者改为svnroot,并且将其权限设为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

 

 

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

 

安装配置过程中常见的BUG

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

 

在安装软件时,可能出现各种库文件找不到的情况。。

如果是内部错误 vi /usr/local/apache2/logs/error_log 看看是否这里不对