用户工具



svn仓库比较重要的几个文件
  conf/authz   权限文件
conf/passwd 密码文件
conf/svnserve.conf 整体配置文件
hooks/post-commit 提交文件后的回调脚本
hooks/pre-revprop-change 允许改变版本库属性的回调脚本



svn服务器有3种运行方式
第一种 : svnserve
1、安装svn
yum install subversion
2、创建版本库
svnadmin create /data/svn_mirror/wepu_mirror   创建一个版本库
3、配置版本库
cd /data/svn_mirror/wepu_mirror/
3.1、vim conf/svnserve.conf 修改整体配置文件
[general]
anon-access = none   匿名用户无任何权限
auth-access = write 授权用户可写
authz-db = authz 权限文件位置,规定了谁对哪些目录有哪些权限
password-db = passwd 密码文件位置
realm = WePu 版本库ID,客户端根据这个字段判断是不是同一个版本库
3.2、vim conf/authz
[/]      对版本库的根目录
admin = w
3.3、vim conf/passwd
[users]
admin = admin  账号 = 密码
4、启动svn服务,(客户端才能访问服务器上版本库)
svnserve -d -r /data/svn_mirror/
-d   后台运行
-r  /data/svn_mirror/     所有请求的url的默认前缀
5、同步仓库到本地
svn  co[checkout] svn://IP/wepu_mirror
这条命令的意思是,用svn协议,到IP的主机上,去找/data/svn_mirror/wepu_mirror仓库

第二种 : HTTP认证
(要保证启动Apache的用户,对所有仓库有读写权限)
用apace代理我们的svn,需要为apace安装mod_dav模块(这个模块主要是强化了apache的写能力)
SVN - m15142436758 - JoyBank的博客
 
1、/etc/httpd/conf/httpd.conf 编辑Apache配置文件,在最后添加如下代码
<Location /wepu>    #/wepu 表示所有包含/wepu的url全部做如下处理
DAV svn #调用DAV,这里只能写svn具体原因暂时不明白
SVNParentPath /data/svn_mirror/   和svnserve  的-r 参数功能一样
Require valid-user #指定所有用户必须经过认证
AuthType Basic  #使用基本的密码验证
AuthName "Wepu Knowledge" #验证时的提示语,必不可少
AuthUserFile /etc/svn-auth #验证的密码文件,生成密码 htpasswd -cm filename username)
#AuthLDAPURL "ldap://203.195.158.131/ou=People,dc=1v,dc=cn?uid" 
#AuthBasicProvider ldap  或者也可用ldap验证
#AuthzLDAPAuthoritative off
AuthzSVNAccessFile /data/test/conf/authz #密码验证过了,之后查看此文件,判断哪些用户对哪些目录具有哪些权限
</Location>
2、service  httpd  restart 重启apache服务器
3、同步版本库到本地
svn  co[checkout] http://IP/wepu_mirror  协议变成 http 了
4、配置用户对版本库的权限(与svnserv有一点不同,svnserv方式不用指定版本库名称,每个版本库管理有自己权限文件
[版本库名称:/]      对指定版本库的根目录
admin = r               admin用户有读权限
[版本库名称:/install]  对指定版本库下的install目录
@admin = rw               admin组用户有读写权限

3、第三种方式  Apache+usvn
(要保证启动Apache的用户,对所有仓库,usvn有读写权限)
下载usvn文件,这是一个PHP写的web程序
1、安装PHP,php支持dav的模块,mysql
yum install -y php
yum install -y  mod_dav_svn.x86_64
yum install -y mysql mysql-server
将usvn包放到Apache目录下,并更名为usvn
2、Vim /etc/httpd/conf/httpd.conf     
添加
<Directory "/data/apache">
        AllowOverride all      这句非常重要,不然之后安装usvn时就会有问题
        Order allow,deny
        Allow from all
</Directory>
3、安装usvn
http://IP/usvn/public/install.php
然后一直下一步,直到有一步填写如下信息
-----------------------------------
        AuthUserFile /data/apache/usvn/data/htpasswd
        AuthzSVNAccessFile /data/apache/usvn/data/auth
最后一行是访问路径:/usvn/public/svn/ (保持默认,千万别做改动)
-----------------------------------

最后一步会让你再次修改http.conf文件,并重启Apache
<Location /usvn/public/svn/>
        ErrorDocument 404 default
        DAV svn
        Require valid-user
        SVNParentPath /data/apache/usvn/data/svn
        SVNListParentPath off
        AuthType Basic
        AuthName "USVN"
        AuthUserFile /data/apache/usvn/data/htpasswd
        AuthzSVNAccessFile /data/apache/usvn/data/authz
</Location>
4、进入usvn
http://IP/usvn/public



提交成功发送邮件通知(有待补充)
安装sendmail
yum install sendmail

让Apache用户有权发送邮件
chown apache:apache -R /var/spool/clientmqueue/

vim  版本库路径/hooks/post-commit
在最后加上一行发送邮件命令就行了,

实时同步镜像
host_backup:   svnadmin create  mirror
host_backup:   echo '#!/bin/sh'  > 版本库/hooks/pre-revprop-change
host_backup:   echo 'exit 0'  >> 版本库/hooks/pre-revprop-change
host_backup:   chmod +x  版本库/hooks/pre-revprop-change
host_backup:  按需配置   版本库/conf/   目录下的各种权限

host_main:  svnsync init svn://host_backup/mirror file:///main --username admin --password admin
host_main:  echo "/usr/bin/svnsync sync --non-interactive  svn://203.195.137.235/wepu_mirror --username admin --password admin" > 版本库/hooks/post-commit

其他
以上过程需要加载的一些模块:
#LoadModule apr_ldap_ssl_init /usr/lib64/apr-util-1/apr_ldap.so 
#LoadModule ldap_module /usr/lib64/httpd/modules/mod_ldap.so
#LoadModule dav_module /usr/lib64/httpd/modules/mod_dav.so
#LoadModule authz_svn_module /usr/lib64/httpd/modules/mod_authz_svn.so
#LoadModule dav_svn_module /usr/lib64/httpd/modules/mod_dav_svn.so
#如果还有其他错误,看看这个变量是不是被人改过$LD_LIBRARY_PATH(搜索库的PATH)

常用命令:
svn list file:///data/svnrepo/
svnadmin create /data/svn_mirror/wepu_mirror
svn commit -m "delete"
svn delete first/
svn import /root/bare2 file:///data/svnrepo/bare2 -m "bare2"
svn status -v -u
svn revert filename
svnserve -d(deamod) -r(base path)


SVN 其他应用
 SVN + WebServer(Apache 或Tomcat)用作web程序的实时发布(基于centos 6.2)

这套系统的意义有以下几点
1、简化部署,svn commit之后即可在web上访问
2、提供版本回溯功能,记录每一次改变,随时可以回溯任意一个版本

数据结构如下
SVN - m15142436758 - JoyBank的博客
 
主要的工作原理是:每次client B 端提交之后,触发服务器上svn server仓库中的post-commit钩子脚本,这个钩子脚本将client B提交的更新同步到 Client A,然后从client A中内容全部复制到web server 容器中

关键代码(svn server中钩子脚本):
vim hooks/post-commit
#!/bin/sh
export LANG="zh_CN.UTF-8"  #一定要加,不然出现文件名出现中文时,将终止svn  update 
cd /var/www/client/apache
svn update # 同步更新
rm -rf /var/www/apache/* # 删除web 容器下的内容
cp -r /var/www/client/apache/* /var/www/apache/ # 将更新后的内容复制到web server