柔中带刚,刚中带柔,淫荡中富含柔和,刚猛中荡漾风骚,无坚不摧,无孔不入!
全部博文(1669)
分类: LINUX
2012-10-29 12:35:44
2012-10-26 16:22:27| 分类: CVS | 标签: |字号大中小
本文测试环境:
最新的版本 Subversion 可以在这里找到 :
* 下载neon库,使svn支持webdav,https加密的链接.(下载并重命名即可,subversion会自动监测并配置),目前只支持 0.25.5.如果已经成功安装了Apache,使用 httpd -M 来查看有没有安装 dav_module,如果没有的话 必须附加 ‘–enable-dav’ ‘–enable-dav-fs’ 两个参数重新编译 Apache,否则即使编译通过了svn,apache也会启动不起来.
如何编译 Apache 请参考我另外一篇文章.
* 编译SVN,遇到的问题和解决方法. 使用默认的文件系统保存数据.最终完整通过安装和测试的编译参数为:
其中 /home/src/server/ 为 httpd-2.2.2 源代码所在文件夹,根据实际情况调整一下.
◆ 遇到问题:
1) --with-apr 和 --with-apr-util 如果没有加上的话,即使编译成功了也会出现
这样的错误提示.
2) 暂时不能使用 Berkeley DB [* 已解决]
svn保存文件更新数据库的方法有两个,一种是直接使用 fs (filesystem)来保存,另一种是通过Oracle提供支持的开源数据库 进行保存。但是如果加上 –with-berkeley-db=/usr/local/BerkeleyDB.4.4 就会configure时就会报错.
我想 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源代码
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) 编译安装
◆ 遇到问题:
1) BerkeleyDB 版本不能大于 4.3.否则同样会出现以下错误.
主要是apr-util 暂时不支持4.4的版本.
2) 必须更新apr,apr-util 源代码.
subversion-1.3.2 自带的 apr-util 的版本是0.9.6的,必须升级为 1.2.7 虽然能编译过去。但在 svn checkout 的时候会提示
这个问题困扰了我很长时间,Google和官方论坛都无结果。后来昨天竟然自己无意中解决了,感动的得哭了:)
* 配置Apache和SVN,测试成功编译svn后会在 httpd.conf 中自动加上
两个模块,没有的话,自行加上或检测是否真的编译成功.
假设我们现在要将一个名为 Lair 的项目导入到 SVN中
1). Apache的配置
在 conf/httpd.conf 或 conf/extra/httpd-vhosts.conf 中加入
DAV svn
SVNPath /home/svn/Lair
可以参考以下apache的配置,实现数据加密传输,用户身份验证.
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
DocumentRoot /var/SVNRoot
ServerName svn.yousite.com:443
ServerAdmin webmaster@yousite.com
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
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /etc/ssl/server.crt
SSLCertificateKeyFile /etc/ssl/server.key
更详细的配置说明文档
2). 配置,并且测试SVN,
创建一个新用户,用了保存仓库.
创建一个新模块
导入原来的项目
重新建立工作目录
测试打开
如能看到一个你项目录列表,说明您成功了。
■ 数据转移:
从 Windows 平台 SVN 服务器转移
如果windows svn储存的格式也是dbd的话,直接将SVN的文件夹copy过来即可.然后
执行 svnadmin recover /var/SVNRoot 检查一下数据库是否损坏.
最后注意权限,确保 db 目录下的所有文件能被apache读写(留意httpd.conf中的 User 和 Group)。
否则checkout时出现以下错误,多数是因为 文件或者目录权限问题 引起的,可以尝试用 chown 或者 chmod 命令修改一下权限
Could not open the requested SVN filesystem
Could not open the requested SVN filesystem
Can’t open activity db: APR does not understand this error code
另外一种方法没有测试过,原理大致和mysqldump一样,将svn导出为文本文件,然后重新导入,好处是可以避免因为存储格式不同而导致的数据转移困难。
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 时,可以设置不同用户对不同目录的访问控制.以下是一个例子.
[/]
@root = rw
[/www]
@web = rw
[/soft]
@soft = rw
一个更复杂的权限控制例子:
# 指定某个库(trunk)的访问权限
[trunk:/lib/Lair]
@blog = rw
# user5 将对目录有任何权限,虽然他继承根路径
[trunk:/apps/views/blog]
@blog = rw
user5 =
[trunk:/apps/views/myblog]
@blog = rw
user5 =
[trunk:/www]
@art = rw
@blog = rw
[trunk:/apps/views]
@art = rw
详细的说明文档:
■ 配置文件,使用其支持对文件中的 $Id$ 标签每次提交的时候自动更新版本信息(自动属性).
Windows : C:\Documents and Settings\%USERNAME%\Application Data\Subversion\config
Linux : ~\.subversion\config
enable-auto-props = yes
[auto-props]
*.php=svn:keywords=Id
*.html=svn:keywords=Id
■ 几条常用svn 命令
svn update
svn add “filename”
svn commit