linux下安装subversion
测试环境是rh6.3 httpd-2.2.9.tar.gz subversion-1.6.20.tar.gz subversion-deps-1.6.20.tar.gz
目录:
一.安装subversion
二.配置subversion
三. 验证安装

附:安装过程中遇到的问题

一. 安装subversion
1.安装subversion 所需要的组件
#yum install -y libxml openssl zlib
#tar -zxvf libxml2-2.7.3.tar.gz
#cd libxml2-2.7.3
#./configure
#make
#make install
#tar -zxvf openssl-0.9.8k.tar.gz
#cd openssl-0.9.8k
#./configure
# make
 #make install
#tar -jxvf zlib-1.2.3.tar.bz2
#cd zlib-1.2.3
#./configure
#make
#make install
 
2. 下载subversion-1.6.20.
编译:
以root用户登录。
subversion-1.6.20.tar.gz
subversion-deps-1.6.20.tar.gz
#tar –jxvf subversion-1.6.20.tar.gz
#tar –jxvf subversion-deps-1.6.20.tar.gz
这两个自动解压成一个包 subversion-1.6.20.
subversion-deps包有四个目录zlib apr apr-util neon这四个目录都是依赖包,编译subversion所必须的代码.

#cd subversion-1.6.20.
3. 安装
#./configure --prefix=/opt/svn --without-berkeley-db --with-zlib=/usr/share/doc/zlib-1.2.3/
我的zlib为yum安装,所以目录是这个,如果你也用yum安装,查找安装位置可用rpm -qa|grep zlib,找到安装包的名称,rpm -ql 安装包名来查找。
(注:以svnserve方式运行,不加apache编译参数。以fsfs格式存储版本库,不编译berkeley-db)
#make clean
#make && make install
如果报错如下:  
configure: error: –with-zlib requires an argument. 
安装zlib

4.测试:
#svnserve --version
如果显示如下,安装成功:
svnserve, version 1.6.20 (r1426281)
   compiled Feb  2 2013, 10:32:36

Copyright (C) 2000-2009 CollabNet.
Subversion is open source software, see http://subversion.apache.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).

The following repository back-end (FS) modules are available:

* fs_fs : Module for working with a plain file (FSFS) repository.
二. 配置subversion
建立版本库目录,可建多个:
#mkdir -p /opt/svndata/repos1  项目1
#mkdir -p /opt/svndata/repos2  项目2
建立版本库
#svnadmin create /opt/svndata/repos1
#svnadmin create /opt/svndata/repos2
修改版本库配置文件:
版本库1:
#vi /opt/svndata/repos1/conf/svnserve.conf
内容修改为:
[general]
anon-access = none
auth-access = write
password-db = /opt/svn/conf/pwd.conf
authz-db = /opt/svn/conf/authz.conf
realm = repos1
版本库2:
#vi /opt/svndata/repos2/conf/svnserve.conf
内容修改为:
[general]
anon-access = none
auth-access = write
password-db = /opt/svn/conf/pwd.conf
authz-db = /opt/svn/conf/authz.conf
realm = repos2
命令前面不能有空格,否则用客户端连接时报错。
即除realm = repos2外,其他与版本库1配置文件完全相同。如果有更多的版本库,依此类推。
配置允许访问的用户:
#vi /opt/svn/conf/pwd.conf
为了简化配置,2个版本库共用1个用户配置文件。如有必要,也可以分开。
注意:对用户配置文件的修改立即生效,不必重启svn。
文件格式如下:
[users]
=
=
其中,[users]是必须的。下面列出要访问svn的用户,每个用户一行。示例:
[users]
laya = 123
test = 456
配置用户访问权限:
#vi /opt/svn/conf/authz.conf
为了简化配置,3个版本库共用1个权限配置文件/opt/svn/conf/pwd.conf。如有必要,也可以分开。文件中定义用户组和版本库目录权限。
注意:
* 权限配置文件中出现的用户名必须已在用户配置文件中定义。
* 对权限配置文件的修改立即生效,不必重启svn。

用户组格式:
[groups]
= ,
其中,1个用户组可以包含1个或多个用户,用户间以逗号分隔。
版本库目录格式:
[:/项目/目录]
@ =
=
其中,方框号内部分可以有多种写法:
/,表示根目录及以下。根目录是svnserve启动时指定的,我们指定为/opt/svndata。这样,/就是表示对全部版本库设置权限。
repos1:/,表示对版本库1设置权限
repos2:/abc, ,表示对版本库2中的abc项目设置权限
repos2:/abc/aaa, ,表示对版本库2中的abc项目的aaa目录设置权限
权限主体可以是用户组、用户或*,用户组在前面加@,*表示全部用户。权限可以是w、r、wr和空,空表示没有任何权限。
示例:
[groups]
admin = laya,mike,john
###group define
[/]
@admin = rw
* = r
[repos1]
@admin = rw
test = rw
[repos2]
test =
删除无用文件:
rm /opt/svndata/repos1/conf/authz
rm /opt/svndata/repos1/conf/passwd
rm /opt/svndata/repos2/conf/authz
rm /opt/svndata/repos2/conf/passwd
三. 验证安装
建立启动svn的用户:
useradd svn
passwd svn
根据提示为用户svn设置密码:123456
允许用户svn访问版本库:
chown -R svn:svn /opt/svndata

启动svn:
svnserve -d -r /opt/svndata
svnserve -d --listen-port 3691 -r /opt/svndata”
其中:
-d表示以daemon方式(后台运行)运行
--listen-port 3691表示使用3691端口,可以换成你需要的端口。但注意,使用1024以下的端口需要root权限
-r /opt/svndata指定根目录是/opt/svndata

检查:
ps -ef|grep svnserve
如果显示如下,即为启动成功:
svn       3030     1  0 15:22 ?        00:00:00 svnserve -d --listen-port 3691 -r /opt/svndata/
--------------------------------------------------------------------------------------------
几点需要注意的问题:
1.服务器已经显示启动了svn,但是客户端访问不了
问题可能是linux的防火墙导致,查看iptables的配置,开放svn的服务器端口。
2.若指定了端口号,访问时要更改端口号才能访问。svn://192.168.1.37:3691/test


备份svn的脚本
#!/bin/sh
# subversion data backup script

DATE=`date +%Y%m%d`
BakDir=/opt/backup
#SvnDir=/opt/svn
cd /opt
tar czvf $BakDir/25svnadmin$DATE.tar.gz svnadmin

########## End ############
删除svn的备份
#!/bin/bash

#删除svn的备份
#/opt/backup

for file in /opt/backup
do
#echo $file
find $file -mtime +90 -exec rm -rf {}  \;
done
exit