Centos6下SVN服务器(结合Apache)的搭建

前端之家收集整理的这篇文章主要介绍了Centos6下SVN服务器(结合Apache)的搭建前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一、什么是 Subversion?

(本文永久地址:http://www.jb51.cc/article/p-srhokzqs-bmq.html

Subversion 是一个免费/开源的版本控制系统(version control system,VCS),也就是说,Subversion 可以跨越时间地对文件和目录,以及它们的修改进行管理. 这就允许你恢复数据的旧版本,或检查数据的修改历史. 由于这个特点,很多人把版本控制系统看成是一种“时间机器”。

Subversion 可以跨越网络进行操作,这就允许多个用户在不同的机器上工作. 从某种程度上讲,允许用户在各自的空间里修改和管理同一组数据可以促进团队协作,因为修改不再是单线进行,开发速度会更快. 由于所有的工作都被记录在,也就不用担心并行开发会降低软件的质量―如果出现不正确的修改,只要撤消那一次更改操作即可。

某些版本控制系统同时也是软件配置管理 (software configuration management,SCM) 系统. 这种系统经过精巧的设计,专门用于管理源代码,具备许多与软件开发有关的特性―理解编程语言,提供了程序构建工具. Subversion 不是 SCM,它是一个通用系统,可以管理任意类型的文件集合. 对你来说,这些文件可能是源代码文件―对别人来说,可能是一个货物清单或数字电影。

二、Subversion 的架构

wKioL1l8LDrhuW5tAAFZGxQmg-k305.png-wh_50

图中的一端是存放所有版本数据的 Subversion 仓库,另一端是 Subversion 客户端程序,客户端程序管理着部分版本数据在本地的映射. 两端之间是穿过仓库访问 (Repository Access) 层的多条访问路径,其中一些路径跨越计算机网络,通过网络服务器对仓库进行访问,其他一些路径则不经过网络,直接访问仓库.

三、Subversion 的组件

svn

客户端命令行工具

svnversion

用于报告工作副本状态 (就项目的版本号而言) 的工具

svnlook

可以直接检查仓库的工具

svnadmin

用于创建,调整或修复 Subversion 仓库的工具

mod_dav_svn

Apache HTTP 服务器插件,插件允许用户通过网络访问仓库

svnserve

一个定制的,可独立运行的服务器程序,可以以守护进程方式运行,也可以被 SSH 调用,这是另一种允许用户通过网络访问仓库的方法

svndumpfilter

过滤 Subversion 仓库转储数据流的程序

svnsync

可以跨越网络对仓库进行增量镜像备份的程序

svnrdump

可以跨越网络对仓库历史进行转储和加载的程序

svnmucc

该工具支持在没有工作副本的情况下,在一个单独的提交中对多个仓库执行基于 URL 的操作


四、安装Subversion前的准备

安装一些常用的依赖包

yum install -y make gcc gcc-c++ perl zlib-devel libaio libpng libpng-devel libjpeg-devel pcre-devel

yum install -y libXpm-devel openssl openssl-devel libxml2-devel bzip2-devel.x86_64 libjpeg-turbo-devel

yum install -y freetype freetype-devel libtool cmake ncurses-devel bison re2c curl-devel wget

rpm -ivh "http://mirrors.sohu.com/fedora-epel/epel-release-latest-6.noarch.rpm"

yum install -y libmcrypt-devel re2c unzip

安装Subversion需要的依赖包

(详情可参考官方文档:http://svn.apache.org/repos/asf/subversion/trunk/INSTALL)

1. Apache Portable Runtime 1.3 or newer

cd /usr/localhost/src

wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-1.5.2.tar.gz

wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-util-1.5.4.tar.gz

tar zxvf apr-1.5.2.tar.gz

cd apr-1.5.2

./configure --prefix=/usr/local/apr

make && make install

cd ..

tar zxvf apr-util-1.5.4.tar.gz

cd apr-util-1.5.4

./configure --prefix=/usr/local/apr --with-apr=/usr/local/apr

make && make install

2. Zlib

http://www.zlib.net/

下载的当前版本为zlib-1.2.11.tar

解压后执行

./configure

make && make install

3. autoconf 2.59 or newer

yum install autoconf �Cy

4. libtool 1.4 or newer

yum install libtool -y

5. Apache Serf library 1.3.4 or newer

cd /usr/local/src

wget http://archive.apache.org/dist/serf/serf-1.2.1.tar.bz2

tar jxvf serf-1.2.1.tar.bz2

cd serf-1.2.1

yum install expat expat-devel �Cy

./configure --prefix=/usr/local/serf --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr

make && make install

6. OpenSSL(OPTIONAL)

yum install openssl �Cy

7. Berkeley DB 4.X (可选安装)

yuminstall db4 -y

8.Cyrus SASL library (OPTIONAL)

yum -y install cyrus-sasl*

9. dbus

yum install dbus

10. Qt 4 (可选安装)

yum install qt qt-devel

11. GLib 2 (Unix only,OPTIONAL)

yum install glib2 glib2-devel

12. KDELibs 4 (可选安装)

yum install kdelibs kdelibs-devel

13. Python 2.7 or newer (https://www.python.org/)

(可选择安装)

14. sqlite(required)

https://www.sqlite.org/download.html

cd /usr/local/src

wgethttp://www.sqlite.org/2017/sqlite-amalgamation-3180000.zip

unzip sqlite-amalgamation-3180000.zip

先解压好,后面安装Subversion时要用到


五、安装Apache Web Server(2.2.X or newer)

下载源码包

cd /usr/local/src

wget http://mirrors.sohu.com/apache/httpd-2.2.34.tar.gz

tar zxvf httpd-2.2.34.tar.gz


编译&&安装

cd httpd-2.2.34

./configure --prefix=/webapp/apache2 --enable-dav --enable-dav-fs--enable-dav-lock --enable-so --enable-rewrite --enable-modules=all --enable-mods-shared=all --with-mpm=prefork --enable-maintainer-mode --enable-ssl--with-ssl --with-pcre --with-include-apr

make && make install

配置apache

cd /webapp/apache2/

vi conf/httpd.conf

找到

#ServerName www.example.com:80

改成

ServerName localhost:80

检查配置文件语法

bin/apachectl -t

配置启动脚本

cp /usr/local/src/httpd-2.2.34/build/rpm/httpd.init/etc/init.d/httpd

注意文件中有三处主要的地方需要修改下的:

httpd=${HTTPD-/webapp/apache2/bin/httpd}

pidfile=${PIDFILE-/webapp/apache2/logs/${prog}.pid}

CONFFILE=/webapp/apache2/conf/httpd.conf

请根据自己的安装目录更改相应的路径!

然后运行如下命令:

chmod +x /etc/init.d/httpd

chkconfig --add httpd

chkconfig httpd on

/etc/init.d/httpd start

netstat -lnp |grep httpd


六、安装Subversion

官网下载地址:http://subversion.apache.org/download.cgi

这里我们下载1.8版

cd /usr/local/src

wget http://mirrors.tuna.tsinghua.edu.cn/apache/subversion/subversion-1.8.18.tar.gz

tar zxvf subversion-1.8.18.tar.gz

把解压好的sqlite复制到subversion目录下

mv sqlite-amalgamation-3180000subversion-1.8.18/sqlite-amalgamation

cd subversion-1.8.18

./configure --prefix=/webapp/subversion --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr --enable-mod-activation --with-apache-libexecdir=/webapp/apache2/modules --with-apxs=/webapp/apache2/bin/apxs --with-serf=/usr/local/serf --with-zlib

make && make install

创建版本库:

要创建一个版本库,首先要确定采用哪种数据存储方式。在 Subversion 中,版本库的数据存储有两种方式,一种是在 Berkeley DB 数据库中存放数据;另一种是使用普通文件,采用自定义的格式来储存,称为 FSFS

两种版本库数据存储对照表

@H_301_546@Berkeley DB @H_301_546@FSFS
特性
对操作中断的敏感 很敏感;系统崩溃或者权限问题会导致数据库塞住”,需要定期进行恢复。 不敏感。
可只读加载 不能 可以
存储平台无关 不能 可以
可从网络文件系统访问 不能 可以
版本库大小 稍大 稍小
可扩展性:修订版本树的数量 数据库,没有限制 许多古老的本地文件系统在处理单一目录包含上千个条目时出现问题。
可扩展性:文件较多的目录 较慢 较快
速度:检出最新的代码 较快 较慢
速度: 大的提交 较慢,但是时间被分配在整个提交操作中 较快,但是最后较长的延时可能会导致客户端操作超时
组访问权处理 对于用户的umask设置十分敏感,最好只由一个用户访问。 对umask设置不敏感
功能成熟时间 2001年开始使用 2004年开始使用


确定了具体的数据存储类型,只要在命令行当中执行 svnadmin 命令就可以创建一个 Subversion 版本库,命令如下:


创建文件

mkdir /webapp/svndata

PATH=$PATH:/webapp/subversion/bin


执行svnadmin命令创建版本库,指定数据存储为FSFS

svnadmin create --fs-type fsfs /webapp/svndata/data


如果要指定为Berkeley DB,则将fsfs替换为bdb

对于Subversion 1.2以后版本,svnadmin缺省使用fsfs文件系统后端创建版本库。


ll /webapp/svndata/data/

总用量 24

drwxr-xr-x. 2 root root 4096 7月 28 07:29 conf

drwxr-sr-x. 6 root root 4096 7月 28 07:29 db

-r--r--r--. 1 root root 2 7月 28 07:29 format

drwxr-xr-x. 2 root root 4096 7月 28 07:29 hooks

drwxr-xr-x. 2 root root 4096 7月 28 07:29 locks

-rw-r--r--. 1 root root 246 7月 28 07:29 README.txt

conf 目录下存放了版本库的配置文件包括用户访问控制和权限控制等内容

db 目录下存放着 Subversion 所要管理的所有受版本控制的数据;

hooks 目录存放着钩子脚本及其模版(一种版本库事件触发程序);

locks 目录存放着 Subversion 版本库锁定数据;

format 文件记录了版本库的布局版本号。

svn import 命令来进行项目的导入:

svn import /tmp/ file:///webapp/svndata/data/ --message "init"

确认导入的项目是否正确:

svn list --verbose file:///webapp/svndata/data/

查看最新修订版本的信息:

svnlook info /webapp/svndata/data

"--revision 版本号",指定某一个修订版的显示

svnlook info /webapp/svndata/data --revision1

显示版本库的具体树形结构,后面的--show-ids选项指定显示每一个显示元素的修改版本 ID

svnlook tree /webapp/svndata/data/ --show-ids


基本的服务器配置

svnserve 是一个轻量级的服务器, 使用自定义的协议通过TCP/IP与客户端通讯。客户端通过由 svn:// 或者 svn+ssh:// 开始的URL访问svnserve服务器。


启动SVN服务器:

svnserve �Cd -r /webapp/svndata

-i作为 inetd 启动

-d做为守护进程启

-r用来指定版本库的根路径

在客户端使用 TortoiseSVN 可以通过如下形式访问服务器:

svn://服务器IP/data

版本库的 conf 文件夹下的配置文件说明:

1svnserve.conf

[general]

# anon-access = read #匿名用户的权限

# auth-access = write #认证用户的权限

password-db = passwd #指定密码文件

# authz-db = authz #权限控制文件

# realm = My First Repository

2passwd文件的配置及说明

[users]

# harry = harryssecret

# sally = sallyssecret

等号前面是用户名,后面是密码,密码是明文的。更改svnserve.conf的时候,需要重启SVN,更改authzpasswd文件,不需重启。

3authz文件的配置及说明

[groups]

# harry_and_sally = harry,sally

groups定义的变量就是组名,1用户组可以包含1个或者多个用户,逗号分隔,上例中harry_and_sally就是一个组

版本库目录格式:

[<版本库>:/项目/目录]

@<用户组名> = <权限>

<用户名> = <权限>

其中,方框号内部可以有多种写法:

[/],表示根目录及以下,根目录是svnserve启动时指定的,这里配置的是/webapp/svndata/[/]就是表示对全部版本库设置权限。

[data:/],表示对版本库data设置权限

[date:/test],表示对版本库data中的test项目设置权限

[data:/test/aaa],表示对版本库datatest项目的aaa目录设置权限

权限主体可以是用户组、用户*用户组在前面加@*表示全部用户

权限可以是wrrw、和空,空表示没有任何权限。

authz中每个参数都要顶格写,开头不能有空格。

[/]

Kevin = rw

@harry_and_sally = r

注意:权限配置文件中出现的用户名必须已在用户配置文件中定义

设置passwd,authz文件权限

chmod 600 conf/{passwd,authz} #非必须,最好改下

4. Checkout注意事项

windows上安装客户端TortoiseSVN之后,checkout版本的时候有个地方需要注意。

例如如果创建项目版本库的命令为 # svnadmin create /svn/testversion1/

启动svn服务的命令 # svnserve -d -r /svn/

那么在客户端检出该版本库的URL为:svn://xx.xx.xx.xx/testversion1/

如果启动svn服务的命令为 svnserve -d -r /svn/testversion1/,那么检出的URL则为:svn://xx.xx.xx.xx/

七、与 Apache Http Server 的结合

通过 Http 协议访问版本库是 Subversion 的亮点之一。使用 Http 协议意味着只需要打开浏览器,输入 URL 即可轻松的浏览整个版本库。灵活通常带来复杂性,Http 方式相对于 svnserve 方式来说需要更多的配置。

配置apache

为了使 Subversion dav 模块通信,需要安装 mod_dav_svn 插件,在Apache httpd.conf 文件中加入以下内容

LoadModule dav_module modules/mod_dav.so

LoadModule dav_svn_module modules/mod_dav_svn.so

<Location /data>

DAV svn

SVNPath /webapp/svndata/data

</Location>

重启apache

/etc/init.d/httpd restart

浏览器输入“http://服务器IP/data”

显示

data- Revision 1: /

这表示mod_dav_svn模块工作正常,如果无法显示,请检查防火墙和SELinx的配置

可以先临时关闭防火墙和SELinx(生产环境请按实际情况配置)

iptables �CF

setenforce 0

可以使用 SVNParentPath 代替SVNPath

SVNParentPath /webapp/svndate表示/webapp/svndata下的每个子目录都是一个版本库,可以通过:

http://服务器IP/svndata/data1

http://服务器IP/svndata/data2

|

|

|

http://服务器IP/svndata/data10

来访问。

权限设置:

1. Apache基本权限设置

最简单的客户端认证方式是通过HTTP基本认证机制,简单的使用用户名和密码来验证一个用户所自称的身份,Apache提供了一个htpasswd工具来管理可接受的用户名和密码 。


cd /webapp

apache2/bin/htpasswd -c svndata/passwd user1

-c 表示新建一个密码文件

vi apache2/conf/httpd.conf

Location 标签中加入以下内容

AuthType Basic

AuthName "svn data"

AuthUserFile /webapp/svndata/passwd

Require valid-user

保存后,重启apache后即可

/etc/init.d/httpd restart

可以把"Require valid-user" 替换为"Require user harry sally",表示只有harry和sally可以访问该版本库。

2. mod_authz_svn 进行目录访问控制

使用mod_authz_svn模块可以更加细致的设置访问权限。


vi apache2/conf/httpd.conf

查看mod_auth_svn 模块是否加载

LoadModule authz_svn_modulemodules/mod_authz_svn.so

增加以下内容

<Location /svndata>

DAV svn

SVNParentPath /webapp/svndata

AuthType Basic

AuthName "svn data"

AuthUserFile /webapp/svndata/passwd

AuthzSVNAccessFile /webapp/svndata/accesspolicy

Satisfy Any

Require valid-user

</Location>

AuthzSVNAccessFile 指向的是 authz 的策略文件,详细的权限控制可以在这个策略文件中指定,如:

#两个分组:group1,group2

[groups]
group1=user1,user2
group2=user3,user4

#在根目录下指定所有的用户有读权限
[/]
*=r

#追加group1组用户有读写权限

@group1=rw

#在data下给予用户user1读写权限

[data:/]
user1=rw

#禁止所有用户访问/private目录

[/private]
*=

#给group2组用户读权限

@group2=r


如果要对具体每个版本库配置,用如下的语法:

[groups]
project1=user1,user2
project2=user3,user4

[data1:/]
*=r
@project1=rw
[data2:/]
*=r
@project2=rw

这样项目1project1组只能对data1版本库下的文件具有写权限而不能修改版本库data2,同样项目2project2组也不能修改data1版本库的文件


修改完配置后记得保存重启apache:

/etc/init.d/httpd restart


另外还要修改对应目录的权限,让它们支持apache运行帐号可写

chown -R daemon:daemon /webapp/svndata/data


这个帐号可在apache配置文件httpd.conf中设置:

User daemon

Group daemon


八、测试

SVN服务器安装配置完毕,在客户端使用TortoiseSVN进行测试,结果如下:

wKiom1l8PVLTp4aYAAB60YPE16Q424.png-wh_50


根据提示输入用户名和密码

wKiom1l8O9rTq8ndAABY2kOOUkg438.png-wh_50

猜你在找的CentOS相关文章