centos下搭建和配置svn服务器

什么是版本控制系统?

版本控制系统(version control system简称VCS),是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。版本控制系统不仅可以应用于软件源代码的文本文件,而且可以对任何类型的文件进行版本控制。用的比较多的如svn,git等。

svn服务器的2种运行方式

  • 独立服务器 (例如:svn://IP/project)
  • 借助apache(例如:http(s)://IP/project)
  • svn存储版本数据也有2种方式:
    • bdb
    • fsfs

因为BDB方式在服务器中断时,有可能锁住数据,所以建议使用FSFS模式,点击这里查看两种存储方式的比较


安装

下载源文件:

注意文件版本必须一致,否则很容易产生各种奇怪的问题。

解压安装文件

tar zxvf subversion-1.6.6.tar.gz
tar zxvf subversion-deps-1.6.6.tar.gz

编译

cd subversion-1.6.6
./configure --prefix=<安装路径> --without-berkeley-db  
make && make install

验证是否安装成功

<安装路径>/bin/svnserve --version

如果安装成功,会打印类似的版本信息:

svnserve, version 1.6.6 (r40053)
    compiled Sep  9 2015, 17:30:53

Copyright (C) 2000-2009 CollabNet.
Subversion is open source software, see http://subversion.tigris.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).

The following repository back-end (FS) modules are available:

* fs_fs : Module for working with a plain file (FSFS) repository.

apache+svn的方式稍后介绍,下面先介绍在使用svnserve的时候如何配置svn。


svnserve配置

本文采用为每个项目单独建立一个版本库的策略,配置文件,密码文件,访问控制文件都放在版本库的conf/目录下。

1.建立版本库目录

mkdir -p svndata/

2.建立svn版本库

<安装路径>/bin/svnadmin create svndata
执行这个命令后,svn会自动在版本库目录下添加必要的配置文件。

3.修改版本库配置文件

vim svndata/conf/svnserve.conf  

### 当使用svnserve来访问版本库的时候,这个配置文件控制了svnserve后台程序的配置。(如果通过http或file URL来访问版本库,那么这个文件是不相干的)  
[general]
anon-access = none # 使非授权用户无法访问  
auth-access = write # 使授权用户有写权限  
password-db = passwd # 指明密码文件路径  
authz-db = authz # 指明访问控制文件路径  
realm = My First Repository # 认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字。  


各语句都必须顶格写,左侧不能留空格,否则可能会出错。

4.配置用户

vim svndata/conf/passwd  

### 下面是每个用户的名称和密码,每行一个账户

[users]
# harry = harryssecret
# sally = sallyssecret
jingjiang.zhou = zhoujingjiang

5.配置权限

vim svndata/conf/authz  

### 它的格式与mod_authz_svn授权文件的格式完全相同。  
### 如下所示,每个section都定义了通过section名称指定的路径和(可选的)版本库的授权。
### 可以授权给:
### - 一个单独的用户
### - 在[groups]区域中定义的一组用户
### - 在[aliases]区域中定义的一个别名
### - 使用$authenticated令牌,来表示所有认证的用户
### - 使用$anonymous令牌,来表示匿名用户
### - 使用*通配符,来表示任何用户

### 可以通过在规则前面加上~的方式,来倒置一个匹配。规则可以授予读权限(r),读写权限(rw)和无权限('')。

[aliases]
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average

[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe

# [/foo/bar]
# harry = rw
# &joe = r
# * =

# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r

[svndata:/]
jingjiang.zhou = rw  

6.启动服务

<安装路径>/bin/svnserve -d -r . --listen-port 9909 --listen-host <你的ip地址> --log-file svnserve.log --pid-file svnserve.pid --foreground  

7.检出

mkdir test  
cd test  
svn co svn://<你的ip地址>:9909/svndata  
ls  

apache + svn

1.安装软件包

sudo yum install -y httpd  
sudo yum install -y mod_dav_svn  
sudo yum install -y subversion  

2.验证安装

[jingjiang.zhou@localhost ~]$ httpd -version
Server version: Apache/2.2.3  
Server built:   Sep 16 2014 11:05:09

[jingjiang.zhou@localhost ~]$ ls /etc/httpd/modules/mod_*_svn.so
/etc/httpd/modules/mod_authz_svn.so  /etc/httpd/modules/mod_dav_svn.so

[jingjiang.zhou@localhost ~]$ svnserve --version
svnserve,版本 1.6.11 (r934486)  
   编译于 Mar  5 2014,14:28:03

版权所有 (C) 2000-2009 CollabNet。
Subversion 是开放源代码软件,请参阅 http://subversion.tigris.org/ 站点。  
此产品包含由 CollabNet(http://www.Collab.Net/) 开发的软件。

下列版本库后端(FS) 模块可用: 

* fs_base : 模块只能操作BDB版本库。
* fs_fs : 模块与文本文件(FSFS)版本库一起工作。

Cyrus SASL 认证可用。  

3.建立svn版本库

sudo mkdir /var/www/svn  
cd /var/www/svn  
sudo svnadmin create repo1  
ls  

4.配置

/var/www/svn 目录下会有一个repo1目录。
修改所有者:
sudo chown -R apache:apache repo1
copy /var/www/svn/repo1/conf下的authz到/var/www/svn下:
sudo cp /var/www/svn/repo1/conf/authz /var/www/svn/authz

创建passwd文件:

cd /var/www/svn  
sudo touch passwd  

创建用户:

sudo htpasswd -db /var/www/svn/passwd jingjiang.zhou zhoujingjiang

权限管理设置:

sudo vim /var/www/svn/authz  
#在底部加上

[repo1:/]
jingjiang.zhou = rw  

配置apache:

sudo vim /etc/httpd/conf/httpd.conf  
#添加下面四条指令,如果配置中已经添加了某条指令,则无需重复添加,否则在启动httpd的时候会出现warn。  

LoadModule dav_module       /etc/httpd/modules/mod_dav.so  
LoadModule dav_fs_module    /etc/httpd/modules/mod_dav_fs.so  
LoadModule dav_svn_module   /etc/httpd/modules/mod_dav_svn.so  
LoadModule authz_svn_module /etc/httpd/modules/mod_authz_svn.so


sudo vim /etc/httpd/conf.d/subversion.conf  
#在底部加上  

<Location /repos>  
   DAV svn
   SVNParentPath /var/www/svn

#   # Limit write permission to list of valid users.
#   <LimitExcept GET PROPFIND OPTIONS REPORT>
#      # Require SSL connection for password protection.
#      # SSLRequireSSL
#
      AuthType Basic
      AuthName "Authorization SVN"
      AuthzSVNAccessFile /var/www/svn/authz
      AuthUserFile /var/www/svn/passwd
      Require valid-user
#   </LimitExcept>
</Location>

5.重启httpd

sudo service httpd restart

6.通过浏览器测试

在浏览器中输入http://ip或网站/repos/repo1
此时会弹出输入密码框,输入创建的用户名和密码就可以登录了


参考文档:

感谢浏览tim chow的作品!

如果您喜欢,可以分享到: 更多

如果您有任何疑问或想要与tim chow进行交流

可点此给tim chow发信

如有问题,也可在下面留言: