subversion 搭建SVN 服务器 1.10.0版本(201807) SVN迁移 SVN备份与恢复 与apache结合
subversion 搭建SVN 服务器 1.10.0版本(201807) SVN迁移 SVN备份与恢复 与apache结合
20180716 Chenxin
YUM安装方式-推荐方式
18.136.17.59 采用yum方式安装(如果yum的包太旧,那么选择编译安装)
yum -y install subversion
mkdir /home/admin/svn -p
启动服务
svnserve -d -r /home/admin/svn/
创建第一个project:
svnadmin create /home/admin/svn/project01
修改3个配置文件authz passwd svnserve.conf (具体内容见编译安装部分)
创建第二个project:
svnadmin create /home/admin/svn/project02
可以将project01/conf目录复制过来
版本:
[root@ip-10-1-0-200 admin]# svnserve --version
svnserve, version 1.9.7 (r1800392)
compiled Aug 30 2017, 22:22:21 on x86_64-redhat-linux-gnu
编译安装方式
13.251.2.2 采用编译安装
准备工作
安装支持包
yum install gcc g++ libxml2 libxml2-dev libssl-dev curl libcurl4-openssl-dev libpcre3 libpcre3-dev libgd-dev nghttp2 zlib1g-dev libutf8proc-dev expat-devel
安装apr (apr和apr-util可以直接通过yum install httpd安装)
cd /opt
wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-1.6.3.tar.gz
tar xzvf apr-1.6.3.tar.gz
cd apr-1.6.3
./configure --prefix=/usr/local/apr
出现这个提示:cannot remove `libtoolT’: No such file or directory
解决方案:编辑 configure文件,查找 $RM "$cfgfile" 这个地方,用#注释掉,然后重新编译安装就可以了。
./configure --prefix=/usr/local/apr
make
make install
安装apr-util
cd /opt
wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-util-1.6.1.tar.gz
tar xzvf apr-util-1.6.1.tar.gz
cd apr-util-1.6.1
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/
make
make install
正式安装
wget http://mirror.bit.edu.cn/apache/subversion/subversion-1.10.0.tar.gz
wget https://www.sqlite.org/2018/sqlite-amalgamation-3240000.zip
tar zxvf subversion-1.10.0.tar.gz
unzip sqlite-amalgamation-3240000.zip
mv sqlite-amalgamation-3240000 subversion-1.10.0/sqlite-amalgamation
cd subversion-1.10.0/
./configure --prefix=/usr/local/svn --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-lz4=internal --with-utf8proc=internal
make
make install
验证版本
/usr/local/svn/bin/svn --version
svn, version 1.10.0 (r1827917)
启动SVN服务:
[root@ip-10-0-1-23 conf]# /usr/local/svn/bin/svnserve -d -r /home/svn110/
创建库(项目)
/usr/local/svn/bin/svnadmin create /home/svn110/ku
[root@ip-10-0-1-23 svn110]# tree
.
└── ku
├── conf
│ ├── authz
│ ├── hooks-env.tmpl
│ ├── passwd
│ └── svnserve.conf
配置文件
3个主要配置文件说明
authz passwd svnserve.conf
svnserve.conf: svn服务配置文件
passwd: 用户名口令文件(明文标示的密码,和htpasswd生成的加密的密码不同,格式也不同)。
authz: 权限配置文件
svnserve.conf 文件:
[root@ip-10-0-1-23 conf]#cat svnserve.conf |grep -v "#"
[general] #以下4项默认是关闭的,需要开启.否则匿名可以访问.或无法输入用户名密码.
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
[sasl]
Passwd 文件 :
在svnserve.conf文件里启用这个文件,配置如下:
[root@ip-10-0-1-23 conf]# cat passwd
[users]
chenxin = xxx
authz 文件 :
在svnserve.conf文件里启用这个文件,配置如下:
[root@ip-10-0-1-23 conf]# cat authz |grep -v "#"
[aliases]
[groups]
admin = chenxin
[/]
- = r
@admin = rw
服务启停
启动SVN服务:
[root@ip-10-0-1-23 conf]# /usr/local/svn/bin/svnserve -d -r /home/svn110/
注意:这里启动的目录,不能是下一级的"ku"目录,必须是多个ku的上层(每个ku包含自己的conf等目录).
-d表示后台运行
-r 指定根目录是 /home/svn110/ 再下一层才是ku的名称.
停止SVN服务:
kill -9 svnserve进程
客户端连接
win客户端连接需要安装客户端(略),连接地址 svn://1.1.1.1/ku/
linux客户端: svn co svn://1.1.1.1/project03
默认端口:3690
迁移操作
svn的备份恢复不要采用直接copy或rsync方式.
注意,svn备份不宜采用普通的文件拷贝方式(除非你备份的时候将库暂停),如copy命令、rsync命令。
笔者曾经用 rsync命令来做增量和全量备份,在季度备份检查审计中,发现备份出来的库大部分都不可用,因此最好是用svn本身提供的功能来进行备份。
迁移优先选择svnadmin hotcopy 方式.
svnadmin hotcopy方式(推荐hotcopy方式)
windows和Centos均hotcopy方式
hotcopy:速度比较快(无需创建库,拷贝conf文件,会将所有文件hotcopy过去),文件大小跟库一样.
Centos挂载windows共享文件夹:
mount -t cifs -o vers=2.0,username="administrator",password="xxx" //192.168.31.31/SVN-bak-20180718-test /mnt/svn-old
备份: 源->目标
svnadmin hotcopy F:\svnhome\project_a G:\SVN-bak-20180718-test\project_a --clean-logs
恢复: 源->目标
svnadmin hotcopy /mnt/svn-old/project_a /svn-data/svn-new/project_a --clean-logs #注意,这里最好不要改成project_"其他"
测试:
hotcopy过来的project_a能够正常update和commit.
svnadmin dump + load 方式 (不推荐)
dump备份方式与文件共享操作
原windows服务器信息:
192.168.31.31 SVN-bak-20180718-test administrator xxx
执行备份:
svnadmin dump F:\svnhome\project1 > G:\SVN-bak-20180718-test\project1-20180718-1653.dump
记得将对应的conf文件拷贝到G:\SVN-bak-20180718-test\xxx-conf\里.
将G:\SVN-bak-20180718-test文件夹共享出去
Centos挂载windows共享文件夹:
mount -t cifs -o vers=2.0,username="administrator",password="bjld2017" //192.168.31.31/SVN-bak-20180718-test /mnt/svn-old
验证挂载成功
[root@MiWiFi-R3P-srv mnt]# ls /mnt/svn-old/
project1-20180718-1653.dump project1-conf project2-20180718-1653.dump project2-conf project3-20180718-1653.dump project3-conf
执行文件拷贝
cp -aprf /mnt/svn-old /svn-data/
dump完成
centos上执行load操作-恢复dump文件
速度较慢,dump文件大约是原先库的4倍.
创建project:
svnadmin create /svn-data/svn-new/project1
拷贝配置文件:
cp /svn-data/svn-old/project1-conf/conf/* /svn-data/svn-new/project1/conf/
执行load操作:
svnadmin load /svn-data/svn-new/project1 < /svn-data/svn-old/project1-20180718-1653.dump
因load时间较久,可以采取:
nohup svnadmin load /svn-data/svn-new/project1 < /svn-data/svn-old/project1-20180718-1653.dump 2>&1 &
启动服务并验证:
svnserve -d -r /svn-data/svn-new/
客户端验证:
svn://192.168.31.129/project1/
load完成
SVN历史版本删除(为SVN库瘦身)- 指定版本dump再还原至新库
20131018 chenxin 摘抄
当svn库庞大到一定程度的时候,无论是在查询还是在备份方面肯定会给我们带来很多不便,以下将介绍为svn库瘦身的办法,简单的说,就是新建一个库,然后把旧库我们所需要查询的一个版本范围的资料搬移过去,具体操作如下:
软件环境:
Apache 2.2.14
Subversion 1.6.6
TortoiseSVN 1.6.6.17493
SVN版本库位置:D:\SVNRepository,占地3.34G
步骤:
1.准备工作
停止运行中的Apache。
打开命令行提示符,输入命令: svnlook youngest d:\SVNRepository ,查看当前最新的版本号,显示最新版本记录为755。
2.备份版本库 (很重要,以免过程中出现意外而导致数据丢失或者版本库损坏)
把D盘的版本库,备份到C盘,同时清除历史日志,输入命令:svnadmin hotcopy --clean-logs d:\SVNRepository c:\SVNRepository ,这样备份后版本库从3.34G变为3.24G。 (这里可选择是否清除历史日志)
3.dump需要保留的版本
我最初选择保留700-755的版本,输入:svnadmin dump c:\SVNRepository -r 745:755 > d:\repo_dump_745_755.dmp 。
4.删除就版本库 (这一步是供选择,不删除亦无碍)
输入命令:rmdir /s/q d:\SVNRepository ,删除旧版本库。也可以直接在资源管理器里删除。
5.创建空的版本库
输入命令:svnadmin create d:/SVNRepository ,检查空的版本库大概31.2K大小。
6.把dump文件导入版本库
输入命令:svnadmin load d:\SVNRepository < d:\repo_dump_745_755.dmp ,这时屏幕上会显示正在载入版本库中的文件或正在提交/装载的版本。完成后,用命令svnlook youngest d:\SVNRepository 查看,显示当前版本库最新版本号是11,整个版本库大小501M。
至此,SVN版本库瘦身成功,腾出空间2.7G.
Subversion控制中文目录的访问权限
20130329
Subversion(SVN)是否可以对中文目录进行权限控制:
经过测试,发现subversion是可以很好地控制中文目录的权限的。方法很简单,就是将你的权限控制文件的格式转换为无BOM的UTF-8格式,将权限文件改成UTF-8格式:
1.在Vim中可以直接查看文件编码
:set fileencoding
2.设置编码
:set fileencoding=utf-8
:set nobomb set nobomb 是让vim不要自动设置字节序标记,因为并不是所有编辑器都可以识别字节序标记的。
hooks的使用
20101010
修改 /home/sftproot/home/poke/svn/repos/twsztest/hooks 下的 post-commit (原文件名为 post-commit.tmpl,必须更改为 post-commit):
!/bin/sh
export LANG=en_US.UTF-8
注意文件的编码
/usr/local/bin/svn update --username chenxin --password chenxin /home/sftproot/home/poke/svndoc
/usr/local/bin/svn checkout file:///home/sftproot/home/poke/svn/repos/twsztest /home/sftproot/home/poke/svndoc/
/usr/local/bin/svn update file:///home/sftproot/home/poke/svn/repos/twsztest /home/sftproot/home/poke/svndoc/
添加项目(注意中文编码的问题,最好将所有文件都以英文命名方式):
svn checkout file:///home/sftproot/home/poke/svn/repos/twsztest /home/sftproot/home/poke/svndoc/
svn update file:///home/sftproot/home/poke/svn/repos/twsztest /home/sftproot/home/poke/svndoc/
Subversion结合apache的使用
20121105陈信
apache的安装(安装完subversion后)
Apache:httpd-x.x.x 下载地址:http://apache.freelamp.com/httpd/httpd-x.x.x.tar.gz
./configure --prefix=/usr/local/apache --enable-module=so --enable-deflate --enable-headers --enable-dav --enable-dav-fs --enable-dav-lock
内网SVN服务器地址(同为VPN服务器):192.168.20.10
1.创建工程文件
svnadmin create --fs-type fsfs /home/svnroot/repos/tianqiyunying
删除工程文件
将工程目录之间mv到其他目录下即可.
2.赋权限:
chown www.www tianqiyunying/ -R
3.备份原密码文件:
cp -aprf passwd passwd_20121106.bak
4.添加用户passwd
cd /home/svnroot/repos/
/usr/local/apache/bin/htpasswd -m ./passwd zhongyangxiao
/usr/local/apache/bin/htpasswd -m ./passwd liuxiyao
/usr/local/apache/bin/htpasswd -m ./passwd chengdaizong
5.配置工程用户属组authz
cat /home/svnroot/repos/authz
yunwei = chenxin,zhouxingjie,zhangshujun,wanglin,heqing
tianqiyunying = chenxin,zhongyangxiao,liuxiyao,chengdaizong
lzllbase = peixiaohui,chengang,jiachen,zouchenxing,puhaijun,lili,lirunze,xianglingxun,zhangwenwen,liujianzhao,tianyu
lzlldata = tianyu,muliang,peixiaohui,chengang
when add svn user, and the user to "allusers" group pls.(allusers组里加入的是所有用户,以便在该用户不需要访问的文件夹中加入该用户,限制该用户访问该文件夹,比如lzllyunying那个工程的配置)
allusers = chenxin,zhouxingjie,zhangshujun,wanglin,heqing,peixiaohui,chengang,jiachen,zouchenxing,puhaijun,lili,lirunze,xianglingxun,zhangwenwen,liujianzhao,tianyu,muliang
[yunweibu:/]
@yunwei = rw
[tianqiyunying:/]
@tianqiyunying = rw
[lzllyunying:/]
@lzllbase = r #定义这2个组都可以看到根目录,不定义这个的话,这2个组只能通过直接路径...lzllyunying/basefiles/访问.
@lzlldata = r
http://192.168.20.10:8080/svn/lzllyunying/basefiles/
[lzllyunying:/basefiles]
@lzllbase = rw
@allusers = #这里定义除需要访问的用户外,其他用户无任何权限.也就是连查看都看不到.
http://192.168.20.10:8080/svn/lzllyunying/yunyingdata/
[lzllyunying:/yunyingdata]
@lzlldata = rw
@allusers =
6.apache配置文件
cat /usr/local/apache/conf/httpd.conf
ServerRoot "/usr/local/apache"
Listen 8080
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<IfModule !mpm_netware_module>
<IfModule !mpm_winnt_module>
User www
Group www
ServerAdmin you@example.com
ServerName www.example.com:8080
DocumentRoot "/usr/local/apache/htdocs"
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
<Directory "/usr/local/apache/htdocs">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
DirectoryIndex index.html
<FilesMatch "^.ht">
Order allow,deny
Deny from all
Satisfy All
ErrorLog "logs/error_log"
LogLevel warn
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
LogFormat "%h %l %u %t "%r" %>s %b" common
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %I %O" combinedio
CustomLog "logs/access_log" common
<Location /svn>
DAV svn
SVNParentPath /home/svnroot/repos
AuthType Basic
AuthName "Subversion.WebGame"
AuthUserFile /home/svnroot/repos/passwd
AuthzSVNAccessFile /home/svnroot/repos/authz
Require valid-user
7.访问路径:
http://192.168.20.10:8080/svn/tianqiyunying/
<<完>>