最近有一部分技术需要出差。需要访问公司内网的SVN。直接开放SVN的外网访问权限,是个办法,但是SVN资源都很大,每次都走外网访问速度会很慢。而且,出差期间,只需要只读权限。所以,我做的解决方案是在出差的地方搭一个局域网,然后局域网内做一个公司内网的SVN server镜像。
主要参考这篇文章 SVN实时同步备库方法,下面步骤不多说了。记录一下大致的shell命令。
mkdir -p /data/work/svn/
cd /data/work/svn
svnadmin create reponame
cd /data/work/svn/reponame/hooks/
mv pre-revprop-change.tmpl pre-revprop-change
sed -i '/exit 1/d' pre-revprop-change
chmod +x pre-revprop-change
cd /data/work/svn/reponame/
# 做一些基本的权限配置。这里要创建一个对svn主库有访问权限的账号,密码保持一致。
vi conf/svnserve.conf
vi conf/authz
vi conf/passwd
sudo mkdir -p /var/log/svn
/usr/bin/svnserve -d -r /data/work/svn/ --log-file /var/log/svn/svn.log
# 本地的svn镜像库已经创建好了
# 开始设置同步
svnsync init svn://127.0.0.1/reponame svn://svn.internal.com/reponame --username=xxx --password=xxx --no-auth-cache
# 开始同步
svnsync sync svn://127.0.0.1/reponame --username=xxx --password=xxx --no-auth-cache
遇到几个的问题
-
首次同步的时候,内容比较多(50GB+),中途网络出现问题,同步进程hung住了。只好杀死进程再来。然而再次同步时,命令行报错:
Failed to get lock on destination repos, currently held by ‘client.internal.com:b77f31da-4af9-46b3-a172-54dcbae4eaac’
google之,解决访问见 svnsync-couldnt-get-lock-on-destination-repos,命令行参数中加入
--steal-lock
svnsync sync svn://127.0.0.1/reponame --username=xxx --password=xxx --no-auth-cache --steal-lock
-
因为首次同步时数据较多,我是走的内网地址(svn://svn.internal.com/reponame)同步。而后续出差时,镜像库需要走公司公网(svn://svn.external.com/reponame)来同步SVN。所以,需要切换镜像库同步时使用的主库URL。方法见how-to-change-svn-url-in-svnsync
echo -n "svn://svn.external.com/reponame" > /tmp/url svnadmin setrevprop /data/work/svn/reponame/ -r0 svn:sync-from-url /tmp/url svnlook pg --revprop -r0 /data/work/svn/reponame/ svn:sync-from-url
-
在出差地搭建局域网时,镜像库SVN的内网IP是192.168.0.1,我在局域网内设置DNS解析,将svn.internal.com域名指向192.168.0.1。同时,我将SVN主库的账号密码也同步到SVN镜像库里,设置所有人对镜像库的权限为只读(除了同步数据所用的
syncuser
)。这样,出差的同事,可以不修改任何配置,直接更新SVN。但实际操作时,发现报错:> svn update -r 12275 Updating '.': svn: E170009: Repository UUID 'e0ee040f-cdad-4e5f-abbd-90169ed1c880' doesn't match expected UUID '002130f5-581a-4177-addd-ae2a9abc5565'
然后又google之,找到了设置仓库uuid的方法:svn.reposadmin.maint.uuids
svnadmin setuuid /data/work/svn/reponame/ 002130f5-581a-4177-addd-ae2a9abc5565
-
os x如何从命令行查看网络带宽
nettop -n -m route
Last modified on 2015-02-28