Linux 下部署 SVN 服务器附备份还原详解

本文详细介绍了如何在Linux(CentOS 6.2)系统上部署SVN服务器,包括安装Apache和Subversion,配置SSL实现HTTPS服务,以及备份和还原策略。步骤涵盖从安装必要的软件包,修改配置文件,创建用户权限,到实现图形化管理工具svnmanager的安装与设置。此外,文章还讨论了多种SVN备份方法的优缺点,并提供了一个自动化备份脚本示例。
摘要由CSDN通过智能技术生成

1安装操作系统

安装系统采用 CentOS-6.2/Database Server

2安装配置 apache 与 SVN

1)数据包安装顺序:(安装包在 CentOS-6.2 盘的 Packages 目录下均可找到)
a) apr-1.3.9-3.el6_1.2.i686.rpm
b) apr-util-1.3.9-3.el6_0.1.i686.rpm
c) httpd-2.2.15-15.el6.centos.i686.rpm
依赖文件:httpd-tools-2.2.15-15.el6.centos.i686.rpm与 apr-util-ldap-1.3.9-3.el6_0.1.i686.rpm
d) sqlite-3.6.20-1.el6.i686.rpm
e) subversion-1.6.11-2.el6_1.4.i686.rpm
依赖文件:neon-0.29.3-1.2.el6.i686.rpm
neon 依赖文件:pakchois-0.4-3.2.el6.i686.rpm 与 libproxy-0.3.0-2.el6.i686.rpm
安装 libproxy 命令:三个包同时安装
rpm -ivh libproxy-0.3.0-2.el6.i686.rpm libproxy-bin-0.3.0-2.el6.i686.rpm libproxy-python-0.3.0-2.el6.i686.rpm
f) mod_dav_svn-1.6.11-2.el6_1.4.i686.rpm
安装后将生成文件:/etc/httpd/conf.d/subversion.conf
2)修改 apache(即 httpd)配置文件
#vi /etc/httpd/conf/httpd.conf
执行上述命令后,对文件进行以下修改:
ServerName localhost:80
localhost 表示自己的 IP 地址
(找到上面一行并做类似修改后保存退出)
#service httpd start
#chkconfig httpd on
文件修改完成后,启动 http 服务并使用 chkconfig 命令设置开机自启动。
3)创建自己的 svn 版本库
#cd /home
#mkdir svn
#cd svn
#mkdir data conf
#cd data

#svnadmin create newrepos
#cd /home
#chown –R apache.apache svn
上述步骤的过程功能简要说来就是:在 home 目录下创建新的文件夹 svn,进入 svn,在 svn 下创建文件夹 data 和 conf,data 用来建立创建存放版本库 newrepos,conf 用来存放用户权限控制文件。在创建版本库 newrepos 时,必须使用命令 #svnadmin create。
在完成上述步骤后,进入目录/home/svn/data/newrepos 中,查看是否多出文件,多出文件说明版本库创建成功。
执行下面的命令继续修改文件
#vi /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 /home/svn/data
AuthzSVNAccessFile /home/svn/conf/svn-acl-conf //存储每个项目库可以访问用户的权限信息 AuthType Basic
AuthName “Subversion repos”
AuthUserFile /home/svn/conf/svn-auth-conf //存储 SVN 的访问用户详细信息
Require valid-user

以上内容在 subversion.conf 文件中都有,需要我们消除注释,并按照我们自己 SVN 库安装环境及文件安装路径的不同对有些内容进行修改。
注意:在 SVNParentPath 一行输入的目录必须是创建的版本库所在目录。修改完成后保存退出。
4)为版本库设置使用用户与权限,并创建用户权限控制文件
#htpasswd -cm /home/svn/conf/svn-auth-conf namesvn (注:namesvn 是所创建的用户名) New password:
Re-type new password:
执行上述命令创建版本库用户并设立密码。创建权限控制文件的命令过程如下:
#vi /home/svn/conf/svn-acl-conf
在文件中输入以下内容后保存退出。
[newrepos:/] namesvn=rw
注意:newrepos 表示所建立库的名字,namesvn 表示个人的用户名,rw 表示可读可写,如果具有多个
用 户 , 可 依 次 加 入 “ 用 户 = 权 限 ” 。 此 文 件 可 以 称 作 用 户 的 访 问 权 限 控 制 文 件 与
/home/svn/conf/svn-auth-conf 文件有一定关系。
5)重启 httpd 服务,并查看 httpd 服务是否配置完成
#service httpd restart
查看方法:
在虚拟机的浏览器中输入 http://ip/svn/newrepos(虚拟机 IP 地址加版本库目录),然后输入刚刚创建的用户名与密码登陆,就会进入所创建的版本库。或者在命令行输入如下命令查看 http 服务是否配置完成。

在这里验证 http 服务是否配置完成时,会出现一个错误,错误是:输入用户 密码时,进不去版本库会一直提示你输入用户 密码。解决这个错误的方法如下:
#vi /etc/selinux/config
打开文件,将 SELINUX=enforcing 修改为 SELINUX=disabled,保存退出。输入下列命令
#setenforce 0
#service httpd restart
输入上面命令,重启 http 服务。
或者在命令行输入下面命令来验证:
#svn checkout http://ip/svn/newrepos
若出现如下图所示,证明 http 服务配置完成

3实现 https 服务

1) 安装申请证书所需要的软件包
安装 openssl-1.0.0-20.el6.i686.rpm
安装 mod_ssl-2.2.15-15.el6.centos.i686.rpm
安装完成后生成文件:/etc/httpd/conf.d/ssl.conf 2) 开始进行证书的申请工作
#cd /etc/pki/tls/private
#openssl genrsa -out ca.key 1024
#openssl req -new -key ca.key -out ca.csr
以下为系统提示及输入内容:
You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.

Country Name (2 letter code) [XX]:输入 ca
State or Province Name (full name) []:输入 beijing Locality Name (eg, city) [Default City]:输入 beijing
Organization Name (eg, company) [Default Company Ltd]:输入 lianyintong Organizational Unit Name (eg, section) []:输入 kaifa2bu
Common Name (eg, your name or your server’s hostname) []:输入 svnserver Email Address []:输入 svnserver@163.com
Please enter the following ‘extra’ attributes to be sent with your certificate request
A challenge password []:输入 gao1355
An optional company name []:输入 lianyintong
(以上两步为产生证书的私钥与 CSR)
#cd /etc/pki/tls/certs

#openssl x509 -req -days 365 -in /etc/pki/tls/private/ca.csr -signkey /etc/pki/tls/private/ca.key
-out ca.crt
(为产生自我签署的金钥)
(以上步骤必须在特定文件夹下产生所需的文件,保证输入命令正确,保证产生文件所在文件夹正确,否则后面将发生错误)
3)修改 apache ssl 文件
#vi /etc/httpd/conf.d/ssl.conf
进入文件,修改金钥以及金钥凭证正确路径(此路径即为上步生成的两个文件路径,必须保证路径的准确性)
SSLCertificateFile /etc/pki/tls/certs/ca.crt SSLCertificateKeyFile /etc/pki/tls/private/ca.key
修改完成后保存退出,执行下面命令重启 apache
#/etc/init.d/httpd restart
4)配置实现 https 的虚拟主机
#vi /etc/httpd/conf/httpd.conf添加如下内容后,保存退出。 NameVirtualHost *:443
<VirtualHost *:443> SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/ca.crt SSLCertificateKeyFile /etc/pki/tls/private/ca.key
<Directory /home/svn/data> AllowOverride All

DocumentRoot /home/svn/data ServerName localhost

注意:SSLCertificateFile 与 SSLCertificateKeyFile 所包含的文件路径需按照个人文件所在路径填写。
5)更改 apache 的访问端口
#vi /etc/httpd/conf/httpd.conf
添加如下内容后,保存退出。
<VirtualHost *:3000>
ServerAdmin fengl@sinoufc.com
<Directory “/var/www/html/svnmanager/”> AllowOverride

DocumentRoot /var/www/html ServerName localhost
ErrorLog logs/svnmanager-localhost-error_log
CustomLog logs/svnmanager-localhost-access_log common

6)重启 apache 并查看 https 服务是否实现
#/etc/init.d/httpd restart
验证过程如下:

