天天看点

企业应用单svn与apache+svn配置整理

 说明:       系统环境:CentOS  5.4  x86_64 

一、所需软件

   http://subversion.tigris.org/downloads/subversion-1.6.6.tar.gz

   http://subversion.tigris.org/downloads/subversion-deps-1.6.6.tar.gz

   http://labs.renren.com/apache-mirror//httpd/httpd-2.2.21.tar.gz

二、单svn

安装明细:安装位置 SVN_DIR=/opt/svn (可自定义)

1、获取svn安装包:  

  1. wget “http://subversion.tigris.org/downloads/subversion-1.6.6.tar.gz”   
  2. wget “http://subversion.tigris.org/dow ... n-deps-1.6.6.tar.gz”   

编译svn以root用户登录:  

  1. tar xfvz subversion-1.6.6.tar.gz   
  2. tar xfvz subversion-deps-1.6.6.tar.gz   
  3. cd subversion-1.6.6   
  4. ./configure –prefix=/opt/svn –without-berkeley-db   

(注:以svnserve方式运行,不加apache编译参数。以fsfs格式存储版本库,不编译berkeley-db)  

  1. make && make install  

在/etc/profile最后加入 SVN Path 以方便操作:  

  1. vi /etc/profile   
  2. PATH=$PATH:/opt/svn/bin   
  3. export PATH   

测试是否安装成功:

  1. svnserve –-version   
  2. 或   
  3. /opt/svn/bin/svnserve –version   

如果显示如下,svn安装成功:

  1. svnserve, version 1.6.6 (r40053)   
  2. compiled Dec 2 2009, 22:37:15   
  3. Copyright (C) 2000-2009 CollabNet.   
  4. Subversion is open source software, see http://subversion.tigris.org/ <script language="JavaScript" src="http://book.book560.com/ads/ads728x15.js"   
  5. type="text/javascript"></script> 
  6. This product includes software developed by CollabNet (http://www.Collab.Net/).  
  7. The following repository back-end (FS) modules are available:  
  8. * fs_fs : Module for working with a plain file (FSFS) repository.  
  9. Cyrus SASL authentication is available.   

2. svn配置建立svn版本库目录可建多个:

新建文件夹:

  1. mkdir -p /opt/svndata/repos   

建立svn版本库: 

  1. svnadmin create /opt/svndata/repos 

修改svn版本库配置文件版本库: 

  1. vi /opt/svndata/repos/conf/svnserve.conf  

内容修改为:

  1. [general]   
  2. anon-access = none   
  3. auth-access = write   

注意:对用户配置文件的修改立即生效,不必重启svn。

passwd.conf [users]是必须的,文件格式如下:

[users]

下面列出要访问svn的用户,每个用户一行,示例:

username = password

配置svn用户访问权限:

  1. vi /opt/svndata/repos/conf/authz.conf 

注意:

* 权限配置文件中出现的用户名必须已在用户配置文件中定义。

* 对权限配置文件的修改立即生效,不必重启svn。

用户组格式:

[groups]

= ,

其中,1个用户组可以包含1个或多个用户,用户间以逗号分隔。

版本库目录格式:

[/项目/目录]

@<用户组名> = <权限>

<用户名> = <权限>

其中,方框号内部分可以有多种写法:

[/],表示根目录及以下,根目录是svnserve启动时指定的,我们指定为/opt/svndata,[/]就是表示对全部版本库设置权限。

[/] 表示对版本库repos设置权限

[/abc] 表示对版本库repos中的abc项目设置权限

[/abc/aaa] 表示对版本库repos中的abc项目的aaa目录设置权限

权限主体可以是用户组、用户或*,用户组在前面加@,*表示全部用户。

权限可以是w、r、wr和空,空表示没有任何权限。

示例:

admin = test1

[/]

@admin = rw

[/abc/aaa]

test2 = rw

[/pass]

test3 =

svn配置完毕。

3. 启动svn建立启动svn的用户 

  1. useradd svn   
  2. passwd svn   

根据提示为用户svn设置密码

允许用户svn访问版本库:

  1. chown -R svn:svn /opt/svndata   

启动svn

  1. su - svn -c "svnserve -d --listen-port 9999 -r /opt/svndata"   

其中:

su - svn表示以用户svn的身份启动svn

-d表示以daemon方式(后台运行)运行

--listen-port 9999表示使用9999端口,可以换成你需要的端口。但注意,使用1024以下的端口需要root权限,不加此参数的默认端口是3690

-r /opt/svndata指定根目录是/opt/svndata

检查:

  1. ps -ef|grep svnserve  

如果显示如下,即为启动成功

svn      30041  4703  0 Oct18 ?        00:00:00 svnserve -d -r /opt/svndata

三、apache+svn

1、下载安装APACHE2,安装文件能到官方网站

  1. wget http://labs.renren.com/apache-mirror//httpd/httpd-2.2.21.tar.gz  
  2. tar xvzf httd-2.2.21.tar.gz   
  3. cd httpd-2.2.21  

安装APR和APR-UTIL

  1. cd srclib/apr   
  2. ./buildconf   
  3. ./configure --prefix=/usr/local/apr   
  4. make && make install   
  5. cd ../apr-util   
  6. ./buildconf   
  7. ./configure --prefix=/usr/local/apr --with-apr=/usr/local/apr   
  8. make && make install   
  9. cd ../..   
  10. ./configure --enable-dav --prefix=/usr/local/apache2 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr --enable-so --enable-rewrite   
  11. make && make install  

2、安装subversion

  1. tar zvxf subversion-1.6.12.tar.gz  
  2. tar zvxf subversion-deps-1.6.12.tar.gz  
  3. cd ./subversion-1.6.12  
  4. ./configure --prefix=/usr/local/subversion --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr --with-apxs=/usr/local/apache2/bin/apxs   
  5. make && make install  

   编译完成后会自动在 apache2/conf/httpd.conf 添加

  1. LoadModule dav_svn_module modules/mod_dav_svn.so   
  2. LoadModule authz_svn_module modules/mod_authz_svn.so  

安装后操作版本库建立及启动同纯svn(账号建立有区别,一会详细介绍)

3、Apache设置

#vi /local/svnroot/apache2/conf/httpd.conf    #编辑Apache服务器的配置文件

下述参数根据自己的安装情况进行相应修改:

ServerRoot "/local/svnroot/apache2"

Listen 80    #可修改为其他的端口,则访问时也要在URL里加上对应的端口号

User svn

Group svn

#前面把svn安装目录的所有文件改为属于svn,这里这样设置,那么Apache运行时就会切换到使用该Linux里的账号svn与组svn

#ErrorLog "logs/error_log"

ErrorLog "|/local/svnroot/apache2/bin/rotatelogs /local/svnroot/apache2/logs/error_log.%Y%m%d.log 86400 480"

#修改Errorlog记录的方式为按天记录,避免一个log文件过大

#    CustomLog "logs/access_log" common

CustomLog "|/local/svnroot/apache2/bin/rotatelogs /local/svnroot/apache2/logs/access_log.%Y%m%d.log 86400 480" common

#修改accesslog记录的方式为按天记录,避免一个log文件过大

在尾部插入下列代码

<Location /repos>    #到时访问的路径就是http://hostip/repos

DAV svn    #使用dav传输

SVNPath /opt/svndata/repos    #repos库在Linux系统中的真实物理路径

AuthzSVNAccessFile /opt/svndata/repos/conf/authz   #配置各个用户访问权限的文件

AuthType Basic

AuthName "Apache SVN repository."    #客户端访问该库时显示的登陆提示信息

AuthUserFile  /opt/svndata/repos/conf/passwd     #记录各个用户名与其密码的文件

#Satisfy Any    #允许匿名访问,若不允许,可注释掉此行

Require valid-user    #要求用户名与密码验证

</Location>

建立账号密码

/usr/local/apache2/bin/htpasswd -bm /opt/svndata/repos/conf/passwd test test

用户名:test 密:test

#-c参数表明创建文件passwd,若此文件已存在,则不要-c参数

#-m表示用MD5加密协议

#-b表示直接在 test后加密码

四、补充

a)通用版本库同步

