centos7系统下SVN服务器搭建

1. 安装

sudo yum install subversion

查看安装位置

sudo rpm -ql subversion

2. 创建版本库 svnadmin create 创建一个新的空的版本库

sudo mkdir -p /var/svn
sudo svnadmin create /var/svn/项目名

3. 配置

进入conf目录(该svn版本库配置文件)

  • authz文件是权限控制文件
  • passwd是帐号密码文件
  • svnserve.conf SVN服务配置文件

3.1 设置帐号密码

sudo vim passwd

在[users]块中添加用户和密码,格式:帐号=密码,如junwei = junwei

完整内容参考下面

[users]
june = june
junwei = junwei

3.2 设置权限

用户组格式:

[groups]
groupname=user1,user2,user3

其中,1个用户组可以包含1个或多个用户,用户间以逗号分隔。

例子:

java=xxx,xxx1,xxx2
php=xxx,xxx1,xxx2

版本库目录格式:

  • [<版本库>:/项目/目录]
  • @<用户组名> = <权限>
  • <用户名> = <权限>

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

  • [/],表示根目录及以下,根目录是svnserve启动时指定的,我们指定为/home/svn/test,[/]就是表示对全部版本库设置权限。
  • [repos:/] 表示对版本库repos设置权限;
  • [repos:/abc] 表示对版本库repos中的abc项目设置权限;
  • [repos:/abc/aaa] 表示对版本库repos中的abc项目的aaa目录设置权限;
  • 权限主体可以是用户组、用户或,用户组在前面加@,表示全部用户。
  • 权限可以是w、r、wr和空,空表示没有任何权限。

例子:

[/tdocs]
@java=rw
@php=rw
@mobile=r
*=

3.3 修改svnserve.conf文件

sudo vim svnserve.conf

打开下面的几个注释:

  • anon-access = read #匿名用户可读
  • auth-access = write #授权用户可写
  • password-db = passwd #使用哪个文件作为账号文件
  • authz-db = authz #使用哪个文件作为权限文件
  • realm = /var/svn/svnrepos # 认证空间名,版本库所在目录

注意:要配置好所处位置,完整参考下面

[general]
anon-access = read
auth-access = write
password-db = passwd
authz-db = authz
realm = /var/svn/project_1
# force-username-case = none
[sasl]
# use-sasl = true
# min-encryption = 0
# max-encryption = 256

4. 启动svn版本库 

sudo svnserve -d -r /var/svn

CentOS系统安装配置svn服务器

今天看大神的博客部署了一下svn,期间遇到各种问题,特写此博客重新将svn在centos下的部署和各种问题的解决方案重新旅顺一下。

一、下载svn

yum install -y subversion

二、验证是否安装成功

svnserve --version

出现版本号说明安装成功了~

三、创建svn版本库

mkdir /var/svn #我这里把版本库放在了var目录下的svn文件夹,方便管理  
svnadmin create /var/svn/repo0 #我这里将svn作为所有版本库的目录,并创建了一个名为repo0的版本库

四、配置当前版本库

创建版本库后,在当前版本库目录中会生成下面的文件,其中我们关心的是配置文件。

[root@localhost svn]# ls  
repo0  
[root@localhost svn]# cd repo0  
[root@localhost repo0]# ls  
conf  db  format  hooks  locks  README.txt  
[root@localhost repo0]# pwd  
/var/svn/repo0  
[root@localhost repo0]# cd conf  
[root@localhost conf]# ls -a  
.  ..  authz  passwd  svnserve.conf

修改passwd文件

passwd文件管理svn用户密码

### This file is an example password file for svnserve.
### Its format is similar to that of svnserve.conf. As shown in the
### example below it contains one section labelled [users].
### The name and password for each user follow, one account per line.

[users]
# harry = harryssecret
# sally = sallyssecret
user0 = user0passwd

修改authz文件

authz文件管理用户组及权限认证,读写控制认证等

### This file is an example authorization file for svnserve.
### Its format is identical to that of mod_authz_svn authorization
### files.
### As shown below each section defines authorizations for the path and
### (optional) repository specified by the section name.
### The authorizations follow. An authorization line can refer to:
###  - a single user,
###  - a group of users defined in a special [groups] section,
###  - an alias defined in a special [aliases] section,
###  - all authenticated users, using the '$authenticated' token,
###  - only anonymous users, using the '$anonymous' token,
###  - anyone, using the '*' wildcard.
###
### A match can be inverted by prefixing the rule with '~'. Rules can
### grant read ('r') access, read-write ('rw') access, or no access
### ('').

