空间站

北极心空

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks
在linux下安装配置svn独立服务器
  subversion(以下简称svn)是近年来崛起的版本管理工具,是cvs的接班人。
  svn服务器有2种运行方式:独立服务器和借助apache。2种方式各有利弊。
  svn存储版本数据也有2种方式:BDB和FSFS。因为BDB方式在服务器中断时,有可能锁住数据(我在搞ldap时就深受其害,没法根治),所以还是FSFS方式更安全一点。
1. svn服务器安装
操作系统: Redhat Linux AS4
安装包获取:
编译:
以root用户登录。
将subversion-1.4.0.tar.gz和subversion-deps-1.4.0.tar.gz传到服务器。
tar xfvz subversion-1.4.0.tar.gz
tar xfvz subversion-deps-1.4.0.tar.gz
cd subversion-1.4.0
./configure --prefix=/opt/svn --without-berkeley-db –with-zlib
(注:以svnserve方式运行,不加apache编译参数。以fsfs格式存储版本库,不编译berkeley-db)
make clean
make
make install
vi /etc/profile,在/etc/profile最后加入:
PATH=$PATH:/opt/svn/bin
export PATH
测试:
svnserve –version
如果显示如下,安装成功:
svnserve, version 1.4.0 (r21228)
  compiled Oct 12 2006, 10:18:56
Copyright (C) 2000-2006 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.
2. svn配置
建立版本库目录,可建多个:
mkdir -p /opt/svndata/repos1
mkdir -p /opt/svndata/repos2
建立版本库:
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]
<用户1> = <密码1>
<用户2> = <密码2>
  其中,[users]是必须的。下面列出要访问svn的用户,每个用户一行。示例:
[users]
alan = password
king = hello
配置用户访问权限:
vi /opt/svn/conf/authz.conf
  为了简化配置,3个版本库共用1个权限配置文件/opt/svn/conf/pwd.conf。如有必要,也可以分开。文件中定义用户组和版本库目录权限。
注意:
* 权限配置文件中出现的用户名必须已在用户配置文件中定义。
* 对权限配置文件的修改立即生效,不必重启svn。
用户组格式:
[groups]
<用户组名> = <用户1>,<用户2>
其中,1个用户组可以包含1个或多个用户,用户间以逗号分隔。
版本库目录格式:
[<版本库>:/项目/目录]
@<用户组名> = <权限>
<用户名> = <权限>
  其中,方框号内部分可以有多种写法:
/,表示根目录及以下。根目录是svnserve启动时指定的,我们指定为/opt/svndata。这样,/就是表示对全部版本库设置权限。
repos1:/,表示对版本库1设置权限
repos2:/occi, ,表示对版本库2中的occi项目设置权限
repos2:/occi/aaa, ,表示对版本库2中的occi项目的aaa目录设置权限
  权限主体可以是用户组、用户或*,用户组在前面加@,*表示全部用户。权限可以是w、r、wr和空,空表示没有任何权限。
示例:
[groups]
admin = alan
[/]
@admin = rw
[repos1:/occi/aaa]
king = rw
[repos2:/pass]
king =
删除无用文件:
rm /opt/svndata/repos1/conf/authz
rm /opt/svndata/repos1/conf/passwd
rm /opt/svndata/repos2/conf/authz
rm /opt/svndata/repos2/conf/passwd
3. 启动svn
建立启动svn的用户:
useradd svn
passwd svn
根据提示为用户svn设置密码
允许用户svn访问版本库:
chown –R svn:svn /opt/svndata
chown –R svn:svn /opt/data
启动svn:
su - svn -c "svnserve -d --listen-port 9999 -r /opt/svndata"
其中:
su – svn表示以用户svn的身份启动svn
-d表示以daemon方式(后台运行)运行
--listen-port 9999表示使用9999端口,可以换成你需要的端口。但注意,使用1024以下的端口需要root权限
-r /opt/svndata指定根目录是/opt/svndata
检查:
ps –ef|grep svnserve
如果显示如下,即为启动成功:
svn    6941   1 0 15:07 ?    00:00:00 svnserve -d --listen-port 9999 -r /opt/svndata