在虚拟机的浏览器中输入 https://localhost/svn/newrepos ,浏览器会提示说你所登录的地址存在不安全因素,不用管它,直接添加信任(此时可以看到刚才申请的服务器证书),输入用户名与密码,登陆版本库。
也可以在命令行输入以下命令,查看是否配置成功

svn checkout https://localhost/svn/newrepos

如果出现以下信息则证明配置成功

按照要求填写用户名与密码,连接版本库成功。
7)在防火墙中开放 SVN 端口 vi /etc/sysconfig/iptables在 COMMIT 前加入
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT
重启防火墙:service iptables restart

4安装配置 svnmanager(SVN 的图形化控制)

以 root 用户进行软件包的安装与部署
1)软件包安装顺序:(安装包在 CentOS-6.2 盘的 Packages 目录下均可找到)
a) php-5.3.3-3.el6_1.3.i686.rpm
依赖文件:php-common-5.3.3-3.el6_1.3.i686.rpm与 php-cli-5.3.3-3.el6_1.3.i686.rpm
b) php-pear-1.9.4-4.el6.noarch.rpm
此包安装成功后将有/usr/bin/pear 命令,用于安装 VersionControl_SVN-0.3.1.gz c) mysql-5.1.52-1.el6_0.1.i686.rpm
d) php-mysql-5.3.3-3.el6_1.3.i686.rpm
依赖文件:php-pdo-5.3.3-3.el6_1.3.i686.rpm e) php-mbstring-5.3.3-3.el6_1.3.i686.rpm
2)安装 svnmanager
将 svnmanager-1.09.zip 解压到/var/www/html/目录下,并重命名为 svnmanager
#unzip -d /var/www/html/ svnmanager-1.09.zip
#cd /var/www/html/
#mv svnmanager-1.09 svnmanager
3)安装 VersionControl_SVN
将 XML_Parser-1.3.4.tgz 与 VersionControl_SVN-0.4.0.tgz 复制到/usr/lib/php/pear/目录下
#cp XML_Parser-1.3.1.tgz /usr/lib/php/pear/
#cp VersionControl_SVN-0.3.1.tgz /usr/lib/php/pear/

#cd /usr/lib/php/pear/
#pear install --alldeps XML_Parser-1.3.1.tgz VersionControl_SVN-0.3.1.tgz
成功后提示:
Ignoring installed package pear/XML_Parser Ignoring installed package pear/VersionControl_SVN Nothing to install
4)创建 svnmanager 使用的 mysql 数据库
#service mysqld restart
#mysql
mysql>create database svn;
mysql>grant all on svn.* to svnmanager@localhost identified by “123456”; mysql> flush privileges;
mysql>quit;
5)修改 svnmanager 配置文件
#cd /var/www/html/svnmanager/
#mv config.php.linux config.php
#vi config.php
根据/etc/httpd/conf.d/subversion.conf 文件内的 SVNParentPath /home/svn/data AuthzSVNAccessFile /home/svn/conf/svn-acl-conf AuthUserFile /home/svn/conf/svn-auth-conf
三项内容进行如下修改:
//$svn_repos_loc = “/var/www/repos”;
KaTeX parse error: Expected 'EOF', got '#' at position 35: …ome/svn/data"; #̲注意对应 SVNParentP…svn_passwd_file = “/var/www/repos/passwdfile”;
KaTeX parse error: Expected 'EOF', got '#' at position 51: …vn-auth-conf"; #̲注意对应 AuthUserFi…svn_access_file = “/var/www/repos/accessfile”;
$svn_access_file = “/home/svn/conf/svn-acl-conf”; #注意对应 AuthzSVNAccessFile

//$dsn = “mysqli://username:password@hostname/databasename”;
$dsn = “mysqli://svnmanager:123456@localhost/svn”; ##连接 mysql SVN 数据库 用户口令
$admin_name = “admin”; ##初始用户名
$admin_temp_password = “admin”; ##初始密码
6)验证
重启 apache,然后在浏览器里输入 http://IP/svnmanager;第一次会用提示 All tables are missing.
Creating requried tables… Please reload page!
刷新即可
如果出不来东西,显示白屏,则是因为 PHP 页面报错,但是错误信息被屏蔽了;可以修改/etc/php.ini查找 error_reporting=E_ERROR 改成 E_ALL,查找 display_errors=Off 改成 On;刷新后页面将显示错误原因。
7)初始化 SVN 管理员
第一次登录用户与密码:admin/admin。创建管理员用户后该账号将失效。

如果“增加”与“修改”用户时总提示邮件地址无效,则通过修改 PHP 文件解决:
#cd /var/www/html/svnmanager/UserModule/
#vi AddPage.tpl
#vi EditPage.tpl
注释对邮件地址验证的行:

8)常见错误
a)Fatal error: Class ’ MB_internal_encoding’ not found in
/var/www/html/svnmanager/svnmanager/UserModule/ DataModule.php on line 20
解决方法:
安装 php-mbstring-5.3.3-3.el6_1.3.i686.rpm
b)Fatal Error
[2] fopen(/home/svn/conf/svn-acl-conf): failed to open stream: Permission denied (@line 207 in file
/var/www/html/svnmanager/svnmanager/library/class.accessfile.php).
解决方法:将目录/home/svn 的拥有者修改为 apache 用户与 apache 用户组
#chown -R apache:apache /home/svn
c)Fatal error: Class ‘PEAR_ErrorStack’ not found in
/var/www/html/svnmanager/svnmanager/RepositoryModule/UserPrivilegesEditPage.php on line 203
解决方法: 将 VersionControl_SVN 所使用的 0.5.1 版本卸掉,改用 0.4.0 版本
#cd /usr/lib/php/pear/
#pear uninstall VersionControl_SVN-0.5.1
#pear install VersionControl_SVN-0.4.0.tgz
9)汉化
把汉化包里的文件替换现有/var/www/html/svnmanager 里的文件,之后还有几步要做:
a)更改/etc/php.ini 文件
设置 default_charset=’gb2312’或 default_charset=’gbk’
b)更改/etc/httpd/conf/httpd.conf 文件
设置 AddDefaultCharset GB2312 或 AddDefaultCharset GBK
c)重启 httpd
#service httpd restart

5SVN 的备份与还原

5.1SVN 备份简介

svn 备份一般采用三种方式:1)svnadmin dump 2)svnadmin hotcopy 3)svnsync.
注意:svn 备份不宜采用普通的文件拷贝方式(除非你备份的时候将库暂停),如 copy 命令、rsync 命令。
1)svnadmin dump
语法:svnadmin(或 svnadmin 路径) dump 版本库路径及名称 -revision 上次导出的版本号:到本次要导出到的版本号 -incremental > 导出的命名
选项说明:-incremental 为增量备份选项,若去掉此选项则为全量备份

还原备份:svnadmin load 要恢复的版本库路径及名称 < 导出的命名注意:在 shell 脚本内,选项前“-”要用两个,即“–incremental”
2)svnadmin hotcopy
语法:svnadmin(或 svnadmin 路径) hotcopy 版本库路径及名称 备份路径 -clean-logs
还原备份:将备份文件复制到版本库目录下,然后通过 svnmanager 将项目导入;或直接覆盖版本库目录下的项目(覆盖前需将 apache 服务停止)
注意:在 shell 脚本内,选项前“-”要用两个,即“–clean-logs”
3)svnsync
使用 svnsync 备份步骤如下:
a)在备份机上创建一个空库:svnadmin create Project1
b)更改该库的钩子脚本 pre-revprop-change(因为 svnsync 要改这个库的属性,也就是要将源库的属性备份到这个库,所以要启用这个脚本):
cd SMP/hooks;
cp pre-revprop-change.tmpl pre-revprop-change; chmod 755 pre-revprop-change;
vi pre-revprop-change;
将该脚本后面的三句注释掉,或者干脆将它弄成一个空文件。
c)初始化,此时还没有备份任何数据:
svnsync init file:///home/backup/svn/svnsync/Project1/ http://svntest.subversion.com/repos/Project1
语法是:svnsync init {你刚创建的库 url} {源库 url}
注意本地 url 是三个斜杠的:///
d)开始备份(同步):
svnsync sync file:///home/backup/svn/svnsync/Project1
e)建立同步脚本
备份完毕后,建立钩子脚本进行同步。在源库/hooks/下建立/修改 post-commit 脚本,在其中增加一行,内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值