chysunny 2020-01-14
日常学习,Linux 下的 SVN服务器搭建,并记录。
1. 安装subversion :
使用yum安装非常简单:
1 #安装subversion 2 [ ~]# yum install subversion
运行命令后,与svn 有依赖关系的软件 都会被安装。
最后显示 “完毕” 。subversion 就安装完成了!!!
....... 已安装: subversion.x86_64 0:1.7.14-11.el7_4 作为依赖被安装: apr.x86_64 0:1.4.8-3.el7_4.1 apr-util.x86_64 0:1.5.2-6.el7 subversion-libs.x86_64 0:1.7.14-11.el7_4 完毕!
2. 查看一下SVN的版本:
安装完成后,可以查看一下SVN的版本。这样,自己的心里也有个数。
1 #查看svn版本 2 [ ~]# svn --version
svn,版本 1.7.14 (r1542130) 编译于 Apr 11 2018,02:40:28 版权所有 (C) 2013 Apache 软件基金会。 此软件包含了许多人的贡献,请查看文件 NOTICE 以获得更多信息。 Subversion 是开放源代码软件,请参阅 http://subversion.apache.org/ 站点。 可使用以下的版本库访问模块: * ra_neon : 通过 WebDAV 协议使用 neon 访问版本库的模块。 - 处理“http”方案 - 处理“https”方案 * ra_svn : 使用 svn 网络协议访问版本库的模块。 - 使用 Cyrus SASL 认证 - 处理“svn”方案 * ra_local : 访问本地磁盘的版本库模块。 - 处理“file”方案
3. 创建仓库
我们这里在/home
下建立一个名为svn
的仓库(repository),以后所有代码都放在这个下面,创建成功后在svn下面多了几个文件夹。
#创建仓库目录 [ ~]# mkdir -p /home/svn/ [ ~]# cd /home/svn/ #创建svn仓库 [ svn]# svnadmin create project [ svn]# ll 总用量 0 drwxr-xr-x 6 root root 4096 1月 8 10:31 project
4. 配置服务端svn
上一步,创建好svn仓库后,就会发现 project 仓库下多了很多文件。其中 conf
文件夹,这个是存放配置文件的。(蓝色代表的是文件夹)
进入conf 后,会看到 svnserve配置文件通常由3个文本文件组成:
[ svn]# cd project [ project]# ll 总用量 24 drwxr-xr-x 2 root root 4096 1月 13 18:27 conf drwxr-sr-x 6 root root 4096 1月 13 19:22 db -r--r--r-- 1 root root 2 1月 8 10:31 format drwxr-xr-x 2 root root 4096 1月 8 10:31 hooks drwxr-xr-x 2 root root 4096 1月 8 10:31 locks -rw-r--r-- 1 root root 229 1月 8 10:31 README.txt [ project]# cd conf [ conf]# ll 总用量 12 -rw-r--r-- 1 root root 1333 1月 13 17:18 authz -rw-r--r-- 1 root root 383 1月 13 18:20 passwd -rw-r--r-- 1 root root 3590 1月 13 18:27 svnserve.conf
其中:
(1.) 权限配置文件,在conf目录下,文件名为 authz (权限控制文件)
(2.) 用户名口令文件:在conf目录下,文件名为 passwd (帐号密码文件)
(3.) svn服务配置文件:在conf目录下,文件名为 svnserve.conf (SVN服务配置文件)
操作如下:
1.) passwd文件:
建议先从修改 passwd文件开始,先创建用户再进行权限配置。
该文件由一个[users] 配置段组成。
格式:<用户名>=<口令> (注:口令为未经过任何处理的明文。)
我们创建 4个用户,admin,test,test1,test2
[ conf]# vi passwd [users] admin = admin test = test test1 = 123456 test2 = 123456
2. )authz 文件:
该文件由[groups]配置段 和 若干版本库路径权限段 组成。详情可查看 authz文件。
1 [ conf]# cat authz
当中,可看到:
[groups]配置段格式为:
<用户组>=<用户列表>
1 [groups] 2 # harry_and_sally = harry,sally 3 # harry_sally_and_joe = harry,sally,&joe
用户列表由若干个用户组或用户名构成,用户组或用户名之间用逗号","分隔,引用用户组时要使用前缀"@"
这个我一般不用,但是记录下来:(最终配置修改,请看下方黄色部分)
下面的配置中创建了2个分组,分组1 的用户 可读可写,分组2 的用户 只读。
[ conf]# vi authz [groups] group1 = admin group2 = test1,test2 [/] @group1 = rw @group2 = r * =
版本库路径权限段格式:
[<版本库名>:<路径>]
例如:版本库abc路径 /tmp的版本库 、路径权限段的段名为 "[abc:/tmp]" 。
可省略段名中的版本库名。若省略版本库名,则该版本库路径权限段对所有版本库中相同路径的访问控制都有效。如:[/tmp]
版本库路径权限段中配置行格式有如下三种:
<用户名> = <权限>
<用户组> = <权限>
* = <权限>
# [/foo/bar] ----->(section name) # harry = rw ----->(option name = option value) # &joe = r # * = # [repository:/baz/fuz] # @harry_and_sally = rw # * = r
每一个 section 都命名了一个版本库(repository)和其对应的路径(path),
option name是已认证的用户名(即在passwd文件中定义的用户),而 option value 是用户对仓库指定路径的访问级别,分为 r(read-only)只读 和 rw(read/write) 读写这两种。
注意下,特别强调每一部分配置的名称可以是 [repos-name:path] 或 [path] 这两种格式。
搞清楚了这些概念后,修改配置文件 加如下内容即可:
###在最后面增加如下内容,[/] 是相对svn库src目录下的访问路径,可根据路径分配目录访问权限: [/] admin = rw test1 = r test2 = r * = ###如下是配置test用户只有对svn/project的目录,具有可读写权限 [/project] test = rw
上面配置的含义详解:
[/] -----------(仓库下所有文件) admin = rw --------(admin用户:可读可写) test1 = r ------ (test1用户:只读) test2 = r ------(test2用户:只读) * = ------(其他用户无任何权限) [/project] ------(project仓库) test = rw ------ (test用户:可读写)
admin 对/home/svn/
下所有文件具有可读可写权限,除此之外,其它用户均无任何权限,最后一行 *=
很重要不能少。
test1,test2 对/home/svn/
下所有文件 只有只读权限。
<span>test 对<span>/home/svn/project/</span></span>
权限。
总结:
SVN管理员可以通过这3个配置文件设置svnserve服务的用户名口令,以及对版本库路径的访问权限。
这些配置文件保存后就立即生效,不需要重启svnserve服务。
3.) svnserve.conf文件:
该文件由一个 [general]配置段 组成。(也就是说所有的配置都在[general] 段内 )
格式:<配置项>=<值>
配置项分为以下5项:(先大概了解一下,详细配置看下面的黄色部分)
1. anon-access 控制非鉴权用户访问版本库的权限。
取值范围为"write"、"read"和"none"。即"write"为可读可写,"read"为只读,"none"表示无访问权限。缺省值:read
2. auth-access 控制鉴权用户访问版本库的权限。
取值范围为"write"、"read"和"none"。即"write"为可读可写,"read"为只读,"none"表示无访问权限。缺省值:write
3. password-db 指定用户名口令文件名。
除非指定绝对路径,否则文件位置为相对conf目录的相对路径。缺省值:passwd
4. authz-db 指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制。
除非指定绝对路径,否则文件位置为相对conf目录的相对路径。缺省值:authz
5. realm 指定版本库的认证域,即在登录时提示的认证域名称。若两个版本库的认证域相同,建议使用相同的用户名口令数据文件。
缺省值:一个UUID(Universal Unique IDentifier,全局唯一标示)。
以下是一个详细的配置文件:(打开下面的5个注释 ,配置文件默认是被注解掉的。)
[ conf]# vi svnserve.conf #匿名用户可读 anon-access = read #授权用户可写 auth-access = write #使用哪个文件作为账号文件 password-db = passwd #使用哪个文件作为权限文件 authz-db = authz # 认证空间名,版本库所在目录 realm = /home/svn/project
上方 注意 两点:
5. 启动SVN
以上都配置完毕后,就可以启动运行 SVN了。
1 [ conf]# svnserve -d -r /home/svn/project/
(上述启动命令中,-d
表示守护进程, -r
表示在后台执行。)
6. 查看SVN进程
1 [ conf]# ps -ef|grep svn|grep -v grep 2 root 19275 1 0 1月13 ? 00:00:00 svnserve -d -r /home/svn/project/
7.检测SVN端口
1 [ conf]# netstat -ln |grep 3690 2 tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN
(这里还是要说一下。为什么要检查一下svn端口呢? 因为 不管你买的什么云 ,安装SVN之前都需要自己 放行 3690端口。不然肯定是访问不了的。
如果安装了 宝塔。同样也需要宝塔内放行3690端口。)
8.停止SVN
1 [ conf]# killall svnserve
9.客户端测试SVN
待续~~~~
pub_svnserve.conf的 pub_authz.conf的配置文件有非法字符的原因引起,需要查找pub_authz.conf提的非法内容比如多余的空格删除或直接将pub_authz.conf