Posted on 2009-01-15 17:44
ZhouFeng 阅读(12121)
评论(0) 编辑 收藏 所属分类:
转载 、
Linux 、
SVN
subversion(以下简称svn)是近年来崛起的版本管理工具,是cvs的接班人。
svn服务器有2种运行方式:独立服务器和借助apache。2种方式各有利弊。
svn存储版本数据也有2种方式:BDB和FSFS。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。
1. svn服务器安装操作系统: Redhat Linux
AS4安装包获取:下载http://subversion.tigris.org/downloads/subversion-1.4.0.tar.gz和
http://subversion.tigris.org/downloads/subversion-deps-1.4.0.tar.gz。编译:
以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:56Copyright (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参考资料:
http://www.gbunix.com/htmldata/2006_07/15/27/article_1337_1.html
http://www.iusesvn.com/bbs/thread-157-1-1.html
http://16hot.blog.isyi.com/post/1/552
检测服务是否开启: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已经架起来了
在 Linux/Apache 2.2 上配置SVN服务器
准备,下载所需要文件.
检查已安装的 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.2Apache 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-utilmake
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) 安装 BerkeleyDBcd /usr/local/src
wget http://downloads.sleepycat.com/db-4.3.29.tar.gztar xzvf db-4.3.29.tar.gz
cd /usr/local/src/db-4.3.29/build_unix
../dist/configure --enable-compat185
make
make install2) 更新apr和apr-util源代码# 清理编译后的.la文件
cd /usr/local/src/httpd-2.2.3make cleancd /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 443AddType
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>更详细的配置说明文档
http://svnbook.red-bean.com/nightly/en/svn.ref.mod_dav_svn.conf.html2). 配置,并且测试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详细的说明文档:http://svnbook.red-bean.com/nightly/en/svn.serverconfig.httpd.html
配置文件,使用其支持对文件中的 $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源代码编译的朋友可以也测试一下