0%

subversion安装、配置和管理

尽管svn已经被历史所抛弃,但同样由于历史原因,还要整理一下svn的配置文档。

安装

这个没什么可写的:

1
yum install subversion

管理

通过svnadmin可以实现大多数的管理操作

创建版本库

1
2
3
4
5
6
7
8
9
10
mkdir$SVN_REPOSITORIES_ROOT
cd$SVN_REPOSITORIES_ROOT

# 创建dev库
svnadmin create dev

# 创建文档库
svnadmin create doc

……

更改配置

每个svn库有单独的配置,在每个生成的仓库目录的conf/svnserve.conf文件中可以进行更改。

比如,指定用户和权限的配置内容:

1
2
password-db = passwd
authz-db = authz

意思是使用conf/passwd文件保存用户密码;

使用conf/authz-db文件保存用户组和权限设置。

用户管理

通常,将所有库的密码和用户组、权限进行统一管理是比较好的方式。可以将每个svn库的配置文件中的password-dbauthz-db都指到相同的文件。

密码文件的格式为:

1
2
3
[users]
user1 = pwd1
user2 = pwd2

用户组和权限文件的格式为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[groups]
# <用户组名> = <用户1>,<用户2>
harry_and_sally = harry,sally
harry_sally_and_joe = harry,sally,&joe

# [<版本库>:/项目/目录]
# @<用户组名> = <权限>
# <用户名> = <权限>

[/foo/bar]
harry = rw
* = r

[repository:/baz/fuz]
@harry_and_sally = rw
* = r

用户组和权限配置文件需要手工编辑,而密码文件通过Apache的htpasswd命令进行操作。比如:

1
htpasswd -mb passwd USER_NAME PASSWORD

启动服务

1
svnserve -d --listen-port 9999 -r$SVN_REPOSITORIES_ROOT

即可通过svn://$SVN_SERVER:9999/dev访问svn服务。

通过Apache提供http访问

svn可以通过WebDAV的方式与Apache集成。配置步骤如下:

  1. 安装svn的apache模块:

    yum install mod_dav_svn

    该操作会在/etc/httpd/conf/httpd.conf中增加模块配置:

    1
    2
    LoadModule dav_svn_module     modules/mod_dav_svn.so
    LoadModule authz_svn_module modules/mod_authz_svn.so

    并将相应的模块文件安装到Apache的模块目录(/etc/httpd/modules/)。

  1. 在Apache中增加svn的虚拟目录配置,比如:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <Location /svn>
    DAV svn
    SVNParentPath$SVN_REPOSITORIES_ROOT

    AuthType Basic
    AuthName "Subversion repository"

    AuthUserFile$SVN_CONF_PATH/htpasswd
    AuthzSVNAccessFile$SVN_CONF_PATH/authz

    Satisfy Any
    Require valid-user
    </Location>

    此时,启动Apache后就可以通过http://$SVN_SERVER:$APACHE_PORT/svn/dev访问svn服务,
    并且使用svn中账号配置。

https支持

因为已经集中使用nginx实现https支持,这部分内容略。

Web管理工具

登录到svn服务器用svnadminhtpasswd等命令进行svn的管理让人非常乏味,且容易出错。

这里选择使用python开发的[Submin](http://supermind.nl/submin/作为Web管理工具。
Submin不仅可以提供svn的Web管理界面,还可以简化svn的安装部署工作;
此外,还提供了与git, Trac等集成的功能。

下载Submin并安装。

  1. 创建submin运行环境

执行命令:

1
submin2-admin ./submin_root initenv your@email.address
  1. 配置

使用submin,可以省略手工配置svn的apache支持的步骤:

1
2
ln -s$PATH_TO_SBMIN_ROOT/conf/apache-webui-cgi.conf /etc/httpd/conf.d/
ln -s$PATH_TO_SBMIN_ROOT/conf/apache-svn.conf /etc/httpd/conf.d/
  1. 新的认证机制

Submin2开始,使用Apache的mod_dbd模块,从数据库中读取认证信息。

备份和恢复

根据网上的内容,svn在不停止服务的情况下,不能基于文件复制(copy, rsync等)进行备份(没有测试过)。

svn备份一般采用三种方式:

  1. svnadmin dump

    支持全量和增量备份;备份和恢复的速度较慢。

  2. svnadmin hotcopy

    只能用于全量复制,速度非常快,但消耗较大的存储空间。

  3. svnsync

    只用于双机热备的场景。

这里采取的策略是:

  1. 每周使用svnadmin dump进行全备份
  2. 每天使用svnadmin dump进行增量备份,并备份密码和权限文件
  3. 每次的备份恢复到svn备机,进行恢复验证
  4. 每天同步到灾备中心

关键命令(以dev库为例):

  • 读取当前revision

    cat$SVN_REPOSITORIES_ROOT/dev/db/current |awk '{print$1}'

  • 全备份

    svnadmin dump --deltas$SVN_REPOSITORIES_ROOT/dev |bzip2 |tee dev_full.bz2 | md5sum >dev_full.md5

  • 备份单个revision(比如,revision 10)

    svnadmin dump --deltas$SVN_REPOSITORIES_ROOT/dev -r10 |bzip2 |tee dev_10.bz2 | md5sum >dev_10.md5

  • 备份revision区段(比如,revision [10,15])

    svnadmin dump --deltas$SVN_REPOSITORIES_ROOT/dev -r10:15 –-incremental |bzip2 |tee dev_10-15.bz2 | md5sum >dev_10-15.md5

  • md5校验

    md5sum -c dev_full.md5 < dev_full.bz2

  • 恢复

    bzcat dev_full.bz2 | svnadmin load dev

    注意按顺序恢复;如果是恢复全库备份,最好删除原有的库。