在Linux下,SVN服务器的安装

时间:2023-01-31 18:16:04

最近想在VPS上搭建一个SVN服务,方便在外面使用时存放代码。

上次介绍过在Windows上搭建SVN服务器,这次来谈谈在Linux上搭建吧,系统是CentOS。

网上有不少教程,可是没有一篇完整的,总会缺点什么或者有点错误,经过综合与比较,并多番测试,做了如下教程,仅供菜鸟参考哈。

svn服务器有2种运行方式:
1.独立服务器 (例如:svn://xxx.com/xxx);
2.借助apache。(例如:http://svn.xxx.com/xxx);
为了不依赖apache,选择第一种方式-独立的svn服务器。
svn存储版本数据也有2种方式:
1.bdb;
2.fsfs。
因为bdb方式在服务器中断时,有可能锁住数据,所以还是fsfs方式更安全一点,我也选择这种方式。

1.下载subversion安装包之后解压,进入subversion目录

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

2.编译
首先检测系统有没有安装SSL:

find / -name opensslv.h

如果找不到,就执行如下命令进行安装:

yum install openssl
yum install openssl-devel

安装之后用find / -name opensslv.h命令找到opensslv.h所在的目录,即下列--with-openssl=后面的路径,
编译:

./configure --prefix=/usr/local/svn --with-openssl=/usr/include/openssl --without-berkeley-db

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

如果编译时报如下错误:

no acceptable C compiler found in $PATH

则使用如下命令安装gcc后再编译:

yum -y install gcc

如果最后出现下面WARNING,我们直接忽略即可,因为不使用BDB存储。

configure: WARNING: we have configured without BDB filesystem support
You don't seem to have Berkeley DB version 4.0.14 or newer
installed and linked to APR-UTIL. We have created Makefiles which
will build without the Berkeley DB back-end; your repositories will
use FSFS as the default back-end. You can find the latest version of
Berkeley DB here:
http://www.sleepycat.com/download/index.shtml

3.安装
为避免出现以下错误

error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory

先执行以下操作:
(1)、编辑/etc/ld.so.conf文件:

vi /etc/ld.so.conf

添加下面一行:

/usr/local/lib

(2)、保存后运行ldconfig:

/sbin/ldconfig

注:ld.so.conf和ldconfig用于维护系统动态链接库。

安装

make && make install

安装完成,执行以下命令测试:

/usr/local/svn/bin/svnserve --version

为了方便下操作,下面将SVN的BIN添加到PATH:

vi /etc/profile

倒数第二行添加:

PATH=/usr/local/svn/bin:$PATH

保存后,使其立即生效:

source /etc/profile

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

mkdir -p /home/svndata/repos

建立版本库:

svnadmin create /home/svndata/repos

修改版本库配置文件:

vi /home/svndata/repos/conf/svnserve.conf

内容修改为:

[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
realm = repos

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

添加用户及密码:

vi /home/svndata/repos/conf/passwd

添加如下代码并保存:

[users]
wll = 123456

配置svn用户访问权限:

vi /home/svndata/repos/conf/authz

注意:
* 权限配置文件中出现的用户名必须已在用户配置文件中定义。
* 对权限配置文件的修改立即生效,不必重启svn。
用户组格式:
[groups]
= ,
其中,1个用户组可以包含1个或多个用户,用户间以逗号分隔。
版本库目录格式:
[<版本库>:/项目/目录]
@<用户组名> = <权限>
<用户名> = <权限>
其中,方框号内部分可以有多种写法:
[/],表示根目录及以下,根目录是svnserve启动时指定的,我们指定为/home/svndata,[/]就是表示对全部版本库设置权限。
[repos:/] 表示对版本库repos设置权限;
[repos:/abc] 表示对版本库repos中的abc项目设置权限;
[repos:/abc/aaa] 表示对版本库repos中的abc项目的aaa目录设置权限;
权限主体可以是用户组、用户或*,用户组在前面加@,*表示全部用户。
权限可以是w、r、wr和空,空表示没有任何权限。
示例:

[groups]
admin = wll
[/]
@admin = rw
# [repos:/abc/aaa]
# king = rw
# [repos:/pass]
# king =

svn配置完毕。

建立启动svn的用户:

useradd svn
passwd svn

根据提示,为用户svn设置密码。
允许用户svn访问版本库:

chown -R svn:svn /home/svndata

启动svn:

su - svn -c "svnserve -d --listen-port 9999 -r /home/svndata"

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

5.将svn加入到开机启动
编辑rc.local文件:

vi /etc/rc.d/rc.local

加入如下启动命令:

/usr/local/svn/bin/svnserve -d --listen-port 9999 -r /home/svndata

如果想停止svn,则使用如下命令:

killall svnserve

如果想将svn作为服务:
在/etc/rc.d/init.d/目录下新建名为svn的文件并设置权限为755,并添加如下代码:

#!/bin/bash
# build this file in /etc/rc.d/init.d/svn
# chmod 755 /etc/rc.d/init.d/svn
# centos下可以用如下命令管理svn: service svn start(restart/stop)
SVN_HOME=/home/svndata
if [ ! -f "/usr/local/svn/bin/svnserve" ]
then
echo "svnserver startup: cannot start"
exit
fi
case "$1" in
start)
echo "Starting svnserve..."
/usr/local/svn/bin/svnserve -d --listen-port 9999 -r $SVN_HOME
echo "Finished!"
;;
stop)
echo "Stoping svnserve..."
killall svnserve
echo "Finished!"
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: svn { start | stop | restart } "
exit 1
esac

6.连接SVN
安装TortoiseSVN,重启系统。
启动TortoiseSVN并在地址栏中输入svn://192.168.x.x:9999/repos
根据提示输入用户名与密码后就可以使用版本控制啦。


开篇请允许我一段废话:公司最近用了台linux做服务器,还要做版本控制来控制共享文件以及程序。也许,这在软件公司可能是司空见惯的事情,但是对于一个面向物流机械制造以及工控的国企来说,也许是一个不小的改进了。负责服务器支持以及版本控制的事情自然落到我的身上。首先,我想到的是利用大学里学过的CVS,本来Windows上很简单的事情,但是到了Linux上,一切就变得麻烦了。按照网上的教程走,CVS服务器的安装与启动都ok,但该死的init命令死活不过,老是说2702端口拒绝访问,对此上网查了,不少人碰到,但没有一个人真正提出解决方案的。于是乎,在网上看到了一个解决方案——SVN,救星啊。比之CVS好伺候多了。

     言归正传,下面开始介绍在Linux下,SVN服务器的安装,安装的是网上目前最新的1.5.5版本

     方案一:以下内容我参照了网上的相关安装手册,感谢原作者的辛勤劳动:

root用户登陆系统。
(1)
安装Apache
#cd httpd-2.2.11#./configure --enable-dav --enable-so --enable-maintainer-mode
#make
#make install

/*注意当安装Berkeley DB是提供了版本库的一种存储格式,Berkeley DB是Oracle提供的一种嵌入式数据库格式,不装也不所谓,而且重要的是与Apr-util相冲突!*/
安装Berkeley DB
#cd db-4.4.20 /build_unix/
#../dist/configure --prefix=/usr/local/bdb
#make
#make install
(2)解压subversion-deps-1.5.5.tar.gz

内含aprapr-utilneonserfzlib四个包

安装neonserfzlib——1)./configure 2)make 3)make install

