centos7.8搭建svn服务器

本文详细介绍了在CentOS7.8系统上搭建SVN服务器的步骤,包括关闭SELinux和防火墙,安装svnserve及其依赖,创建版本库,配置权限,启动服务,并在Windows和Linux客户端进行访问测试。重点在于配置文件的修改和防火墙端口的开放。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

centos7.8搭建svn服务器

参考网址:

https://mp.weixin.qq.com/s/WFArxNAunSm2x9quPuBY7w

1.准备工作

1)关闭selinux和防火墙,过程略。

[root@mysvn ~]# vim /etc/selinux/config[root@mysvn ~]#

2)查看版本

[root@mysvn ~]# cat /etc/redhat-releaseCentOSLinux release 7.8.2003(Core)[root@mysvn ~]#

3.服务器地址规划

192.168.250.206
2.安装安装svnserve

这里通过yum安装,出现错误,错误提示:

[root@mysvn ~]# yum -y install subversion已加载插件:fastestmirror, langpacks/var/run/yum.pid 已被锁定,PID 为 2766的另一个程序正在运行。Another app is currently holding the yum lock; waiting for it to exit...另一个应用程序是:PackageKit内存:48 M RSS (1.4 GB VSZ)已启动:ThuApr708:31:002022- 10:46之前状态  :睡眠中,进程ID:2766

这里需要先删除yum.pid文件:

[root@mysvn ~]# rm -rf /var/run/yum.pid[root@mysvn ~]#

然后进行安装,安装过程中安装如下3个依赖包 aprapr-utilsubversion-libs

[root@mysvn ~]# yum -y install subversion已加载插件:fastestmirror, langpacksLoading mirror speeds from cached hostfile* base: mirrors.aliyun.com* extras: mirrors.aliyun.com* updates: mirrors.cn99.combase                                          ……已安装:  subversion.x86_64 0:1.7.14-16.el7                                                                         
作为依赖被安装:  apr.x86_64 0:1.4.8-7.el7  apr-util.x86_64 0:1.5.2-6.el7  subversion-libs.x86_64 0:1.7.14-16.el7     
完毕![root@mysvn ~]#

接着查看一下软件安装位置:

[root@mysvn ~]# rpm -ql subversion/etc/subversion/etc/sysconfig/svnserve/run/svnserve/usr/bin/svn/usr/bin/svnadmin/usr/bin/svndumpfilter/usr/bin/svnlook/usr/bin/svnrdump/usr/bin/svnserve/usr/bin/svnsync/usr/bin/svnversion
3.创建版本库目录

在根目录下创建用于今后管理版本的目录:

[root@mysvn ~]# mkdir -p /mysvn/svnrepos[root@mysvn ~]#
4.创建svn版本库

在上面创建版本管理目录的基础上,创建版本库:

这里创建一个 mydjangoproj版本库库名

[root@mysvn /]# svnadmin create /mysvn/svnrepos/mydjangoproj[root@mysvn /]#

接着进入 mydjangoproj目录:

[root@mysvn /]# cd /mysvn/svnrepos/mydjangoproj[root@mysvn mydjangoproj]# pwd/mysvn/svnrepos/mydjangoproj[root@mysvn mydjangoproj]# ls -al总用量 8drwxr-xr-x. 6 root root  864月   708:55.drwxr-xr-x. 3 root root  264月   708:55..drwxr-xr-x. 2 root root  544月   708:55 confdrwxr-sr-x. 6 root root 2334月   708:55 db-r--r--r--. 1 root root   24月   708:55 formatdrwxr-xr-x. 2 root root 2314月   708:55 hooksdrwxr-xr-x. 2 root root  414月   708:55 locks-rw-r--r--. 1 root root 2294月   708:55 README.txt[root@mysvn mydjangoproj]#

db目录下有下列文件:

[root@mysvn db]# pwd/mysvn/svnrepos/mydjangoproj/db[root@mysvn db]# ls -al总用量 28drwxr-sr-x. 6 root root  2334月   708:55.drwxr-xr-x. 6 root root   864月   708:55..-rw-r--r--. 1 root root    24月   708:55 current-r--r--r--. 1 root root   224月   708:55 format-rw-r--r--. 1 root root 19594月   708:55 fsfs.conf-rw-r--r--. 1 root root    54月   708:55 fs-type-rw-r--r--. 1 root root    24月   708:55 min-unpacked-revdrwxr-sr-x. 3 root root   154月   708:55 revpropsdrwxr-sr-x. 3 root root   154月   708:55 revsdrwxr-sr-x. 2 root root    64月   708:55 transactions-rw-r--r--. 1 root root    24月   708:55 txn-current-rw-r--r--. 1 root root    04月   708:55 txn-current-lockdrwxr-sr-x. 2 root root    64月   708:55 txn-protorevs-rw-r--r--. 1 root root   374月   708:55 uuid-rw-r--r--. 1 root root    04月   708:55 write-lock[root@mysvn db]#

