凌峰创科服务平台

Linux上如何安装SVN服务器?

在Linux系统上安装和配置SVN(Subversion)服务器是一个常见的需求,适用于代码版本管理、文档协作等场景,以下以CentOS 7为例,详细讲解SVN服务器的安装、配置、权限管理及启动过程,同时补充Ubuntu系统的差异操作,最后附上常见问题解答。

Linux上如何安装SVN服务器?-图1
(图片来源网络,侵删)

安装SVN服务器

环境准备

确保系统已更新至最新状态,并安装必要的依赖包:

# CentOS系统
sudo yum update -y
sudo yum install -y subversion mod_dav_svn
# Ubuntu系统
sudo apt update
sudo apt install -y subversion libapache2-svn

mod_dav_svn是Apache服务器的模块,用于支持SVN通过HTTP协议访问,若仅使用svnserve协议(独立服务),则无需安装该模块。

创建SVN仓库

SVN仓库需存储在指定目录,通常选择/var/svn

sudo mkdir -p /var/svn
sudo svnadmin create /var/svn/project1

创建后,仓库目录结构如下:

Linux上如何安装SVN服务器?-图2
(图片来源网络,侵删)
/var/svn/project1/
├── conf/          # 配置文件目录
│   ├── svnserve.conf  # 主配置文件
│   ├── passwd         # 用户密码文件
│   └── authz         # 权限控制文件
├── db/            # 数据库文件
├── hooks/         # 钩子脚本目录
├── locks/         # 锁文件目录
└── format         # 仓库版本标识

配置SVN仓库

配置svnserve.conf

编辑/var/svn/project1/conf/svnserve.conf,取消以下行的注释并修改:

[general]
anon-access = none          # 禁止匿名访问
auth-access = write         # 允许认证用户读写
password-db = passwd        # 密码文件路径
authz-db = authz            # 权限文件路径
realm = My SVN Repository   # 仓库认证域

注意:配置文件中的行首不能有空格,且前后需有空格。

配置用户密码

编辑/var/svn/project1/conf/passwd,添加用户及密码:

[users]
user1 = password1
user2 = password2

密码为明文存储,生产环境建议结合加密工具(如htpasswd)。

Linux上如何安装SVN服务器?-图3
(图片来源网络,侵删)

配置权限控制

编辑/var/svn/project1/conf/authz,定义用户和组的权限:

[groups]
admin = user1
developers = user1, user2
[/]
@admin = rw
* = r
[/project1/trunk]
@developers = rw
  • [groups]:定义用户组,如admin组包含user1
  • [/]:仓库根目录权限,admin组有读写权限,其他用户只读。
  • [/project1/trunk]:特定目录权限,developers组可读写。

启动SVN服务

使用svnserve独立服务

# 以后台方式启动,指定仓库目录和端口(默认3690)
sudo svnserve -d -r /var/svn --listen-port 3690
# 检查服务状态
sudo netstat -tuln | grep 3690

停止服务可通过sudo killall svnserve或进程PID。

配置Apache支持(可选)

若需通过HTTP访问,需配置Apache:

# 编辑Apache配置文件(如/etc/httpd/conf.d/subversion.conf)
sudo vim /etc/httpd/conf.d/subversion.conf
<Location /svn>
    DAV svn
    SVNParentPath /var/svn
    AuthType Basic
    AuthName "SVN Repository"
    AuthUserFile /var/svn/passwd
    Require valid-user
</Location>

创建密码文件并设置权限:

sudo htpasswd -cm /var/svn/passwd user1
sudo chown -R apache:apache /var/svn
sudo systemctl restart httpd

访问地址为http://服务器IP/svn/project1

防火墙与SELinux配置

防火墙设置

# CentOS 7
sudo firewall-cmd --permanent --add-service=svn
sudo firewall-cmd --reload
# Ubuntu
sudo ufw allow 3690/tcp

SELinux配置(CentOS)

# 设置SELinux允许SVN
sudo setsebool -P httpd_can_network_connect_db on
sudo semanage port -a -t http_port_t -p tcp 3690

客户端连接测试

使用svn co命令测试连接:

# svnserve协议
svn co svn://localhost:3690/project1
# HTTP协议
svn co http://localhost/svn/project1

输入配置的用户名和密码,若成功检出代码则配置正确。

FAQs

Q1: 如何修改SVN仓库的认证域?
A: 编辑仓库目录下的svnserve.conf文件,修改realm参数的值,重启svnserve服务后生效。realm = New_Project_Repo

Q2: SVN服务启动失败,提示“权限拒绝”怎么办?
A: 检查仓库目录的所有者和权限,确保运行SVN服务的用户(如apacheroot)有读写权限,可通过sudo chown -R apache:apache /var/svn修复,同时检查SELinux是否阻止访问(使用ausearch -m avc -ts recent查看日志)。

分享:
扫描分享到社交APP
上一篇
下一篇