[aliases]
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average
[groups]
team0=user0 #这里代表将user0分在了team0这个小组中
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
[/]
@team0=rw  #服务team0用户组读写权限
# [/foo/bar]
# harry = rw
# &joe = r
# * =

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

修改svnserve.conf文件

[general]  
### These options control access to the repository for unauthenticated  
### and authenticated users.  Valid values are "write", "read",  
### and "none".  The sample settings below are the defaults.  
anon-access = none #没有登录的用户不能访问  
auth-access = write #登录的用户可以写入  
### The password-db option controls the location of the password  
### database file.  Unless you specify a path starting with a /,  
### the file's location is relative to the directory containing  
### this configuration file.  
### If SASL is enabled (see below), this file will NOT be used.  
### Uncomment the line below to use the default password file.  
password-db = passwd #密码文件为当前目录下的passwd  
### The authz-db option controls the location of the authorization  
### rules for path-based access control.  Unless you specify a path  
### starting with a /, the file's location is relative to the the  
### directory containing this file.  If you don't specify an  
### authz-db, no path-based access control is done.  
### Uncomment the line below to use the default authorization file.  
authz-db = authz #验证文件为当前目录下的authz

五、停止和启动svn

启动svn

svnserve -d -r /var/svn/

关闭svn

ps -aux |grep svn  
kill -9 进程id

六、导入导出工程

导入工程

$ mkdir MyProject    
$ mkdir MyProject/trunk    
$ mkdir MyProject/branches    
$ mkdir MyProject/tags    
svn import MyProject svn://**svn服务器外网ip**/repo0/MyProject -m "first import project"

导出工程

svn co svn://**svn服务器外网ip**/repo0/MyProject

七、常见错误异常

注:可以使用systemctl status svnserve.service来查看svn当前状态

Authorization failed

svn://192.168.20.242/MyProject1,然后要求输入用户名和密码。如果用户名和密码输入出错了,强行确定后。问题来了!会出现,以下错误信息:

org.tigris.subversion.javahl.ClientException
Authorization failed

这时要清理一下svn用户登录缓存

rm ~/.subversion/auth

svn导入文件时的编码问题

遇到

svn: Valid UTF-8 data 
(hex: 47 64 20 53 63) 
followed by invalid UTF-8 sequence 
(hex: e9 6e 69 63)

或者

svn Error normalizing log message to internal format

这样的错误的原因是所提交的文件中包含非utf8的编码,进入configrm

vim ~/.subversion/config

修改log-encoding值为你文件的编码

[miscellany]
### Set global-ignores to a set of whitespace-delimited globs
### which Subversion will ignore in its 'status' output, and
### while importing or adding files and directories.
### '*' matches leading dots, e.g. '*.rej' matches '.foo.rej'.
# global-ignores = *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo
#   *.rej *~ #*# .#* .*.swp .DS_Store
### Set log-encoding to the default encoding for log messages
log-encoding = binary
### Set use-commit-times to make checkout/update/switch/revert
### put last-committed timestamps on every file touched.
# use-commit-times = yes
### Set no-unlock to prevent 'svn commit' from automatically
### releasing locks on files.
# no-unlock = yes
### Set mime-types-file to a MIME type registry file, used to
### provide hints to Subversion's MIME type auto-detection
### algorithm.
# mime-types-file = /path/to/mime.types
### Set preserved-conflict-file-exts to a whitespace-delimited

当然你也可以给文件转编码

总结:svn配置过程中由于系统环境和版本问题会遇到各种突发问题,多百度谷歌stackoverflow就好了。

修改TortoiseSVN svn保存的帐号密码

如果装了TortoiseSVN:

Settings -> Saved Data -> Authentication Data -> clear。即可清除保存的上个用户登录信息;当再次用到svn时,会提示输入用户名密码,输入新的用户名密码即可。

或者,手动删除下面目录下的svn登录用户信息保存文件:

C:Documents and SettingsjavaLeeApplication DataSubversionauthsvn.simple

通过TortoiseSVN的clear Authentication Data和手动删除效果是一模一样的!都是对userNameApplication DataSubversionauthsvn.simple目录下的已保存登录用户信息文件进行删除。

未分类

未分类

ubuntu14.04配置apache2 svn服务器(提供https访问)

一. 安装PHP

sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt php5-curl php5-imagick php5-cli

二. 安装svn

输入安装命令:

sudo apt-get install subversion

(由于阿里云远程链接服务器时默认登陆管理员账号,所以sudo可以不用)
(如果无法下载软件,可能是由于阿里云可能把更新源的位置改了,运行apt-get update就行)

之后选择SVN服务文件及配置文件的放置位置。我放在了/srv下的svn目录。

