当今时代,代码版本管理,一般推荐“Git”。但是工作用到“Subversion”,即“SVN”,所以记录一下相关部署。

1. 概述

在Debian 11上部署SVN(即Subversion)服务,一般按以下步骤执行即可。

  • 安装。Debian使用apt命令即可。
  • 配置。包括创建运行用户、建立部署文件夹、设置Systemd自动启动。
  • “仓库”管理。包括“仓库”的创建、备份、导出、迁移等。
  • “踩坑”。记录遇到的问题。

参考

2. 安装

通过apt命令安装“subversion”即可。

sudo apt install subversion

“subversion”包含3类程序:

  • 服务程序

    • svnserve:提供SVN的网络服务。
    • svnsync:仓库镜像工具,仓库都可以是远程的或本地的。
  • 管理程序

    • svnadmin:管理SVN仓库。
    • svnlook:查看SVN仓库,纯只读。
    • svnrdump:远程仓库数据迁移。相当于svnadmin dumpsvnadmin load的网络版。
    • svndumpfilter:历史过滤工具,从SVN的转储文件中移除某些历史 (即版本号)。
  • 客户端程序

    • svn:SVN命令行客户端。
    • svnversion:显示工作副本版本信息。
    • svnmucc:多URL命令行客户端,允许用户在没有工作副本的情况下,向仓库提交任意修改。

以上程序的使用,可参考:Subversion 命令行参考手册

3. 配置

  • 创建系统用户“svn”,用于运行SVN服务。
useradd -r -M -s /bin/false svn
  • 创建SVN“仓库”的路径。
sudo mkdir -p /opt/svn/repos
sudo chown svn /opt/svn/repos
  • 创建Systemd的服务配置文件/etc/systemd/system/svnserve.service。其内容如下:
[Unit]
Description=Subversion protocol daemon
After=syslog.target network.target

[Service]
Type=forking
RuntimeDirectory=svnserve
PIDFile=/run/svnserve/svnserve.pid
EnvironmentFile=/etc/default/svnserve
ExecStart=/usr/bin/svnserve $DAEMON_ARGS
User=svn
Group=svn
KillMode=control-group
Restart=on-failure

[Install]
WantedBy=multi-user.target
  • 创建设置SVN服务启动参数的配置文件/etc/default/svnserve。其内容如下:
# svnserve options
DAEMON_ARGS="--daemon --pid-file /run/svnserve/svnserve.pid --root /srv/svn/repos --log-file /var/log/svnserve/svnserve.log"
  • 创建Log日志文件目录。
sudo mkdir /var/log/svnserve
sudo chown svn /var/log/svnserve
  • 创建Log日志文件自动转存的配置文件/etc/logrotate.d/svnserve。设置每天按天进行转存并压缩日志,最多保留最近30天。其内容如下:
/var/log/svnserve/*.log {
    daily
    missingok
    rotate 30
    compress
    notifempty
    create 640 svn adm
    sharedscripts
    postrotate
            if /bin/systemctl status svnserve > /dev/null ; then \
                /bin/systemctl restart svnserve > /dev/null; \
            fi;
    endscript
}
  • 最后SVN服务设置为自动开机启动,并立即启动它。
sudo systemctl daemon-reload
sudo systemctl enable svnserve.service
sudo systemctl start svnserve.service

4. 仓库管理

SVN的“仓库”(Repository),是一系列需要进行版本管理的目录和文件的管理单位。例如一个包含几个子项目的大型项目。“仓库”没有限制组织结构,只是以树状形式保存相关目录和文件。

  • 创建“仓库”。在所有“仓库”的存放目录下,建立指定“仓库”目录“project1”。
sudo -u svn svnadmin create /opt/svn/repos/project1
  • 设置“仓库”访问权限。修改仓库的“conf”目录下的文件。

    • svnserve.conf,配置“仓库”的认证、授权策略、访问控制等。
    • authz-db,“仓库”的访问控制文件,包括配置可访问“仓库”的用户。
    • password-db,可访问“仓库”的用户的密码。
  • 迁移“仓库”。把“仓库”导出,再导入到另一个新的仓库。可用于升级SVN服务软件后,把已有“仓库”迁移过去。
# 导出仓库project1
sudo -u svn svnadmin dump project1 > project1.dump

# 导入到仓库project2。project2需要提前新建。
sudo -u svn svnadmin load project2 < project1.dump
  • 备份“仓库”。使用“svnadmin hotcopy”命令,对“仓库”进行在线备份(不用担心是否还有其他进程在访问“仓库”),并能够在原“仓库”出现故障时顶替上去。此命令也可用于不同机器的同版本SVN服务之间迁移数据。
# 执行备份
sudo -u svn mkdir -p /var/svn/backups/ 
sudo -u svn svnadmin hotcopy /opt/svn/repos/project1 /var/svn/backups/project1.bak

# 执行还原
sudo -u svn svnadmin hotcopy /var/svn/backups/project1.bak /opt/svn/repos/project1

5. 踩坑

5.1. 默认权限不能查看历史记录

使用svnadmin create创建“仓库”后,默认不能查看历史记录。需要修改“仓库”下的conf/svnserve.conf,设置以下两个配置项,并重启SVN服务:

anon-access = none
auth-access = write

5.2. 影响MySQL部署

Debian 11的服务器上,通过MySQL官方源安装了“mysql-server”服务,再安装“subversion”后,MySQL的配置文件被改为指向了MariaDB的(如下),导致MySQL服务不能运行。手工修正解决问题。

/etc/alternatives/my.cnf -> /etc/mysql/mariadb.cnf

标签: none

添加新评论