关于上面看到的目录的作用

路径类型作用
conf目录存放版本库所用配置文件的目录
db目录版本数据存储目录
db/fs-type文件版本库数据真实存储格式,SVN有fsfs和bdb两种存储格式
db/rebprops目录记录版本属性
db/revs目录版本库数据存储真实目录
db/uuid文件存储版本库唯一标识号
db/txn-current文件记录当前事务
format文件存储一个整数的文件,此整数代表库层次结构版本
hooks目录存放版本库勾子目录
locks目录存储库锁目录,用来跟踪库的访问者
5.修改svnserver默认目录

修改 /etc/sysconfig/svnserver将默认目录指定到 /mysvn/svnrepos,并注释掉默认目录 /var/svn

这一步很重要,之前配置错了,导致无法访问

[root@mysvn mysvn]# vim /etc/sysconfig/svnserve
[root@mysvn mysvn]# cat /etc/sysconfig/svnserve# OPTIONS is used to pass command-line arguments to svnserve.## Specify the repository location in -r parameter:#OPTIONS="-r /var/svn"OPTIONS="-r /mysvn/svnrepos"[root@mysvn mysvn]#
6.配置文件修改

进入刚才创建的 mydjangoproj版本库目录:

[root@mysvn /]# cd /mysvn/svnrepos/mydjangoproj/conf[root@mysvn conf]# ls -al总用量 12drwxr-xr-x. 2 root root   544月   708:55.drwxr-xr-x. 6 root root   864月   708:55..-rw-r--r--. 1 root root 10804月   708:55 authz-rw-r--r--. 1 root root  3094月   708:55 passwd-rw-r--r--. 1 root root 30904月   708:55 svnserve.conf[root@mysvn conf]#

可以看出,一共存了3个配置文件,其中:

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

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

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

1)编辑 authz 文件

文件中,[/] 表示根目录,即 /mysvn/svnrepos。

在authz最后添加

[/]moonrong = rw

表示 moonrong用户对根目录有读写权限。

过程及查看:

[root@mysvn conf]# vim authz[root@mysvn conf]# cat authz
[aliases]# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average
[groups]# harry_and_sally = harry,sally# harry_sally_and_joe = harry,sally,&joe
# [/foo/bar]# harry = rw# &joe = r# * =
# [repository:/baz/fuz]# @harry_and_sally = rw# * = r[/]moonrong = rw[root@mysvn conf]#
2)编辑 passwd 文件

这里给moonrong用户的认证密码为: SUccess123465

[root@mysvn conf]# vim passwd[root@mysvn conf]# cat passwd
[users]# harry = harryssecret# sally = sallyssecretmoonrong = SUccess123465[root@mysvn conf]#
3)编辑 svnserve.conf 文件
[root@mysvn conf]# vim svnserve.conf[root@mysvn conf]# cat svnserve.conf
[general]
anon-access = readauth-access = write
password-db = passwd
authz-db = authz
realm = mydjangoproj
[sasl]# use-sasl = true
[root@mysvn conf]#

上面只保留修改的部分,其含义如下:

anon-access = none:表示禁止匿名用户访问。

auth-access = write:表示授权用户拥有读写权限。

password-db = passswd:指定用户名口令文件,即 passwd 文件。

authz-db = authz:指定权限配置文件,即 authz 文件。

realm = mydjangoproj:指定认证域,即 mydjangoproj 目录。

7.防火墙端口放行

之前将防火墙关闭掉了,这里出于安全考虑,再次开启防火墙,然后开放3690端口。

