共计 3922 个字符,预计需要花费 10 分钟才能阅读完成。
因为项目需要在 CentOS 7.4 环境下搭建一个 SVN 服务器,但是 CentOS 里自带的 subversion 版本只到 1.7.14
与 Subversion 官网 8 月 10 日发布的 SVN 1.8.19, SVN 1.9.7 相去甚远,会严重影响 SVN 客户端的使用,因此我们需要卸载掉自带的 Subversion,使用 yum 方式重新安装 Subversion 最新版本
我们执行命令
yum remove subversion*
yum clean all
直接卸载 subversion 和相关库包
但是当我们使用 yum 命令再安装 subversion 时,发现 CentOS 自带源的 Subversion 版本仍然是 1.7.14
说明从 CentOS 自带源安装 Subversion 最新版本此路不通,我们需要另行添加 Repo 源
参考 https://tecadmin.net/install-subversion-1-8-on-centos-rhel/# 一文,我们在
/etc/yum.repos.d 目录下添加 subversion.repo 文件,内容如下
[Subversion]
name=Wandisco SVN Repo
baseurl=http://opensource.wandisco.com/centos/$releasever/svn-1.9/RPMS/$basearch/
enabled=1
gpgcheck=0
由于我们这里安装的是 SVN1.9,在 repo 文件里配置的是 svn-1.9,如果要安装 SVN1.8,可以改为 svn-1.8
执行 yum install -y subversion 命令安装 Subversion
下列步骤参考了 https://www.cnblogs.com/fuyuanming/p/6123395.html 一文,
有部分有所修改
groupadd svn
useradd -g svn svn
这里之所以要创建 svn 用户启动 SVN 服务器,而不使用 root 用户启动 SVN 服务器,是因为如果使用 root 用户启动 SVN 服务器,通过 SVN 客户端使用非 root 账户访问 SVN 服务器时,会出现
“xxxxxxxx db/txn-current-lock:permission denied” 错误。
将 svn 用户加入 sudoers 用户中
mkdir -p /opt/svnRepos
切换到 svn 用户,为 svn 用户添加这个文件夹的访问权限
sudo chmod -R o+rw /opt/svnRepos
svnadmin create /opt/svnRepos
执行命令后 /opt/svnRepos 文件夹下新增了一些文件夹
进入 conf 目录,可以看到以下文件
authz 文件是权限控制文件
passwd 是帐号密码文件
svnserve.conf 是 SVN 服务配置文件
修改 passwd 文件,在 [users] 段添加用户 svnuser1 和访问密码
修改 authz 文件,在文件最后为 svnuser1 用户添加 svn 根目录访问权限
这里 [/] 表示是 svn 根目录,svnuser1=rw 说明 svnuser1 用户对根目录有读写权限。如果要限制某些用户对某些文件夹的
读写权限, 这里的 [/] 可以改为具体的文件夹目录,再添加具体的用户权限,这里不再赘述。
修改 svnserve.conf 文件
打开以下几项的注释(图中以白色字体标注)
anon-access = read #匿名用户可读
auth-access = write #授权用户可写
password-db = passwd #使用哪个文件作为账号文件
authz-db = authz #使用哪个文件作为权限文件
realm = /opt/svnRepos # 认证空间名,版本库所在目录
执行以下命令
svnserve -d -r /opt/svnRepos --config-file=/opt/svnRepos/conf/svnserve.conf
这条指令的参数 - d 表示以守护进程形式运行 Svn 服务器,- r 表示 Svn 服务器的根目录,后接 SVN 的根目录。
–config-file 是 Svn 服务器启动所引用的配置文件,后接配置文件路径。
svnserve 指令的更多参数可以参考此文
https://linux.die.net/man/8/svnserve
启动后可以查看到 svnserve 进程已经启动
SVN 服务器默认端口是 3690,如果要修改默认端口,可以在运行 svnserve 命令时添加 –listen-port 参数,后接需要指定的端口号。
执行以下命令在 CentOS7 系统防火墙上开放 SVN 服务器端口
firewall-cmd --permanent --add-port=3690/tcp
systemctl restart firewalld.service
在客户端安装 Tortoise SVN 1.9.7, 安装完成后新建一个文件夹,在文件夹中右击,在弹出右键菜单中选择 [Repo-brower] 菜单,在弹出的地址对话框中输入 SVN://IP(我们这里是 SVN://192.168.56.102), 再在验证对话框中输入用户名 rick 和密码,即可以访问 SVN 根目录, 我们使用 svnuser1 用户登录 SVN, 如下图所示
我们使用 svnuser1 用户在根目录下新建 trunk,tags 和 branches 三个文件夹
网上有相关文件通过修改 /etc/rc.local 文件设置 SVN 服务器开机启动,这种做法在 CentOS 7 环境下已经过时,我们使用 CentOS 7 正常添加服务的方式。
我们切换到 /usr/lib/systemd/system 目录下,创建名为 svnserver.service 的文件,添加以下内容
[Unit]
Description=SVN Server service
After=network.target
[Service]
Type=forking
ExecStart= /usr/bin/svnserve -d -r /opt/svnRepos --config-file=/opt/svnRepos/conf/svnserve.conf
ExecStop= /home/svn/stopSVN.sh
User=svn
Restart=on-abort
[Install]
WantedBy=multi-user.target
这里启动 SVN 服务器直接使用命令,我试过写一个.sh 文件替换,但启动后出现 code=exited,status=203/EXEC 错误,改用现在这种形式。
stopSVN.sh 是用于关闭 SVN 服务的脚本文件,内容如下:
#!/bin/sh
#查找是否有 svnserve 对应的进程,有的话关闭进程
ps -ef|grep svnserve |grep -v grep
if [$? -ne 0]
then
echo "the svn server does not start"
else
killall -9 sh svnserve
fi
#####
保存 svnserver.service 文件后,执行以下命令
systemctl daemon-reload
systemctl enable svnserver.service
systemctl start svnserver.service
如果 shell 窗口没有出现错误信息,表示启动已成功,我们可以执行以下命令检查启动状态
systemctl status svnserver.service
运行以下命令停止服务
systemctl stop svnserver.service
我们这时再运行 systemctl stop svnserver.service,可以看到服务已经被停掉
至此 SVN 服务器在 Linux 服务器安装成功,再次启动 CentOS 系统后 SVN 服务器会开机启动。
补充一点,CentOS 自带的 SELinux 默认是 Enforcing,处于打开状态,对于自启动的 SVN 服务,会导致客户端访问 SVN 服务器时出现 Permisson Denied 的错误,我们需要手动关闭它,修改 /etc/selinux/config 文件
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
把 SELINUX 从 enforcing 改为 disabled,重启系统,SVN 服务自启动后,从客户端访问不再出现 Permssion Denied 错误。