检测服务是否开启:netstat -ntlp如果看到3690的端口正常开放了,证明SVN启动了。]
下面是机器上的端口显示:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address         Foreign Address              State        PID/Program name
tcp         0       0 0.0.0.0:32769         0.0.0.0:*                    LISTEN       2611/rpc.statd
tcp         0       0 0.0.0.0:111           0.0.0.0:*                    LISTEN       2591/portmap
tcp         0       0 0.0.0.0:113           0.0.0.0:*                    LISTEN       2827/xinetd
tcp         0       0 127.0.0.1:631         0.0.0.0:*                    LISTEN       4860/cupsd
tcp         0       0 127.0.0.1:25          0.0.0.0:*                    LISTEN       2846/sendmail: acce
tcp         0       0 :::3690               :::*                        LISTEN       5513/svnserve
tcp         0       0 :::22                 :::*                        LISTEN       2812/sshd
下面这个就是了:
tcp         0       0 :::3690               :::*                        LISTEN       5513/svnserve
好了,svn已经架起来了
主页 | 照片 | 视频 | 收藏
Onion的天空
Live In ShangHai.Mon 7 Aug 2006在 Linux/Apache 2.2 上配置SVN服务器
By Onion under Linux   | Tag : Apache, Linux, svn, Ubuntu
You can skip to the end and leave a response. Pinging is currently not allowed.
准备,下载所需要文件.
检查已安装的 Apache2 是否已经安装了 mod_dav .
编译SVN,遇到的问题和解决方法
使用 默认文件系统(fsfs) 保存数据
使用 Berkeley DB 保存数据
配置Apache和SVN,测试.
其它小结
从Windows平台上数据转移
配置文件,使用其支持对文件中的 $Id$ 标签每次提交的时候自动更新版本信息.
基于路径的权限控制
常用SVN命令
相关资源
* 准备,下载所需要文件.
本文测试环境:
ubuntu 6.06 LTS (kernel 2.6.15-25-k7,gcc-4.0.3) /ubuntu server (2.6.15-26-server,gcc-4.0.4)
Subversion 1.3.2
Apache 2.2.2
最新的版本 Subversion 可以在这里找到 :http://subversion.tigris.org/project_packages.html
* 检查已安装的 Apache2 是否已经安装了 mod_dav .
如果已经成功安装了Apache,使用 httpd -M 来查看有没有安装 dav_module,如果没有的话 必须附加 ‘–enable-dav’ ‘–enable-dav-fs’ 两个参数重新编译 Apache,否则即使编译通过了svn,apache也会启动不起来.
如何编译 Apache 请参考我另外一篇文章.
* 编译SVN,遇到的问题和解决方法.
使用默认的文件系统保存数据.
最终完整通过安装和测试的编译参数为:
./configure --with-apxs=/usr/local/apache2/bin/apxs \
--with-apr=/home/src/server/httpd-2.2.2/srclib/apr \
--with-apr-util=/home/src/server/httpd-2.2.2/srclib/apr-util
make
make install
其中 /home/src/server/ 为 httpd-2.2.2 源代码所在文件夹,根据实际情况调整一下.
◆ 遇到问题:
1) --with-apr 和 --with-apr-util 如果没有加上的话,即使编译成功了也会出现
Can’t set position pointer in file ‘/home/svn/repos/db/revs/0′: Invalid argument
这样的错误提示.
2) 暂时不能使用 Berkeley DB [* 已解决]
svn保存文件更新数据库的方法有两个,一种是直接使用 fs (filesystem)来保存,另一种是通过Oracle提供支持的开源数据库 Berkeley DB 进行保存。但是如果加上 –with-berkeley-db=/usr/local/BerkeleyDB.4.4 就会configure时就会报错.
configure: error: APR-UTIL was installed independently, it won’t be
possible to use the specified Berkeley DB: /usr/local/BerkeleyDB.4.4
我想 apr-unit 暂时不支持吧,我们就用默认的fs好了.
3) 在make 的时候可能会遇到缺少 srclib/apr/libapr-1.la,srclib/apr-util/libaprutil-1.la 两个文件,找不到而make error.
解决办法:/usr/local/apache2/lib/ 中找到,将其复制到源代码文件夹相应的位置中.
Update!!
使用 BerkeleyDB 保存数据.
1) 安装 BerkeleyDB
tar xzvf db-4.3.29.tar.gz
cd /usr/local/src/db-4.3.29/build_unix
../dist/configure --enable-compat185
make
make install
2) 更新apr和apr-util源代码
# 清理编译后的.la文件
cd /usr/local/src/httpd-2.2.3
make clean
cd /usr/local/src/subversion-1.3.2
rm -rf apr
rm -rf apr-util
cp -rf /usr/local/src/httpd-2.2.3/srclib/apr ./
cp -rf /usr/local/src/httpd-2.2.3/srclib/apr-util/ ./
3) 编译安装
./configure --with-apxs=/usr/local/apache2/bin/apxs \
--with-berkeley-db=/usr/local/BerkeleyDB.4.3 \
--with-ssl
make
make install
◆ 遇到问题:
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的版本.
2) 必须更新apr,apr-util 源代码.
subversion-1.3.2 自带的 apr-util 的版本是0.9.6的,必须升级为 1.2.7 虽然能编译过去。但在 svn checkout 的时候会提示
svn: REPORT request failed on ‘/!svn/vcc/default’
svn: REPORT of ‘/!svn/vcc/default’: Could not read status line: connection was closed by server.
这个问题困扰了我很长时间,Google和官方论坛都无结果。后来昨天竟然自己无意中解决了,感动的得哭了:)
* 配置Apache和SVN,测试
成功编译svn后会在 httpd.conf 中自动加上
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
两个模块,没有的话,自行加上或检测是否真的编译成功.
假设我们现在要将一个名为 Lair 的项目导入到 SVN中
1). Apache的配置
在 conf/httpd.conf 或 conf/extra/httpd-vhosts.conf 中加入
<Location /svn/Lair>
DAV svn
SVNPath /home/svn/Lair
</Location>
可以参考以下apache的配置,实现数据加密传输,用户身份验证.
Listen 443
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl.
SSLPassPhraseDialog exec:/etc/sendsslpwd
SSLSessionCache shmcb:/usr/local/apache2/logs/ssl_scache(512000)
SSLSessionCacheTimeout 300
SSLMutex file:/usr/local/apache2/logs/ssl_mutex
<VirtualHost _default_:443>
DocumentRoot /var/SVNRoot
ServerName svn.yousite.com:443
ServerAdmin webmaster@yousite.com
<Location />
DAV svn
SVNPath /var/SVNRoot
AuthzSVNAccessFile /etc/svnserve.conf
Satisfy Any
AuthType Basic
AuthName “yousite SVN Repository”
AuthUserFile /etc/httpd-passwords.txt
Require valid-user
</Location>
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /etc/ssl/server.crt
SSLCertificateKeyFile /etc/ssl/server.key
</VirtualHost>
2). 配置,并且测试SVN,
创建一个新用户,用了保存仓库.
useradd -m svn
创建一个新模块
su daemon (apache是以daemon用户运行的,所以要切换身份,否则可能会报目录访问权限错误)
svnadmin create --fs-type fsfs /home/svn/Lair
导入原来的项目
svn import /var/www/Lair http://localhost/svn/Lair -m ‘Initial import’
重新建立工作目录
rm -rf /var/www/Lair (注意备份!!)
svn checkout http://localhost/svn/Lair
测试打开 http://localhost/svn/Lair
如能看到一个你项目录列表,说明您成功了。
* 其它小结
■ 数据转移:
从 Windows 平台 SVN 服务器转移
如果windows svn储存的格式也是dbd的话,直接将SVN的文件夹copy过来即可.然后
执行 svnadmin recover /var/SVNRoot 检查一下数据库是否损坏.
最后注意权限,确保 db 目录下的所有文件可写。
chmod 755 db
chmod 666 db/*
否则checkout时出现以下错误,多数是因为文件或者目录权限问题引起的,可以尝试用 chown 或者 chmod 命令修改一下权限
<m:human-readable errcode=”160029″>
Could not open the requested SVN filesystem
</m:human-readable>
<m:human-readable errcode=”13″>
Could not open the requested SVN filesystem
</m:human-readable>
另外一种方法没有测试过,原理大致和mysqldump一样,将svn导出为文本文件,然后重新导入,好处是可以避免因为存储格式不同而导致的数据转移困难。
# dump data to file (assuming a repo @ c:\repo):
svnadmin dump c:\repo > c:\repo.txt
# Copy the file over to linux:
mkdir /repo
svnadmin create /repo
svnadmin load /repo < /repo.txt
■ 设置访问控制
当 httpd.conf 中 设置 AuthzSVNAccessFile 时,可以设置不同用户对不同目录的访问控制.以下是一个例子.
[groups]
root = admin.root
web = user1,user2
soft = user3,user4
[/]
@root = rw
[/www]
@web = rw
[/soft]
@soft = rw
■ 配置文件,使用其支持对文件中的 $Id$ 标签每次提交的时候自动更新版本信息(自动属性).
Windows : C:\Documents and Settings\%USERNAME%\Application Data\Subversion\config
Linux : ~\.subversion\config
[miscellany]
enable-auto-props = yes
[auto-props]
*.php=svn:keywords=Id
*.html=svn:keywords=Id
>> 关于自动属性的更高级讨论
■ 几条常用svn 命令
svn update
svn add “filename”
svn commit
———————–
Change Log:
2006-08-14 neon库subversion已经自带,不需要在单独安装,添加-with-ssl即可使用svn对ssl支持.
2006-08-10 补充自动属性的说明.
2006-08-08 加入关于目录访问验证的说明.
2006-08-07 httpd,2.2.3测试依然有效,解决bdb数据库的支持问题,添加从Windows到Linux下的数据转移方案。
2006-07-25 看到到.声仔对 Can’t set position pointer in file 另一种解决方案,我当时也测试了,好像没有成功。不想用apache源代码编译的朋友可以也测试一下
posted on 2007-10-16 11:13 芦苇 阅读(15275) 评论(2)  编辑  收藏 所属分类: 其他

Feedback

# re: SVN配置 2007-10-16 11:16 芦苇
 Windows下安装和配置SVN Server     CSDN Blog推出文章指数概念,文章指数是对Blog文章综合评分后推算出的,综合评分项分别是该文章的点击量,回复次数,被网摘收录数量,文章长度和文章类型;满分100,每月更新一次。
1.     配置环境
Windows 2003 Server with SP1
Apache HTTP Server v2.0.55
Subversion v1.4.2
2.     安裝 Apache HTTP Server
将安装目录修改为C:\Apache Group
默认是安装到C:\Program Files\Apache Group目录下
安装后的目录结构如下:
C:\Apache Group\Apache2\bin\
C:\Apache Group\Apache2\conf\
......
3.     安裝 Subversion
    这里使用zip包,解压到C盘,然后将C:\svn-win32-1.4.2\bin添加环境变量PATH中。
    解压后的目录结构如下:
    C:\svn-win32-1.4.2\bin\
    C:\svn-win32-1.4.2\iconv\
    ......
l        将C:\svn-win32-1.4.2\bin目录下的mod_dav_svn.so和mod_authz_svn.so复制到C:\Apache Group\Apache2\modules目录下。
l        将C:\svn-win32-1.4.2\bin目录下的所有DLL文件复制到C:\Apache Group\Apache2\bin目录下。注意在复制DLL文件时最好停掉Apache。
l        用文本编辑器打开C:\Apache Group\Apache2\conf\httpd.conf文件找到以下两行
    #LoadModule dav_module modules/mod_dav.so
    #LoadModule dav_fs_module modules/mod_dav_fs.so
    去掉前面的#,然后所有LoadModule的后面添加下面两行
    LoadModule dav_svn_module modules/mod_dav_svn.so
    LoadModule authz_svn_module modules/mod_authz_svn.so
    然后重起Apache
4.     建库
    假设所有库的根目录是F:\svn,并且要建一个名为testrepos的库,打开DOS窗口,进入到F:\svn目录下,然后输入svnadmin create f:\svn\testrepos
命令执行完后f:\svn\testrepos目录下会生成一些目录和文件。然后在C:\Apache Group\Apache2\conf\httpd.conf文件的最后添加下面内容,并重起Apache
    <Location /svn>
    DAV svn
    SVNParentPath f:\svn
    </Location>
5.     测试
打开DOS窗口,进入一个临时目录F:\temp下
svn co http://localhost/svn/testrepos
正确执行后会显示"Checked out revision 0."的信息。
6.     导入
在一个临时文件夹(比如C:\temp)下建立如目录
trunk
branches
tags
在DOS命令行下进入C:\temp目录,然后执行
svn import . http://localhost/svn/testrepos -m "Initial repository"
执行成功的话会提示提交后的修订版本为1。
7.     关于库的建立
建议为会每一个项目建立一个库,例如:
F:\svn\project1
F:\svn\project2
再为每个库建立如下结构(Subversion官方手册建议的目录结构)
F:\svn\project1\trunk      这个目录用来存放正在进行开发的项目代码
F:\svn\project1\branches   这个目录用来存放正在开发中的版本分支
F:\svn\project1\tags       这个目录用来存放不再变动的分支
 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1495115

  回复  更多评论
  

# re: SVN配置 2007-10-16 11:17 芦苇
 Subversion安装记录     CSDN Blog推出文章指数概念,文章指数是对Blog文章综合评分后推算出的,综合评分项分别是该文章的点击量,回复次数,被网摘收录数量,文章长度和文章类型;满分100,每月更新一次。

程序版本:
   Subversion:1.3.2(官方下载
   SmartSVN:2.0.6(官方下载)本地下载:

安装过程:
 1、安装Subversion。这个过程很简单,默认安装就可以了,没什么可说的。
 2、创建Repository(可以理解为代码仓库,其实除了放代码,其他的也可以放的^_^):
   通过CMD进入命令行模式,输入下列命令,在d:\SubversionWorkspace\pub这个目录下建立Repository:
svnadmin create --fs-type fsfs d:\SubversionWorkspace\pub

注:之所以选择fsfs格式,参考下面的文档中的相关资料
相关文档资料:
$ svnadmin create --fs-type fsfs /path/to/repos
$ svnadmin create --fs-type bdb /path/to/other/repos

Warning
Do not create a Berkeley DB repository on a network share—it cannot exist on a remote filesystem such as NFS, AFS, or Windows SMB. Berkeley DB requires that the underlying filesystem implement strict POSIX locking semantics, and more importantly, the ability to map files directly into process memory. Almost no network filesystems provide these features. If you attempt to use Berkeley DB on a network share, the results are unpredictable—you may see mysterious errors right away, or it may be months before you discover that your repository database is subtly corrupted.

If you need multiple computers to access the repository, you create an FSFS repository on the network share, not a Berkeley DB repository. Or better yet, set up a real server process (such as Apache or svnserve), store the repository on a local filesystem which the server can access, and make the repository available over a network. Chapter 6, Server Configuration covers this process in detail.

 3、添加用户并设置权限。没有做详细研究,请直接参考下面的资料:
转自:http://www.dlog.cn/html/di...

独立运行的Subversion权限设置很简单,首先打开snvserve.conf,去掉下面一行的注释

authz-db = authz

然后打开同一目录下的authz这个文件,这个文件便是整个权限控制的核心,先来看一个例子:

[groups]
dev-group = liudong,xfliang
design-group = newidea

[/]
@dev-group = rw
@design-group = r
* =

[/doc]
@design-group = rw

[/webapp]
@design-group = rw

接下来我给大家解释一下这个文件,相信就可以明白Subversion如何来做权限控制的了。

首先我定义了两个组,一个开发组(dev-group),一个设计组(design-group),接下来我让dev-group对整个目录有读写的权限,而design-group只有读权限。但是接下来的两个子目录design-group就有读写权限,也就是说设计组可以读取整个项目,但只能修改doc以及webapp这两个子目录。

*= 这行表示其他人不能读写。当然也可以直接指定某个用户,例如我想让liudong这个用户可以读写webapp目录,那设置如下:

[/webapp]
@design-group = rw
liudong = rw

另外有一点注意的是,修改这个文件不需要重新启动svn服务,这点太棒了。

下面是详细的说明Subversion自带的authz样例中的注释

### This file is an example authorization file for svnserve.
### Its format is identical to that of mod_authz_svn authorization
### files.
### As shown below each section defines authorizations for the path and
### (optional) repository specified by the section name.
### The authorizations follow. An authorization line can refer to a
### single user, to a group of users defined in a special [groups]
### section, or to anyone using the '*' wildcard.  Each definition can
### grant read ('r') access, read-write ('rw') access, or no access
### ('').

 4、将Subversion注册为系统。将SVNServise拷贝到Subversion的安装目录下的bin目录(我这里为:C:\Program Files\Subversion\bin)。然后在CMD中转到刚刚那个目录,运行下列命令:
svnserve -d -r d:\SubversionWorkspace\

注:以下是svnserve的命令选项
svnserve [选项]
有效选项:
 -d [--daemon]            : 后台模式
 --listen-port 参数     : 监听端口(后台模式)
 --listen-host 参数     : 监听主机名或IP地址(后台模式)
 --foreground             : 在前台运行(调试时有用)
 -h [--help]              : 显示这个帮助
 --version                : 显示版本信息
 -i [--inetd]             : inetd 模式
 -r [--root] 参数       : 服务根目录
 -R [--read-only]         : force read only, overriding repository config file
 -t [--tunnel]            : 隧道模式
 --tunnel-user 参数     : 隧道用户名(模式是当前用户UID的名字)
 -X [--listen-once]       : 监听一次(调试时有用)

 5、用SmartSVN连接刚刚建好的服务器  

下载文件 (已下载 22 次)

   SVNServise:将Subversion注册为系统服务的东东。本地下载:
下载文件 (已下载 19 次)

   TortoiseSVN:1.4.0 RC1(官方下载
安装环境:
   Windows XP-SP2-en


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1495108

  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: