SVN服务搭建

方法一:使用svn服务认证方式

1 系统环境

[root@san-bj-sdzx-sd-svn-01 ~]# uname -r2.6.18-348.6.1.el5[root@san-bj-sdzx-sd-svn-01 ~]# uname -ix86_64[root@san-bj-sdzx-sd-svn-01 ~]# uname -nsan-bj-sdzx-sd-svn-01[root@san-bj-sdzx-sd-svn-01 ~]# cat /etc/redhat-releaseCentOS release 5.9 (Final)

2 保存yum下载的安装包

[root@san-bj-sdzx-sd-svn-01 ~]# sed -i's#keepcache=0#keepcache=1#g' /etc/yum.conf[root@san-bj-sdzx-sd-svn-01 ~]# grep keepcache/etc/yum.conf keepcache=1

3 安装SVN(先配置好yum源)

[root@san-bj-sdzx-sd-svn-01 ~]# yum -y installsubversion

注意:5.9 系统经过yum更新后,会默认安装subversion

[root@san-bj-sdzx-sd-svn-01 ~]# rpm -qa subversionsubversion-1.6.11-11.el5_9subversion-1.6.11-11.el5_9

4 建立svn的版本库目录,帐号目录

[root@san-bj-sdzx-sd-svn-01 ~]# mkdir -p/application/svndata[root@san-bj-sdzx-sd-svn-01 ~]# mkdir -p/application/svnpasswd[root@san-bj-sdzx-sd-svn-01 ~]# ll /application/total 8drwxr-xr-x 2 root root 4096 Jul 12 09:12 svndatadrwxr-xr-x 2 root root 4096 Jul 12 09:12 svnpasswd

5 启动svn

[root@san-bj-sdzx-sd-svn-01 ~]# svnserve -d -r/application/svndata[root@san-bj-sdzx-sd-svn-01 ~]# netstat -lnt|grep 3690tcp       0      0 :::3690[root@san-bj-sdzx-sd-svn-01 ~]# lsof -i tcp:3690COMMAND   PIDUSER   FD   TYPE DEVICE SIZE/OFF NODE NAMEsvnserve 2523 root   3u  IPv6  12143     0t0  TCP *:svn (LISTEN

6 创建项目版本库

[root@san-bj-sdzx-sd-svn-01 ~]# svnadmin create/application/svndata/sadoc[root@san-bj-sdzx-sd-svn-01 ~]# tree/application/svndata/sadoc//application/svndata/sadoc/|-- README.txt|-- conf|   |-- authz|   |-- passwd|   `--svnserve.conf|-- db|   |-- current|   |-- format|   |-- fs-type|   |--fsfs.conf|   |--min-unpacked-rev|   |--rep-cache.db|   |-- revprops|   |   `-- 0|   |       `-- 0|   |-- revs|   |   `-- 0|   |       `-- 0|   |--transactions|   |--txn-current|   |--txn-current-lock|   |--txn-protorevs|   |-- uuid|   `--write-lock|-- format|-- hooks|   |--post-commit.tmpl|   |--post-lock.tmpl|   |--post-revprop-change.tmpl|   |--post-unlock.tmpl|   |--pre-commit.tmpl|   |--pre-lock.tmpl|   |-- pre-revprop-change.tmpl|   |--pre-unlock.tmpl|   `--start-commit.tmpl`-- locks    |--db-logs.lock    `-- db.lock10 directories, 28 files

7 配置用户访问

7.1 备份配置文件

[root@san-bj-sdzx-sd-svn-01 ~]# cd/application/svndata/sadoc/conf/[root@san-bj-sdzx-sd-svn-01 conf]# lltotal 12-rw-r--r-- 1 root root 1080 Jul 12 09:26 authz-rw-r--r-- 1 root root 309 Jul 12 09:26 passwd-rw-r--r-- 1 root root 2279 Jul 12 09:26 svnserve.conf[root@san-bj-sdzx-sd-svn-01 conf]# /bin/cp svnserve.confsvnserve.conf.zhangjie.$(date +%F)[root@san-bj-sdzx-sd-svn-01 conf]# lltotal 16-rw-r--r-- 1 root root 1080 Jul 12 09:26 authz-rw-r--r-- 1 root root 309 Jul 12 09:26 passwd-rw-r--r-- 1 root root 2279 Jul 12 09:26 svnserve.conf-rw-r--r-- 1 root root 2279 Jul 12 09:29 svnserve.conf.zhangjie.2013-07-12

7.2 修改配置文件

修改前查看:

[root@san-bj-sdzx-sd-svn-01 conf]# egrep"\-access|\-db =" svnserve.conf# anon-access = read# auth-access = write# password-db = passwd# authz-db = authz

sed修改

[root@san-bj-sdzx-sd-svn-01 conf]# sed -i -e 's/#anon-access = read/anon-access=none/g' -e 's/# auth-access =write/auth-access=write/g' -e 's%# password-db = passwd%password-db =/application/svnpasswd/passwd%g' -e 's%# authz-db = authz%authz-db =/application/svnpasswd/authz%g' svnserve.conf[root@san-bj-sdzx-sd-svn-01 conf]# egrep"\-access|\-db =" svnserve.conf               anon-access=noneauth-access=writepassword-db = /application/svnpasswd/passwdauthz-db = /application/svnpasswd/authz

修改前后对比

[root@san-bj-sdzx-sd-svn-01 conf]# diff svnserve.confsvnserve.conf.zhangjie.2013-07-12 12,13c12,13< anon-access=none< auth-access=write---> # anon-access = read> # auth-access = write20c20< password-db = /application/svnpasswd/passwd---> # password-db = passwd27c27< authz-db = /application/svnpasswd/authz---> # authz-db = authz

7.3 拷贝密码文件到指定目录,并修改权限

[root@san-bj-sdzx-sd-svn-01 conf]# cp authz passwd/application/svnpasswd/[root@san-bj-sdzx-sd-svn-01 svnpasswd]# chmod 700authz passwd [root@san-bj-sdzx-sd-svn-01 svnpasswd]# lltotal 8-rwx------ 1 root root 1158 Jul 12 09:55 authz-rwx------ 1 root root 339 Jul 12 09:52 passwd

7.4 创建用户(红色为添加内容)

[root@san-bj-sdzx-sd-svn-01 svnpasswd]# cat passwd ### This file is an example password file forsvnserve.### Its forat is similar to that of svnserve.conf. Asshown in the### example below it contains one section labelled[users].### The name and password for each user follow, oneaccount per line.[users]# harry = harryssecret# sally = sallyssecretzhangjie = 123456test = 123456

7.5 配置权限

[root@san-bj-sdzx-sd-svn-01 svnpasswd]# tail -6 authz SA = zhangjieSA_TEST = test[sadoc:/]@ett_sa = rw@ett_wangguan = r

8 重新启动SVN

[root@san-bj-sdzx-sd-svn-01 svnpasswd]# pkill svnserve[root@san-bj-sdzx-sd-svn-01 svnpasswd]# netstat-lnt|grep 3690[root@san-bj-sdzx-sd-svn-01 svnpasswd]# svnserve-d  -r /application/svndata/[root@san-bj-sdzx-sd-svn-01 svnpasswd]# netstat-lnt|grep 3690tcp       0      0 :::3690                     :::*                        LISTEN

9 客户端使用不在描述

注意:不过要说明一下客户端连接的时候使用的url

如svn://192.168.3.123/sadoc

方法二:使用apache svn服务认证方式

yum -y install httpd httpd-devel subversionmod_dav_svn expectsed -i 's#\#ServerName www.example.com:80#ServerName*:80#g' /etc/httpd/conf/httpd.conf\cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.zhangjie.$(date+%F)cat >>/etc/httpd/conf/httpd.conf<
DAV svnSVNListParentPath onSVNParentPath /application/svndataAuthType BasicAuthName "Subversion repository"AuthUserFile /application/svnpasswd/passwdAuthzSVNAccessFile /application/svnpasswd/authz.confRequire valid-userEOF[root@SVN_Server conf]# service httpd startStarting httpd:                   [  OK  ]

配置文件说明

 (apache下的位置)DAV svnSVNListParentPath on (打开这个选项可以列出ParentPath下面的所有库)SVNParentPath /application/svndata  (指明资源库的路径)AuthType Basic  (认证类型为基本认证 )AuthName "Subversion repository"   (认证名称,将在IE界面弹出一个对话框,其标题)AuthUserFile /application/svnpasswd/passwd  (认证密码文件,要使用htpasswd-c /application/svnpasswd/passwd test创建test用户,如果创建第二个用户则不加-c选项,删除为-D )AuthzSVNAccessFile /application/svnpasswd/authz  (目录权限文件)Require valid-user (要求验证用户,即不能匿名访问)

创建密码文件及权限文件存放目录

mkdir -p  /application/svnpasswd/

手动创建并编辑权限配置文件authz

[sadoc:/]test = rwzhangjie = rw

创建版本库sadoc

svnadmin create /application/svndata/sadoc

访问版本库名称(这里的版本库名称为sadoc)

注:svn服务结合apache使用的话,在服务端不用启动svn服务(也就是不用svnserve -d -r /application/svndata/

安装脚本

#!/bin/bashdatadir='/application/svndata'passwddir='/application/svnpasswd'dirname='sadoc'user='test'passwd='123456'yum -y install httpd httpd-devel subversionmod_dav_svn expectmkdir -p ${datadir}mkdir -p ${passwddir}svnadmin create ${datadir}/${dirname}cp ${datadir}/${dirname}/conf/svnserve.conf${datadir}/${dirname}/conf/svnserve.conf.bak.$(date +%F)cp ${datadir}/${dirname}/conf/authz  ${passwddir}cp ${datadir}/${dirname}/conf/passwd  ${passwddir}chmod 700 ${passwddir}/*cd ${datadir}/chown -R apache:apache ${dirname} cat > /etc/httpd/conf.d/subversion.conf<
DAV svnSVNListParentPath onSVNPath "${datadir}/${dirname}"AuthType BasicAuthName "Subversion repository"AuthUserFile "${passwddir}/authfile"Require valid-userSVNAutoversioning onModMimeUsePathInfo onEOFecho "[groups]admin = test[${dirname}:/]test = rw">${passwddir}/authzecho '#!/usr/bin/expectspawn /usr/bin/htpasswd -c '${passwddir}'/authfiletestexpect "New password:"send "'${passwd}'\n"expect "Re-type new password:"send "'${passwd}'\n"interact'>/tmp/htpasswd.sh/usr/bin/expect /tmp/htpasswd.shchown apache:apache ${passwddir}/authfileecho "[users]${user} = ${passwd}">${passwddir}/passwdsed -i -e 's/# anon-access = read/anon-access=none/g'\-e 's/# auth-access = write/auth-access=write/g' \-e 's%# password-db = passwd%password-db ='${passwddir}'/passwd%g' \-e 's%# authz-db = authz%authz-db ='${passwddir}'/authz%g' \$datadir/$dirname/conf/svnserve.conf/etc/init.d/httpd restartsvnserve -d -r ${datadir}/