svn迁移(由windows visualsvn迁移至linux subversion)

    最近由于公司使用的visual svn服务所在的windows主机经常出现自动重启故障,导致开发人员在提交代码时经常提交失败。鉴于此,决定将svn由windows的visualsvn迁移至Linux主机下的subversion软件搭建的svn主机上。

一、linux系统svn服务器的搭建

1、安装环境准备工作

系统 centos7.5   内存:4g   cpu: 2核    硬盘大小:250g

Subversion版本:1.7.14(yum方式安装)

httpd版本:2.4.6(yum安装)

ip地址:192.168.1.117

安装完成后svn server既可以通过svn协议管理,也可通过http协议管理

2svn服务的安装

yum install httpd subversion mod_dav_svn

3、创建项目

创建项目时使用”svnadmin create”命令创建

#创建svn服务数据存放目录及配置文件存放目录
mkidr /data/{svndata,etc}
# 创建一个项目
Svnadmin create /data/svndata/data1

4、配置svn

    当创建一个svn仓库时,默认的当前仓库的配置在当前仓库的conf目录下,主要的配置文件有权限管理配置文件”authz”,密码配置文件”passwd”,svn服务配置文件”svnserve.conf”。

    当存在多个项目时,为了方便管理及授权,可以通过配置”svnserve.conf”将密码及授权配置文件制定到统一的目录下。

svnserve.conf配置如下:

[general]
anon-access = none 
auth-access = write
password-db = /data/etc/svn-user.conf
authz-db = /data/etc/svn-authz.conf
realm = system

    anon-access表示匿名用户的权限,值有:read write none

    auth-access表示认证用户的权限,值有:read write none

    password-db表示用户名及密码文件存放位置

    authz-db权限分配文件的存放位置

    realm为登录提示信息

 

/data/etc/svn-user.conf配置如下

[users]
liuyi = liuyi
dayi123 = dayi123

     前面一个字段为用户名,后面一个字段为密码,密码为明文的形式。

 

/data/etc/svn-user.conf文件配置如下:

[groups]
dev = dayi123,dayi
[system:/]
liuyi = rw
@dev = rw
[reps2:/]
liaoxb = rw

    如果有多个用户访问同一个项目时,可以定义一个组,将用户添加到组下,再将此项目权限授予组。

5、配置通过http管理svn

(1)创建支持svn的httpd配置文件

# httpd服务的配置文件如下:
]# cat /etc/httpd/conf.d/subversion.conf 
LoadModule dav_svn_module     modules/mod_dav_svn.so 
LoadModule authz_svn_module   modules/mod_authz_svn.so 
<Location /svn>
  DAV svn
  SVNParentPath /data/svndata
  AuthType Basic
  AuthName "dev.chinatvpay.com"
  AuthUserFile /data/etc/passwd
  AuthzSVNAccessFile /data/etc/authz
  Require valid-user
</Location>

(2)创建使用http协议的用户密码文件并创建用户

    通过基于http协议和基于svn协议的用户是互不相关的,如果想让一个用户能同时通过两种方式管理svn,需要通过两种方式添加用户。Httpd服务的认证文件存放路径存放在httpd的配置文件中,其中”AuthUserFile”为认证文件的存放路径。” AuthzSVNAccessFile”为权限管理文件存放路径。

# 创建用户密码文件并设置密码,第一次创建时加”-c”选项,以后创建不能加”-c”选项,不然文件可能会被覆盖
]# htpasswd –c /web/svn/passwd dayi123
# 查看创建的用户及密码
]# cat etc/passwd 
liuyi:$apr1$G8CzDQYV$.0FQccOaPQ9PHDFZWQNKH0

(3)创建基于http协议访问的用户的授权文件

# 文件路劲为http配置中指定的路径
]# cat /data/etc/authz 
[/]
liuyi = rw
dayi123 = rw

(4)对svn目录授权,使能通过http操作

# 修改svn数据目录的权限及所有者
]# chmod 755 /data/svndata -R
]# chown apache:apache /data/svndata -R

6、启动svn

#启动svnserver
]# svnserve -d -r /data/svndata
# 启动httpd服务
]# systemctl start httpd

二、svn服务器的迁移

1、在Linux服务上创建svn仓库

    在Linux服务上依据window visualsvn上存在的仓库名称创建仓库。

# 创建所有的仓库
]# svnadmin create /data/svndata/system
]# svnadmin create /data/svndata/code
]# svnadmin create /data/svndata/codebase
]# svnadmin create /data/svndata/dev
]# svnadmin create /data/svndata/devlop
]# svnadmin create /data/svndata/public
]# svnadmin create /data/svndata/outdev

2、将windows上的visualsvn上的所有仓库导出

     Linuxsvn安装完成后,需要将windows svn上的仓库导出,拷贝到linux svn机器上上,再从linux svn上导入。Windows仓库的导出是通过再cmd窗口中执行命令导出的。

    导出命令:svnadmin dump “原仓库路径” >  “备份的文件路径”  

    在windows上导出svn仓库时,如果svn仓库较大且存在多个svn仓库时时,由于导出时间较长,可将所有的导出命令写入到bat脚本中,通过运行bat脚本导出。导出脚本内容如下:

svnadmin dump “D:\data\svndata\system” > D:\backup\system.dump
svnadmin dump “D:\data\svndata\code” > D:\backup\code.dump
svnadmin dump “D:\data\svndata\codebase” > D:\backup\codebase.dump
svnadmin dump “D:\data\svndata\dev” > D:\backup\svndata.dump
svnadmin dump “D:\data\svndata\devlop” > D:\backup\svndata.dump
svnadmin dump “D:\data\svndata\public” > D:\backup\svndata.dump
svnadmin dump “D:\data\svndata\outdev” > D:\backup\outdev.dump

3、将svn仓库备份在linux svn上导入

     将svn仓库导出后,拷贝到linux svn机器上,可通过sftp或ftp上传值linux svn主机。上传后导入到创建好的相应仓库里

    导入命令:svnadmin load “仓库路径” < “备份文件路径”

    导入时也可通过shell脚本导入,脚本内容如下

#!/bin/bash
svnadmin load /data/svndata/system < /data/backup/system.dump
svnadmin load /data/svndata/code < /data/backup/code.dump
svnadmin load /data/svndata/codebase < /data/backup/codebase.dump
svnadmin load /data/svndata/dev < /data/backup/dev.dump
svnadmin load /data/svndata/devlop < /data/backup/devlop.dump
svnadmin load /data/svndata/public < /data/backup/public.dump
svnadmin load /data/svndata/outdev < /data/backup/outdev.dump

4、用户迁移

     Svn仓库数据迁移完成后需要对用户进行迁移,由于windows服务器上的visualsvn使用的用户为域用户,无法完成对用户的迁移,所以只能使用手动添加创建。Windows svn权限的配置文件也是通过用户的id配置的,无法配置,只能重新分配。

三、建立svn主从同步

   为了提高svn的高可用性,防止svn服务器出现故障,需要为svn服务器搭建一个备用的svn server,让主svn实时将代码的提交更新同步到备用svn上,已完成svn服务的高可用。

1、环境准备

    Svn备机环境准备如下:

    系统 centos7.5   内存:4g   cpu: 2核    硬盘大小:250g

    Subversion版本:1.7.14(yum方式安装)

    httpd版本:2.4.6(yum安装)

    ip地址:192.168.1.118

     在svn server备机上,创建同主svn上相同的库安装相同的服务;建立用于同步数据的用户(基于svn协议的账号),用户需对所有的仓库有读写权限。svn账号权限统一在/data/etc/下统一分配管理。

2、配置同步

    在备库的每个仓库的hooks目录下建立名称为”pre-revprop-change”的文件,并赋予执行权限。

# pre-revprop-change内容如下
]# cat pre-revprop-change
exit 0
# 给此文件赋予执行权限
]# chmod 755 pre-revprop-change

3、同步文件

     同步操作均在主svn上操作

    在同步数据前先要对svn做初始化,初始化完成后再进行第一次同步,通过初始化缓存下主备svn的用户及密码等相关信息,同步时不再需要输入用户名密码。初始化的命令为:”svnsync init 目标svn链接  源svn链接”。

# 对两台svn的所有仓库先做初始化,第一个初始化的仓库需要输入主机密码及svn用户密码
svnsync init svn://192.168.1.118/system svn://192.168.1.117/system
svnsync init svn://192.168.1.118/code svn://192.168.1.117/code
svnsync init svn://192.168.1.118/codebase svn://192.168.1.117/codebase
svnsync init svn://192.168.1.118/dev svn://192.168.1.117/dev
svnsync init svn://192.168.1.118/devlop svn://192.168.1.117/devlop
svnsync init svn://192.168.1.118/public svn://192.168.1.117/public
svnsync init svn://192.168.1.118/outdev svn://192.168.1.117/outdev

    在初始化完成后,就可以同步数据了,如果数据量大,第一次同步数据比较耗时,可以将同步命令写入脚本内去执行:

]# cat svnrsync.sh
#!/bin/bash
svnsync sync svn://192.168.1.118/system
svnsync sync svn://192.168.1.118/code
svnsync sync svn://192.168.1.118/codebase
svnsync sync svn://192.168.1.118/dev
svnsync sync svn://192.168.1.118/devlop
svnsync sync svn://192.168.1.118/public
svnsync sync svn://192.168.1.118/outdev

    第一次同步完成后,可将同步脚本加入定时任务,定时去执行;如果想让提交的代码实时的跟新到备库中可以在仓库的hooks目录下的” post-commit.tmpl”中加入同步命令即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章