[root@mysvn /]# systemctl start firewalld[root@mysvn /]# systemctl enable firewalldCreated symlink from/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service to /usr/lib/systemd/system/firewalld.service.Created symlink from/etc/systemd/system/multi-user.target.wants/firewalld.service to /usr/lib/systemd/system/firewalld.service.[root@mysvn /]# systemctl status firewalld● firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)Active: active (running) since 四 2022-04-0709:40:58 CST; 19s agoDocs: man:firewalld(1)Main PID: 4747(firewalld)CGroup: /system.slice/firewalld.service└─4747/usr/bin/python2 -Es/usr/sbin/firewalld --nofork --nopid

查看当前开放情况:

[root@mysvn ~]# firewall-cmd --list-allpublic(active)  target: default  icmp-block-inversion: no  interfaces: eth0  sources:  services: dhcpv6-client ssh  ports:  protocols:  masquerade: no  forward-ports:  source-ports:  icmp-blocks:  rich rules:
[root@mysvn ~]#

接着添加规则:

[root@mysvn ~]# firewall-cmd --permanent --add-port=3690/tcpsuccess[root@mysvn ~]#

重启防火墙,查看开放的端口:

[root@mysvn ~]# systemctl restart firewalld[root@mysvn ~]# firewall-cmd --list-allpublic(active)  target: default  icmp-block-inversion: no  interfaces: eth0  sources:  services: dhcpv6-client ssh  ports: 3690/tcp  protocols:  masquerade: no  forward-ports:  source-ports:  icmp-blocks:  rich rules:
[root@mysvn ~]#
8.启动SVN服务
[root@mysvn ~]# systemctl start svnserve或者[root@mysvn ~]# svnserve -d -r /mysvn/svnrepos[root@mysvn ~]#

接着查看服务是否启动成功:

[root@mysvn mysvn]# systemctl status svnserve● svnserve.service - Subversion protocol daemonLoaded: loaded (/usr/lib/systemd/system/svnserve.service; enabled; vendor preset: disabled)Active: active (running) since 四 2022-04-0711:14:21 CST; 1min3s agoProcess: 3043ExecStart=/usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid $OPTIONS (code=exited, status=0/SUCCESS)Main PID: 3046(svnserve)Tasks: 1CGroup: /system.slice/svnserve.service└─3046/usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid -r /mysvn/svnrepos
4月 0711:14:21 mysvn systemd[1]: StartingSubversion protocol daemon...4月 0711:14:21 mysvn svnserve[3043]: DIGEST-MD5 common mech free4月 0711:14:21 mysvn systemd[1]: StartedSubversion protocol daemon.[root@mysvn mysvn]# ps aux | grep svnavahi      7500.00.0622882280?        Ss10:300:00 avahi-daemon: running [mysvn.local]root      30460.00.01978121284?        Ss11:140:00/usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid -r /mysvn/svnreposroot      30790.00.0112828980 pts/0    S+   11:170:00 grep --color=auto svn[root@mysvn mysvn]#

至此服务端已搭建完毕。

可以在LINUX下或者WINDOWS下进行客户端访问测试。

9.客户端访问SVN服务器
1)windows客户端
svn://192.168.250.206:3690/mydjangoproj

注:小乌龟下载地址:

https://tortoisesvn.net/

弹出下面窗口:这里测试 j改为 i,项目名称打错了,无关紧要。

图片

上传文件:

图片

2)LINUX客户端
[root@mysvn ~]# svn co svn://192.168.250.206:3690/mydjangoproj认证领域: <svn://192.168.250.206:3690> mydjangoproj“root”的密码:认证领域: <svn://192.168.250.206:3690> mydjangoproj用户名: moonrong“moonrong”的密码:
-----------------------------------------------------------------------注意!  你的密码,对于认证域:
<svn://192.168.250.206:3690> mydjangoproj
只能明文保存在磁盘上!  如果可能的话,请考虑配置你的系统,让 Subversion可以保存加密后的密码。请参阅文档以获得详细信息。
你可以通过在“/root/.subversion/servers”中设置选项“store-plaintext-passwords”为“yes”或“no”,来避免再次出现此警告。-----------------------------------------------------------------------保存未加密的密码(yes/no)?yessvn: E155000: “/root/mydjangoproj” 已经是指向不同 URL 的工作副本 #这里好像出了问题[root@mysvn ~]#
你可以通过在“/root/.subversion/servers”中设置选项“store-plaintext-passwords”为“yes”或“no”,来避免再次出现此警告。-----------------------------------------------------------------------保存未加密的密码(yes/no)?yessvn: E155000: “/root/mydjangoproj” 已经是指向不同 URL 的工作副本 #这里好像出了问题[root@mysvn ~]#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值