sudo mkdir /srv/svn(版本仓库test)

目录建好后,创建版本仓库

sudo svnadmin create /srv/svn/test

执行之后test下文件结构如下:

未分类

三. 配置svn

跳转到配置文件

sudo cd /srv/svn/test/conf

1.修改svnserver.conf

sudo vi svnserve.conf
[general]
#匿名用户不可读
anon-access = none
#权限用户可写
auth-access = write
#密码文件为passwd
password-db = passwd
#权限文件为authz
authz-db = authz

这里修改时要顶格,不然要报错

2.authz 制定管理员组
即admin组的用户为admin,admin组对test有rw(读写权限)

[groups]
admin=admin       ##可以admin=admin,admin2,admin3

[test:/]
@admin=rw       ##admin组对test下的文件有读写权限

[:/项目/目录] #是以项目名作为第一个单位。不写版本库可以省略‘:’,即写成[/]
权限主体可以是用户组、用户或,用户组在前面加@,表示全部用户。权限可以是w、r、wr和空,空表示没有任何权限。

3.编制passwd文件,设定用户密码

[users]
admin=admin       ##用户名=密码

(注意等号两边不要留空格)

4.启动svn服务器

sudo svnserve -d -r /srv/svn/ --listen-port 3690

(这里启动服务时务必以管理员权限启动,否则用户拉取、提交文件时会提示权限不够)

-d 以守护模式启动

-r 制定svn版本库根目录,这样是便于客户端不用输入全路径,就可以访问版本库了

–listen-port 3690 监听3690端口,默认就是3690。。。所以不输也可以

5.访问代码库

svn://your ip/test
(查看IP地址:ifconfig)

注:到这里位置就可以通过svn访问了,通过https访问在后面

四. 安装apache2

输入安装命令:

sudo apt-get install apache2 apache2-utils libapache2-svn
sudo a2enmod ssl 开启SSL模块
sudo a2ensite default-ssl 启用SSL站点支持
sudo a2enmod rewrite 启用rewrite模块

1.配置/etc/apach2/apache2.conf

sudo vi /etc/apache2/apache2.conf

增加对.htaccess的支持:将www目录的AllowOverride参数修改为ALL
防止访问目录:将Options中的Indexes删除

2.重启apache服务

sudo /etc/init.d/apache2 restart

Apache的默认安装,会在/var下建立一个名为www的目录,这个就是Web目录了

  • 默认站点: /var/www/
  • 配置目录: /etc/apache2/
  • 日志目录: /var/log/apache/
  • 启动脚本: /etc/init.d/apache2

五. 配置自动更新

这里配置自动更新用的是svn的钩子,脚本是shell,也可以用其他的脚本比如python
钩子脚本的具体写法就是操作系统中shell脚本程序的写法,请根据自己SVN所在的操作系统和shell程序进行相应的写作
实现原理:当用户提交commit动作发生都让另外一处project马上从仓库中进行代码checkout一份出来!

1.在Web目录迁出代码

sudo svn co svn://127.0.0.1/test /var/www/html --username admin --password admin

2.添加脚本

在svn项目的hooks文件夹中的post-commit文件中添加脚本:用vi命令编辑一个新的post-commit(看清楚没有后缀名)千万不要用hooks文件夹里自带的post-commit文件,那是模板。

sudo vi /srv/svn/test/hooks/post-commit

在文件中添加如下内容:

#!/bin/sh
WEB=/var/www/html   #web服务器下的项目不能有空格。
#说明:post-commit会接受两个参数
REPOS="$1"  #/srv/svn/test  表示svn仓库的绝对路径值
REV="$2"  #表示最新的一个版本号。最后一个版本号
export LANG=en_US.UTF-8
svn update $WEB --username admin --password admin  #相当客户端的update操作
exit 0

如果不能判断自己写的shell脚本是否有错,可以现在hooks目录下运行./post-commit试一下

六. 配置https访问

1.安装OpenSSL

sudo apt-get install openssl

2.创建证书

sudo openssl req -x509 -newkey rsa:1024 -keyout apache.pem -out apache.pem -nodes -days 999

创建证书有两种方式:一种是自签名证书,一种是第三方CA机构签名证书。由于我们这里的证书只是保证传输数据安全性,因此我们使用自签名证书。

未分类

命令执行成功后会在当前目录生成一个apache.pem的证书,将这个文件复制到apache的配置目录/etc/apache2/ssl。

sudo mkdir /etc/apache2/ssl
sudo cp apache.pem /etc/apache2/ssl/

3.配置站点证书

sudo vi /etc/apache2/sites-available/default-ssl.conf
    SSLEngine on
    SSLCertificateFile    /etc/apache2/ssl/apache.pem
    #SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

