您的位置:首页 > 运维架构 > Linux

linux 环境搭建svn服务

2017-05-02 00:00 190 查看
svn 是小团项目版本管理的最佳工具,下面是本人,在linux环境下面搭建svn服务的过程

由于公司的服务器是不可以上外网,只能内网访问,所以手动下载了

1.独立服务器 (例如:svn://xxx.com/xxx);
2.借助apache。(例如:http://svn.xxx.com/xxx);
为了不依赖apache,选择第一种方式-独立的svn服务器。
svn存储版本数据也有2种方式:

subversion-1.6.6.tar.gz
subversion-deps-1.6.6.tar.gz

下载地址
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

我用的是1.6.6版本

1.先检查服务器上是否装过svn
rpm -qa | grep subversion

2.查看svn的依赖包SSL
find / -name opensslv.sh
如果没找到 能上外网,可以直接用yum 命令安装
yum install openssl
yum install openssl-devel
不能连外网就只能手动,上传压缩包,手动安装

上面的OK了以后,将下载的两个 tar.gz文件上传到linux服务器
tar zxvf  subversion-1.6.6.tar.gz
tar zxvf subversion-deps-1.6.6.tar.gz
解压后会生成subversion-1.6.6子目录,进入该子目录进行编译

./configure --prefix=/usr/local/svn --with-openssl=/usr/include/openssl(此处是你服务器上opensslv.sh路径)
--without-berkeley-db

后面以svnserve方式运行,所以不加apache编译参数。以fsfs格式存储版本库,不编译berkeley-db
如果编译时报如下错误:
no acceptable C compiler found in $PATH
说明没有gcc库,使用如下命令安装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.安装
make 会执行一段时间
make install
如果 make install 出现下面错误:
/home/upload/subversion-1.6.6/subversion/svnversion/.libs/lt-svnversion: error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory
make: *** [revision-install] Error 127
解决办法:
1、编辑/etc/ld.so.conf文件
vi /etc/ld.so.conf
添加下面一行代码
/usr/local/lib
2、保存后运行ldconfig:
/sbin/ldconfig
注:ld.so.conf和ldconfig用于维护系统动态链接库。
3、然后再安装
make && make install

4.测试是否成功
/usr/local/svn/bin/svnserve --version

如果显示如下,svn安装成功:
svnserve, version 1.6.6 (r40053)
compiled Dec 25 2012, 13:14:38
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.

为了方便下操作,把svn相关的命令添加到环境变量中:
echo export PATH=$PATH:/usr/local/svn/bin/ >> /etc/profile
source /etc/profile

5.配置svn

5.1 简历svn根目录
mkdir -p /home/svndata/(路径自己随意定)
5.2 建立一个存放项目的文件夹(可以一个项目一个文件夹,将项目相关的东西全部放到此发文件中)
mkdir -p /home/svndata/objectone
svnadmin create /home/svndata/objectone
5.3上面命令执行完后,会在objectone 文件下面生成5个子文件夹
README.txt:略
conf:配置文件夹
db:版本数据存储目录
format:存储一个整数的文件,此整数代表库层次结构版本
hooks:存放版本库勾子目录
locks:存储库锁目录,用来跟踪库的访问者

在conf目录3个文件
authz passwd svnserve.conf

下面设置 svnserve.conf ,

anon-access = none
auth-access = write
password-db = passwd
authz-db = authz

passwd  设置用户名密码,authz 对用户进行分组,对分组的用户进行权限设置
(详细自己百度)

建立启动svn的用户
useradd svn
根据提示,为用户svn设置密码
允许用户svn访问版本库:
chown -R svn:svn /home/svndata/objectone/
启动svn:
方式一:svnserve -d -r /home/svndata/objectone/ #默认的启动端口号为3690
方式二:su – svn -c “svnserve -d –listen-port 9999 -r /home/svndata/objectone/”
其中:
su – svn表示以用户svn的身份启动svn;
-d表示以daemon方式(后台运行)运行;
–listen-port 9999表示使用9999端口,可以换成你需要的端口。但注意,使用1024以下的端口需要root权限;
-r /opt/svn 指定根目录是/opt/svn。
检查是否启动
netstat -tunlp | grep svn 或者 netstat -tunlp | grep 9999
如果显示以下信息说明启动成功

tcp 0 0 0.0.0.0:9999 0.0.0.0:* LISTEN 10973/svnserve

6将svn加入到开机启动
编辑rc.local文件:vi /etc/rc.d/rc.local
加入如下启动命令:
/usr/local/svn/bin/svnserve -d –listen-port 9999 -r /home/svndata/objectone
如果想停止svn,则使用如下命令:
killall svnserve
如果想将svn作为服务:
在/etc/rc.d/init.d/目录下新建名为svn的文件
并设置权限为755:chmod 755 /etc/rc.d/init.d/svn
编辑svn文件:vi /etc/rc.d/init.d/svn, 在里面添加如下代码:

#!/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=/opt/svn
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

之后便可以service svn start(restart/stop)方式启动SVN。

按照上述方法装的svn服务器,前几天宕机了,今天用的非root账号重启过后
执行了
svnserve --listen-port 9999 -d -r /users/ems/svndata 重启了svn

但是在本地提交到,svn服务器的时候报错如下
“/users/ems/svndata/repos/db/txn-current-lock”: 权限不够

因为安装svn的时候是root账号安装的,非root账号重启过后,是没有权限对root账号安装的db/txn-current-lock文件进行修改的

解决办法
su root 切换到root账号下执行下面命令
chmod 777 /users/ems/svndata/repos/db

再重启svn(随便什么账号都可以)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: