Linux下的SVN服务器搭建

求知探索 1年前 ⋅ 778 阅读

系统环境:Centos 7

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

>yum -y install subversion

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

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

>rpm -ql subversion

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

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

>mkdir -p /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这条给去掉注释

还有多数资料会让大家在realm = My First Repository处填写版本库地址 /var/svn/svnrepos/xxx

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

第五步:防火墙开启

centos 7 开始采用firewall作为防火墙的操作指令, 要想用iptables必须先安装插件

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

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

>/etc/init.d/iptables save

>service iptables restart

执行结果如下图:

 

*如果你和我一样无法通过以上命令设置好防火墙,请参照本文《附录1》

六:启动svn服务器

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

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

启动成功后,可用netstat -tunlp 查看端口是否启用

七:客户端访问svn服务器

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

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

八:Apache_SVN整合

配置Apache的http协议访问

查看httpd是否已经安装的svn模块

ls /etc/httpd/modules/ | grep svn
mod_authz_svn.so
mod_dav_svn.so
如果没安装,使用yum安装。

yum install mod_dav_svn

安装完成,对svn版本库下的项目ProjectName进行位置映射

在/etc/httpd/conf.d/文件下创建subversion.conf文件并编辑

vi subversion.conf

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /新建仓库名>
DAV svn
SVNPath /home/svn/新建仓库名/
AuthType Basic
AuthName "Subversion repos"
AuthUserFile /home/svn/新建仓库名/conf/accesspwd
AuthzSVNAccessFile /home/svn/新建仓库名/conf/authz
Require valid-user
</Location>
AuthType认证类型

AuthName 描述名,随便取

AuthUserFile这个是http协议的访问账户密码文件,后面使用htpasswd命令创建

AuthzSVNAccessFile 权限认证文件,这个跟上面配置svn时候配置的权限设置一样

Require 需要认证用户才可以访问

 

htpasswd创建账户密码

htpasswd -c -m /home/svn/ProjectName/conf/accesspwd username

-c是创建新文件,只有第一次创建账户密码时使用

-m是强制使用MD5加密密码(默认)

accesspwd 是创建的文件名。

username你要创建的可访问用户的名字(如我想创建一个asd用户访问这个svn项目仓库,这个username就是asd)

按提示输入两次密码,我们就创建了一个可访问用户名和密码。

如果想要新增加用户abc(第二次添加用户)

不需要使用-c参数,如果使用的会覆盖原来的accesspwd文件

htpasswd -m /home/svn/ProjectName/conf/accesspwd abc

  接着输入两次密码,

  继续增加用户。。。

你不再继续创建新用户,循环结束。

重启Apache的服务

service httpd restart 或者 systemctl restart httpd.service

 

现在就可以通过"http://ip/ProjectName" 来访问我们的svn服务器了

 

当然,上面的情况是在关闭防火墙或开放端口,或http服务正常启动情况。

检查端口是否被使用

netstat -tunlp | grep 80 检查80端口使用情况

netstat -tunlp | grep 3690 检查3690也就是svn的服务端口使用情况

 

 

端口被使用,说明服务正常开启。

使用curl进行模拟浏览器请求

curl http://localhsot:80/ProjectName 检查服务有没有响应。

一般会返回401 Unauthorized 未认证的401错误

 

*如果你和我一样svn客户端ip浏览资源库时报服务器500错误请参考本文《附录2》

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

如果此文有帮助到你,请帮忙推广

附录1:------------以下内容为文章中描述不详之处自己查资料填坑-------------

CentOS7安装iptables防火墙
CentOS7默认的防火墙不是iptables,而是firewalle.

安装iptable iptable-service

#先检查是否安装了iptables
service iptables status
#安装iptables
yum install -y iptables
#升级iptables
yum update iptables
#安装iptables-services
yum install iptables-services
禁用/停止自带的firewalld服务

#停止firewalld服务
systemctl stop firewalld
#禁用firewalld服务
systemctl mask firewalld
设置现有规则

#查看iptables现有规则
iptables -L -n
#先允许所有,不然有可能会杯具
iptables -P INPUT ACCEPT
#清空所有默认规则
iptables -F
#清空所有自定义规则
iptables -X
#所有计数器归0
iptables -Z
#允许来自于lo接口的数据包(本地访问)
iptables -A INPUT -i lo -j ACCEPT
#开放22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#开放21端口(FTP)
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
#开放80端口(HTTP)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#开放443端口(HTTPS)
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
#开放3690端口(SVN)
iptables -I INPUT -p tcp --dport 3690 -j ACCEPT
#允许ping
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
#允许接受本机请求之后的返回数据 RELATED,是为FTP设置的
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#其他入站一律丢弃
iptables -P INPUT DROP
#所有出站一律绿灯
iptables -P OUTPUT ACCEPT
#所有转发一律丢弃
iptables -P FORWARD DROP
保存规则设定

#保存上述规则
service iptables save
开启iptables服务

#注册iptables服务
#相当于以前的chkconfig iptables on
systemctl enable iptables.service
#开启服务
systemctl start iptables.service
#查看状态
systemctl status iptables.service
以下为完整设置脚本

#!/bin/sh
iptables -P INPUT ACCEPT
iptables -F
iptables -X
iptables -Z
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -p tcp --dport 3690 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
service iptables save
systemctl restart iptables.service
附录2:svn客户端通过http://ip/资源库浏览资源库时出现500错误

tail -100f /etc/httpd/logs/error_log

Linux代码

[Mon Oct 07 01:20:37 2013] [error] [client 192.168.1.108] (13)Permission denied: Could not open password file: /home/svn/project/conf/webpasswd
[Mon Oct 07 01:20:37 2013] [error] [client 192.168.1.108] access to /project failed, reason: verification of user id 'usera' not configured
[Mon Oct 07 01:20:45 2013] [error] [client 192.168.1.108] (13)Permission denied: Could not open password file: /home/svn/project/conf/webpasswd
[Mon Oct 07 01:20:45 2013] [error] [client 192.168.1.108] access to /project failed, reason: verification of user id 'usera' not configured
[Mon Oct 07 01:21:26 2013] [error] [client 192.168.1.108] (13)Permission denied: Could not open password file: /home/svn/project/conf/webpasswd
[Mon Oct 07 01:21:26 2013] [error] [client 192.168.1.108] access to /project failed, reason: verification of user id 'usera' not configured
[Mon Oct 07 01:22:02 2013] [error] [client 192.168.1.108] (13)Permission denied: Could not open password file: /home/svn/project/conf/webpasswd
[Mon Oct 07 01:22:02 2013] [error] [client 192.168.1.108] access to /project failed, reason: verification of user id 'usera' not configured
对于这个问题有人说关掉SElinux,个人没试过,不过肯定不好,影响主机安全性。

执行如下命令即可:

chcon -R -h -t httpd_sys_content_t /svn目录/

设置资源库文件所属账户(这个不确定是否是引起500的原因):chown -R apache.apache /svn目录/

到这里为止就可以客户端查看资源库了,但是SVN 提交时报错 could not begin a transaction

执行如下命令即可:

1- chcon -R -t httpd_sys_content_rw_t /svn目录/

2 - setsebool -P httpd_unified=1

 

转载至:https://blog.csdn.net/fukx2005/article/details/87804333


全部评论: 0

    我有话说: