刚成立团队需要临时搭建一台SVN服务器,所以对照网上的一些提示做了下,操作起来不复杂,还是踩了不少坑,顺便原理性了解了下。
主要操作步骤如下:
1:安装svn
sudo apt-get install subversion
2: 创建svn版本库
先建目录,之后目录中创建respository
sudo mkdir /home/szbullsoft/svn
sudo mkdir /home/szbullsoft/svn/repository
3:修改权限
sudo chmod -R 777 /home/szbullsoft/svn/repository
4:创建版本库
sudo svnadmin create /home/szbullsoft/svn/repository
执行完成后,在/home/ szbullsoft/svn/repository 这个目录下,有如下文件:
Conf db format hooks locks
5:给db权限
sudo chmod –R 777 /home/szbullsoft/svn/repository/db
6: 配置conf
cd /home/szbullsoft/svn/repository/conf
#配置svnserve.conf
sudo vim svnserve.conf
修改前:
修改后:
说明:(去掉前面的#,并且顶格)
anon-access = none 匿名用户不可读
auth-access = write 权限用户可写
password-db = passwd 密码文件为passwd
authz-db = authz 权限文件为authz
7:修改passwd文件,添加用户
Sudo vim passwd
#格式:名字 = 密码
[users]
Kongchengbo = kongcb123
gaohui = gaoh123
8: 修改权限文件authz
sudo vim authz
# 文件修改如下
[groups]
[/]
Kongchengbo=rw
Gaohui=r
9:启动服务
svnserve -d -r /home/szbullsoft/svn/repository
注意这个目录要保持一致哦,之前参照其他人的博客,配置为:
svnserve -d -r /home/szbullsoft/svn --listen-port 81
之后使用客户端访问的时候,一直提示:
或者中文提示:由于目标计算机积极拒绝,无法连接
找了好多人的说法,都是防火墙,网络代理之类的问题,都不能解决,最后发现就是此处配置svnserve的目录是svnserve -d -r /home/szbullsoft/svn,该目录下并没有这些文件:Conf db format hooks locks,登录无法执行,都不会提示要输入用户名和密码的!!
10:修改svnserve
修改后,需要重启下svnserve,方式就是先查找id,之后kill,之后再配置:
svnserve -d -r /home/szbullsoft/svn/repository
配置完成后,就可以访问了,单客户端访问也分为两种,http和svn,一般单主机就是svn了,apache会用http,我在工作站电脑上安装的,所以就是svn,如果用http也会失败,提示信息类似9.
此时使用SVN再checkout就会提示要输入用户名和密码了!
11:文件和目录的增加删除操作
登录上,checkout提示没有文件夹
目录不对,改为svn://10.24.32.7/Doc也是一样的。
那我直接根目录下提交一个文件test.txt试试,是可以提交的,别的地方也能checkout出来。
那这个test.txt文件保存在哪里呢,到服务器/home/szbullsoft 目录下,find ./ -name “test.txt”
查找不到文件,那文件在哪里?
文心一言:当你向SVN仓库添加一个文件(比如 test.txt),这个文件的实际内容以及版本历史会被存储在 db 目录下。你无法在仓库的根目录(在这个例子中是 /home/szbullsoft/svn/repository)直接看到文件的最新版本,因为SVN使用了特定的数据库格式来存储这些信息。
那我需要下载Doc目录并添加内容呢,如何实现?
开始我以为要在哪里创建一个目录,试了没成功,后来明白了SVN数据存储原理:文件,文件夹都不是以文件形式存在,而是将数据存储在db库文件中。
创建Doc目录简单做法就是:
mkdir Doc
svn add Doc
svn commit -m "Creating Doc directory"
之后就可以checkout 目录Doc了
12 电脑重启后配置
服务器配置好之后,在本地运行了几天都正常,今天搬到机房,启动后,ssh登陆正常,但SVN在commit的时候异常了,提示同之前:
这个首先怀疑还是网络问题,防火墙或者网关配置。实际命令查看如下:
kongcb@bull-ThinkStation-P330:~$ sudo ufw status
Status: active
To Action From
-- ------ ----
80/tcp ALLOW Anywhere
81/tcp ALLOW Anywhere
3690/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
3069/tcp ALLOW Anywhere
3069 ALLOW Anywhere
3690 ALLOW Anywhere
80/tcp (v6) ALLOW Anywhere (v6)
81/tcp (v6) ALLOW Anywhere (v6)
3690/tcp (v6) ALLOW Anywhere (v6)
443/tcp (v6) ALLOW Anywhere (v6)
3069/tcp (v6) ALLOW Anywhere (v6)
3069 (v6) ALLOW Anywhere (v6)
3690 (v6) ALLOW Anywhere (v6)
实际配置3690是正常开放的,可以telnet查看下服务
kongcb@bull-ThinkStation-P330:~$ telnet 127.0.0.1 3690
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
kongcb@bull-ThinkStation-P330:~$ telnet 127.0.0.1 3690
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
kongcb@bull-ThinkStation-P330:~$ sudo ufw allow 81
Rule added
Rule added (v6)
kongcb@bull-ThinkStation-P330:~$ telnet 127.0.0.1 81
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
kongcb@bull-ThinkStation-P330:~$ telnet 127.0.0.1 21
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
kongcb@bull-ThinkStation-P330:~$ telnet 127.0.0.1 22
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.11
^C
Connection closed by foreign host.
kongcb@bull-ThinkStation-P330:~$ telnet 127.0.0.1 334
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
如上,ssh端口是22,目前ssh服务开放的,所以telnet到22端口有响应,而其他端口,即使防火墙开着,telnet过去也是没反应的。
那这就说明svn服务其实没有打开
那我再命令打开下服务:
svnserve -d -r /home/szbullsoft/svn/respository/
不指定服务端口,那就默认为3690,之后svn就正常了
贴士:
重启svnserve操作:
sudo killall svnserve
sudo svnserve -d -r /home/szbullsoft/svn/respository/
故而,SVN连接的时候,提示“目标计算机积极拒绝,无法连接”,这样提示的时候,还有可能是服务没启动,或配置端口问题
另外,如果想启动的时候自动配置,可以修改下/etc/rc.local文件,如下:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
svnserve -d -r /home/szbullsoft/svn/respository/
exit 0
增加svnserve -d -r /home/szbullsoft/svn/respository/ 可以每次电脑重启后,自动生效。