安装apr :

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

make && make install

安装apr-util

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

注意:./configure前要先cd到压缩包解压后的目录内


安装Subversion(不用BerkeleyDB)
#tar -zxvf subversion-1.2.3.tar.gz
#cd subversion-1.2.3
#./configure --prefix=/usr/localsubversion --with-apxs=/usr/local/apache2/bin/apxs --with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apr/bin/apu-1-config

#make
#make install

/* 
你可以用以下命令检验subversion是否安装成功 */
#svnadmin --version

 

顺便说一下:linux下的创建目录、用户、组、修改权限等等,都是可以在linux的窗体系统中直接操作的,类似win32。


——————————————————————————华丽的分割线————————————————————————————————

      在http://www.subversion.org.cn/?action-viewnews-itemid-85下载最新的版本,subversion-1.5.5与subversion-deps-1.5.5必须都下载,而且要先安装subversion-deps-1.5.5,两者关系经我查阅是如下的关系(再次转载,谢谢原创者的贡献):

 

subversion服务器是不需要apache的,但是可以使用apache,视具体情况来选择。

1、如果只要通过file://或svn://来访问,则不需要apache,只安装svn即可,使用svnserve来作为服务。

2、如果你要建立一个可以通过http://或https://来访问的版本库服务器,则你需要使用apache。

基于apache配置,请看http://bbs.iusesvn.com/thread-158-1-1.html 。

客户端

在windows下,不管你要访问的是什么类型的服务器,只要安装一个TortoiseSVN就可以了,开发者已经帮你搞定一切。

在类Linux系统下,如果你通过file://或svn://来访问,则只要编译安装svn就可以,

如果通过http://访问,则要同neon编译,

如果通过https://访问,则要同带ssl支持的neon编译,

不论怎样,都要同apr和apr-util编译。

neon、apr、apr-util也很容易获得,目前发布的subversion代码都会有一个叫做subversion-deps-xxx的文件,比如1.4.3的就是subversion-deps-1.4.3.tar.bz2


——————————————————————————华丽的分割线————————————————————————————————

1) BerkeleyDB 版本不能大于 4.3.否则同样会出现以下错误.

configure: error: APR-UTIL was installed independently, it won’t be
possible to use the specified Berkeley DB: /usr/local/BerkeleyDB.4.4
主要是apr-util 暂时不支持4.4的版本.(我当时用的4.7.25,当然不行啦。以上原因参考网络教程)
2)提示configure: WARNING: we have configured without BDB filesystem support
大概是不能创建db格式的版本库;就是BerkeleyDB 没装,没关系采用filesystem一样保存

 

今天有个同事在搞SVN服务器,SVN服务器我也算比较熟的了,他在配置的时候遇到了一个问题,就是包函authz这个配置文件老是有问题,以前我装SVN的时候,是和apache结合的http://blog.51yip.com/server/291.html,我那同事装的呢,是单独的没有和apache结合,权限配置有很大的不同。所以晚上回来,我在自己的电脑上装一个。

一,安装要的软件

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

svn的官方网址是http://subversion.tigris.org

上面二个压缩文件解压后会放到同一个文件下,不要另建文件夹

二,安装独立svn

1,解压安装

  1. tar zxvf subversion-1.6.1.tar.gz  
  2. tar zxvf subversion-deps-1.6.1.tar.gz  
  3. cd subversion-1.6.1/  
  4. ./configure --prefix=/usr/local/svn  
  5. make && make install  

到这儿就安装好了。安装独立svn,它也考虑到将来有可能会和apache结合,所以安装的时候,它把和apache结合要用到的模块都放到/usr/lib/httpd/modules,部分提示如下
Libraries have been installed in:
/usr/lib/httpd/modules

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and

2,查看svn信息

[root@BlackGhost bin]# /usr/local/svn/bin/svnserve --version
svnserve, version 1.6.1 (r37116)
compiled Jul  7 2010, 23:06:21

Copyright (C) 2000-2009 CollabNet.
Subversion is open source software, see http://subversion.tigris.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.

Cyrus SASL authentication is available.

3,将svn的bin目录加到环境变量中去

[root@BlackGhost /]# PATH=$PATH:/usr/local/svn/bin
[root@BlackGhost /]# export PATH
[root@BlackGhost /]# svn
svn            svnadmin       svnlook        svnsync
svn2abs        svndumpfilter  svnserve       svnversion

三,建立仓库,配置svn

1,建个svn的根目录,因为项目不只一个

[zhangy@BlackGhost ~]$ mkdir -p /home/zhangy/www    #-p的意思是说如果没有父目录建之

2,建个仓库

[zhangy@BlackGhost ~]$ mkdir -p /home/zhangy/www/repos

[zhangy@BlackGhost www]$ svnadmin create /home/zhangy/www/repos/

3,导入数据

[zhangy@BlackGhost ~]$ svn import ./svntest file:///home/zhangy/www/repos -m "Initial repository test"
Adding         svntest/test.php

Committed revision 1.

4,修改svnserve.conf

[root@BlackGhost conf]# vi svnserve.conf

[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz

5,目录控制文件authz

[root@BlackGhost conf]# vi authz
[groups]

admin= zhangy

[repos:/]
@admin = rw
* = r

6,修改用户密码文件passwd

[root@BlackGhost conf]# vi passwd

[users]
zhangy = *****

四,启动和简单测试

1,启动svn

[root@BlackGhost www]# svnserve -d -r /home/zhangy/www

在这里特别的要注意,/home/zhangy/www是仓库的根目录,不要和[repos:/]目录重叠了。如果重叠是会提示你以下错误

[zhangy@BlackGhost checkout]$ svn co svn://127.0.0.1/
svn: Authorization failed

2,测试svn

a),checkout

[zhangy@BlackGhost checkout]$ svn co svn://127.0.0.1/repos
Authentication realm: <svn://127.0.0.1:3690> 3d0c32b1-3841-4518-b6b1-dcdb6c7ed716
Password for 'zhangy':
-----------------------------------------------------------------------
ATTENTION!  Your password for authentication realm:

<svn://127.0.0.1:3690> 3d0c32b1-3841-4518-b6b1-dcdb6c7ed716

can only be stored to disk unencrypted!  You are advised to configure
your system so that Subversion can store passwords encrypted, if
possible.  See the documentation for details.

You can avoid future appearances of this warning by setting the value
of the 'store-plaintext-passwords' option to either 'yes' or 'no' in
'/home/zhangy/.subversion/servers'.
-----------------------------------------------------------------------
Store password unencrypted (yes/no)? yes
A    repos/test.php
Checked out revision 1.

checkout的时候会出现Store password unencrypted,解决办法

vi /home/zhangy/.subversion/servers

找到以下内容,注释去掉并改成yes就行了

# store-plaintext-passwords = no

b),add 和submit

[zhangy@BlackGhost repos]$ svn add aaa.php
A         aaa.php
[zhangy@BlackGhost repos]$ svn commit aaa.php -m "ok"
Adding         aaa.php
Transmitting file data .
Committed revision 2.

svn的操作有很多,在这儿就不多说了。