注意: SSLCertificateKeyFile前需要加#

如果配置没有问题,那么我们通过https协议就可以访问该IP地址了。

4.4配置apache服务器

/etc/apache2/mods-available/dav_svn.conf #加在文件最后面即可
<Location /svn >
DAV svn
#SVNPath /srv/svn/test
SVNParentPath /srv/svn
SVNListParentPath On
AuthType Basic
AuthName "welcome to subversion repository"
AuthUserFile /srv/svn/test/conf/passwd
AuthzSVNAccessFile /srv/svn/test/conf/authz
#<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
SSLRequireSSL #(https,否则取消)
#</LimitExcept>
</Location>

5.添加新用户或修改老用户密码

htpasswd -c /etc/subversion/passwd 用户名 //第一次设置用户时使用-c表示新建一个用户文件,之后取消-c.
回车后输入用户密码

6.重启Apache

sudo service apache2 restart

Centos 6.5搭建SVN服务器

鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人

本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,故此总结

/******开始*********/

系统环境:Centos 6.5

第一步:通过yum命令安装svnserve,命令如下:

>yum -y install subversion

此命令会全自动安装svn服务器相关服务和依赖,安装完成会自动停止命令运行

若需查看svn安装位置,可以用以下命令:

>rpm -ql subversion

第二步:创建版本库目录(此仅为目录,为后面创建版本库提供存放位置)

选择在var路径下创建版本库,当前处于根目录下,一次性创建如下:

>mkdir /var/svn/svnrepos

第三步:创建svn版本库

在第二步建立的路径基础上,创建版本库,命令如下:

>svnadmin create /var/svn/svnrepos/xxxx   (xxxx为你预期的版本库名称,可自定义)

创建成功后,进入xxx目录下

>cd /var/svn/svnrepos/xxxx

进入目录,可以看见如下文件信息:

未分类

第四步:配置修改

进入已经创建好的版本库目录下,也就是前文说创建的xxxx

进入conf

>cd /var/svn/svnrepos/xxxx/conf

conf目录下,一共存放三份重要的配置文件,如下:

未分类

  • authz:负责账号权限的管理,控制账号是否读写权限

  • passwd:负责账号和密码的用户名单管理

  • svnserve.conf:svn服务器配置文件

细节修改如下:(希望大家严格按照以下信息,不用参考网络上其他资料)

修改authz文件信息,如下:

>vi authz

在文件内容的末尾,添加如下:

未分类

只需在末尾添加,无需在文件其他部分修改和添加任何东西(请忽略groups被我马赛克的地方,那其实也是条无用的记录,我忘记删掉而已),末尾内容如下:

[]

账号1 = rw

账号2 = rw

。。。。。

rw表示赋予此账号可读写的权限,请注意[]中的斜杠,一定是反斜杠,有些教程说,需添加版本库名称在括号内,我直接建议就这写,这样写允许访问的权限更大,避免一些错误

修改passwd文件信息

>vi passwd

账号密码文件无需做修改,也是直接将账号和密码信息追加到文件中即可,注意格式为:

  • 账号 = 密码

  • 例如:admin = 123456

  • 修改svnserve.conf(重要)

  • vi svnserve.conf

原始文件内容,都被注释掉的,我们只需要去掉4条指定内容前注释即可,如下:

未分类

大多数网络资料,都会让大家将authz-db = authz这条给去掉注释,经过我本人多次被坑经验,此条去掉后,虽然svn服务器可以连接,但一直会提示“认证失败”,注释掉即可正常

还有多数资料会让大家在realm = My First Repository处填写服务器ip,经过测试,填写后并无什么用处,所以大家去掉注释即可,无需做任何修改

到此,配置已经全部完成,账号信息已经添加成功

第五步:防火墙开启

多数情况下服务器安装完成,配置完成后,无法连接svn服务器,均是防火墙问题,大家按照如下3条命令逐一执行即可

>/sbin/iptables -I INPUT -p tcp --dport 3690 -j ACCEPT

>/etc/init.d/iptables save

>service iptables restart

执行结果如下图:

未分类

六:启动svn服务器

在跟目录下,执行如下命令:

>svnserve -d -r /var/svn/svnrepos

启动成功后,可用ps -aux查看服务启动是否成功

七:客户端访问svn服务器

在windows客户端,输入地址:svn://ip地址:3690/xxxx (iP地址为你linux的ip,xxxx为前文创建的版本库名称,3690为svn默认端口)

弹出输入用户名和密码,输入即可访问

到此,Linux下svn服务器搭建就总结完毕,感谢大家的阅读。