SVN的自动化安装和迁移备份
创业公司就是累,啥都需要自己干。作为默安科技的首席资深实习生,这一年走来,我可以基本啥工作都有涉及了。今天这篇博文讨论的SVN服务器迁移与安全也是我的日常一点点的工作内容之一了。当然,这个当对比较简单。参考一些其他人整理的资料,笔者也写了几个脚本将这份工作自动化处理了。便于后期自己备忘。
一、SVN服务器的安装部署
SVN服务器有2种运行方式:
(1)独立服务器,采用SVN自带的协议运行,即 svn://domain/repository的形式
(2)借助Apache,即建立一个这样的通过http://或https://来访问的版本库服务器
这里仅讨论使用第一种方式的安装,这篇文章介绍了第二种的安装:《用 Apache 和 Subversion 搭建安全的版本控制环境》。
1、通过yum安装subversion:
# yum install subversion
安装完成可以通过svnserve –version检查是否安装成功:
[root@localhost ~]# svnserve --version svnserve, version 1.7.14 (r1542130) compiled Nov 20 2015, 19:25:09 Copyright (C) 2013 The Apache Software Foundation. This software consists of contributions made by many people; see the NOTICE file for more information. Subversion is open source software, see http://subversion.apache.org/ The following repository back-end (FS) modules are available: * fs_base : Module for working with a Berkeley DB repository. * fs_fs : Module for working with a plain file (FSFS) repository. Cyrus SASL authentication is available.
2、创建svn仓库
mkdir -p /home/svn svnadmin create /home/svn
svn仓库建立完成后,会自动生成一些配置文件,我们需要修改这些配置文件。
3、设置svn账户和权限
的配置文件都在所创建的仓库的/conf目录下。有以下几个文件authz, passwd, svnserve.conf。其中authz 是权限控制的,可以设置哪些用户可以访问哪些目录, passwd是设置用户和密码的, svnserve.conf是设置svn相关操作的。
3.1 配置svnserve.conf:
anon-access = read #是否允许匿名用户可读,设置为“none”,取消可读权限 auth-access = write #认证的可写权限 password-db = passwd #指定passwd文件位置 authz-db = authz #指定authz文件位置 realm = Welcome to moresec's SVN! #指定登陆提示
3.2 配置用户名和密码(passwd文件):
[users] s0nnet = heheda
3.3 配置权限authz:
[groups] manager = admin project_1 = admin,s0nnet [/]# 基于根目录的控制,同时可以设定组权限和单个用户权限 @manager = rw #读写 * = r #只读,如果什么都没有设置,则什么权限都没有 [/pro_2] admin = rw s0nnet = rw * = r ### 例子 ###: #如果SVN的库地址是: /var/svn_server. 根目录下有个svn_home作为根,则authz文件可以配置如下: [groups] manager = admin,s0nnet project_1 = s0nnet [svn_home:/project_1] @manager = rw [svn_home:/project_2] s0nnet = rw * = r
4. SVN服务的启动与停止
svnserve -d -r /home/svn # 启动 killall svnserve # 停止
也可以设置 svnserve 随系统启动,添加 /etc/init.d/svnserve 文件:
svnserve -d -r /home/svn
然后添加到系统启动项中:
chmod +x svnserve chkconfig –add svnserve
另外,在防火墙上开放 svnserve 使用的端口,默认是 3690 端口。
5、访问测试
启动svn: # svnserve -d -r /var/svn_server 如果已经有svn在运行,可以换一个端口运行 # svnserve -d -r /var/svn_server --listen-port 3391 这样同一台服务器可以运行多个svnserver 建议采用TortoiseSVN, 连接地址为: svn://127.0.0.1:3391/ (如果指定端口需要添加端口 :端口号) 连接后可以上传本地的文件,有效的管理你的代码。 # 测试连接 svn checkout svn://domain/project_1
相应自动化脚本,可以参考笔者Github:https://github.com/Lingerhk/linux-shell/blob/master/install_svn.sh
二、SVN迁移(双机冷备)
之所以需要进行SVN迁移,是因为公司的SVN服务器不太稳定,容易出故障。但是限于资源有限,又无法实时开启双机进行热备。所以当有故障发生时,就需要紧急执行这个自动化迁移脚本,对SVN服务器进行临时紧急迁移。
#!/bin/bash # > SVN服务器迁移脚本 # > desc: 采用 svnadmin hotcopy的方式进行 # > by: s0nnet<www.s0nnet.com> SVN_DIR=/var/svn_server SVN_BAK=/var/svn_backup SSH_ADDR=root@172.16.94.130 SSH_PASS=xxxx #setup1: hotcopy srouce code if [ ! -d ${SVN_BAK} ];then mkdir ${SVN_BAK} fi svnadmin hotcopy $SVN_DIR ${SVN_BAK}/svn_data SVN_PKG=svn_data_`date +%F`.tar.gz cd $SVN_BAK; tar zcf ${SVN_PKG} svn_data #setup2: scp tar package yg_ssh.exp ${SSH_PASS} ssh ${SSH_ADDR} "mkdir ${SVN_BAK}; mkdir ${SVN_DIR}" yg_ssh.exp ${SSH_PASS} scp ${SVN_BAK}/${SVN_PKG} ${SSH_ADDR}:${SVN_BAK} yg_ssh.exp ${SSH_PASS} ssh ${SSH_ADDR} "cd ${SVN_BAK}; tar zxvf ${SVN_PKG}; svnadmin hotcopy svn_data ${SVN_DIR}" yg_ssh.exp ${SSH_PASS} ssh ${SSH_ADDR} "svnserve -d -r ${SVN_DIR}"
相应自动化脚本,可以参考笔者Github::https://github.com/Lingerhk/linux-shell/blob/master/svn_migration.sh
相关文档:
http://www.iitshare.com/linux-svn-migration.html
http://151wqooo.blog.51cto.com/2610898/1256188