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个依赖包 apr
、 apr-util
、 subversion-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 ~]#