r4 - 16 Feb 2008 - 07:33:24 - Main.yfangYou are here: YWiki >  MyTech Web > 用Pushmi给svn做镜像

用Pushmi给svn做镜像

Pushmi 简介

Pushmi 安装

  • 整个pushmi的安装过程不是非常顺利,所以这里先写出一个正常安装的流程,我当时的安装过程比较乱,可以作为trobule shooting的帮助,里面可以包含一些有提示性的内容。

1. 安装subversion

# 我的操作系统是CentOS4,所以这里使用yum进行软件安装,如果你不是CentOS或是Fedora,请使用其他安装方法
yum install subversion subversion-perl memcached

#subversion-perl的安装是为了保证subversion配合perl模块使用,因为Pushmi主要功能是调perl模块实现的。
#memcached的安装是因为Pushimi运行需要memcached配合

2. 安装适当版本的apr和apr-util及其开发包。

  • tip CenOS5 里可以跳过此步
  • 由于yum列表里的apr相关rpm版本都比较低,安装perl模块时会检查失败,所以我这里从外部下载rpm手动安装。
  • 到http://rpm.pbone.net 下载到我们需要版本的apr-devel-0.9.13-1.i386.rpm、apr-0.9.13-1.i386.rpm、apr-util-devel-0.9.13-1.i386.rpm和apr-util-0.9.13-1.i386.rpm
wget ftp://ftp.pbone.net/mirror/ftp.apache.org/apache/dist/apr/binaries/rpm/i386/apr-devel-0.9.13-1.i386.rpm
wget ftp://ftp.pbone.net/mirror/ftp.apache.org/apache/dist/apr/binaries/rpm/i386/apr-0.9.13-1.i386.rpm
wget ftp://ftp.pbone.net/mirror/ftp.apache.org/apache/dist/apr/binaries/rpm/i386/apr-util-devel-0.9.13-1.i386.rpm
wget ftp://ftp.pbone.net/mirror/ftp.apache.org/apache/dist/apr/binaries/rpm/i386/apr-util-0.9.13-1.i386.rpm
rpm -Uvh apr*.rpm

3. 安装Pushmi和Pushmi依赖的SVK模块

cpan> force install SVK
cpan> force install Pushmi

4. 环境准备

useradd pushmi

vi /etc/pushmi.conf #这个文件可能开始并不存在,填写下列内容,保存
username: pushmi
password: pushmi
authproxy_port: 8123
use_cached_auth: 1
use_shared_commit: 1

mkdir /var/pushmi && chmod g+w /var/pushmi && chown pushmi:pushmi /var/pushmi #这里用来存放slave仓库

5. Pushmi实战

su - pushmi
  • 以pushmi用户身份运行
$ memcached -p 8123 -dP /var/run/memcached.pid

  • 之后配置好访问的私钥,进行下面的测试:
$ svn checkout svn+ssh://user@svnserver/var/svnroot/testrepo
  • 如果可以工作就可以开始真正的pushmi测试了
  • 测试如下命令:
$ pushmi mirror /var/pushmi/slave-repo svn+ssh://user@svnserver/var/svnroot/testrepo
  • 正常情况下会得到一句“Mirror initialized.”
  • 这样你就指定了一个目录用于slave,实际上相当于一个空的仓库
  • 然后同步数据,第一次同步数据消耗的时间根据数据规模有很大差异:
$ pushmi sync --nowait /var/pushmi/slave-repo
Retrieving log information from 1 to 13
[/var/pushmi/slave-repo] sync revision 1 to 13

  • 今后你要做的就是用cron 执行 pushmi sync --nowait /var/pushmi/slave-repo,比如5分中执行一次
  • 编辑/etc/crontab文件,添加一行
*/5 * * * * pushmi /usr/bin/pushmi sync --nowait /var/pushmi/slave-repo

Pushmi测试结果

  • 下面是我测试下来的pushmi功能:
  • master和slave之间的网络好的情况下:
    • master上的提交不会触发影响slave
    • slave上的提交之前会首先将slave与master同步,于是如果slave上的这次提交会产生冲突,则这次提交失败
    • slave上的成功提交会同时更新到master上,换句话说,master上的数据永远不比任一slave上的旧
  • master和slave之间网络断开情况下:
    • master上可以正常co,ci,update等操作
    • slave上可以co,update,可是不能提交新的更改
  • slave上的提交只能使用pushmi执行用户操作,假设slave以pushmi用户做的镜像,则不能使用其他帐户对slave进行提交操作,只能做co操作,即使root也不可以
  • 上面的情况有一种例外就是slave和master是同一台服务器,那么可以以其他有权限的用户(比如root或者yfang)提交给slave,master看到的更新log是真实的用户行为,不是pushmi
  • 总体来说这个工具还是很不错的,支持华人! 如果你安装顺利就可以不必往下看了。这里是我当时实际的操作过程和bug shooting的过程。

-- Main.yfang - 17 Dec 2007

Edit | WYSIWYG | Attach | Printable | Raw View | Backlinks: Web, All Webs | History: r4 < r3 < r2 < r1 | More topic actions
 
Powered by YWiki
This site is powered by the TWiki collaboration platformCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding YWiki? Send feedback