1、你已经配置好了subversion版本库,可以通过http://*.*.*.*/repos/进行版本的提交和更新,并已导入了初始的一个版本

2、你要通过某种手段建立一个web目录,假设通过http://*.*.*.*/web可以访问

3、然后将http://*.*.*.*/repos/ checkout到web目录,此时你应该可以通过http://*.*.*.*/web看到初始版本的网站具体运行效果

4、拷贝版本库repos中hooks下的post-commit.tmpl为post-commit,并修改post-commit中的

  1. REPOS="$1" 
  2. REV="$2" 
  3. commit-email.pl "$REPOS" "$REV" [email protected]  
  4. log-commit.py --repository "$REPOS" --revision "$REV"  
  5. SVN=/opt、svn/bin/svn  
  6. WEB=/www/web  
  7. SVN update WEB  

复制代码其中SVN=右边改成你实际的svn程序位置

WEB=右边改成你实际的web目录

5、为post-commit添加执行权限

这样,每当你的版本库新提交一个版本时,svn将会自动更新一份到web目录,你就可以通过访问这个web查看到网站的最新运行效果

b)强制svn 提交代码者 添加注释信息

1、打开你建立的项目,里面有个hooks目录,更改 pre-commit.tmpl 为pre-commit

编辑pre-commit 文件内容,找到下面内容,用#注释掉。

  1. $SVNLOOK log -t "$TXN" "$REPOS" | \  
  2.  grep "[a-zA-Z0-9]" > /dev/null || exit 1  
  3.  commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1  
  1. LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c`  
  2. if [ "$LOGMSG" -lt 5 ];  
  3. then  
  4.  echo -e "\nLog message cann't be empty! you must input more than 5 chars as comment!." 1>&2  
  5. exit 1  
  6. fi  
  1. chomd +x pre-commit  

继续阅读