今天我们要实现在centos 7下安装并配置svn服务器,下面我们开始。
1、首先,安装svn
yum install subversion。
安装完毕后查看版本号svnserve --version,如果能显示如下信息,则说明安装成功(我这里安装的是1.7.14)
2、创建svn库目录
安装成功后,我们先创建一个目录,用来存放svn的项目,比如我这里创建/svn这个目录
mkdir /svn
3、创建第一个svn项目
svnadmin create /svn/project1
创建完毕后,可以在/svn/project1目录下看到自动生成了一些文件
上面这些文件我们都不用理,我们只看conf文件夹里面的。
在conf目录下,有三个文件,分别是authz(权限控制),passwd(账号信息),svnserve.conf(项目配置)
4、配置账号信息
首先我们先进行账号信息配置,即添加账号。vim passwd,按i进入编辑模式,在[users]节点下方添加账号,格式为:账号=密码。比如我这里添加账号admin,密码123456,那么就是admin=123456。
这个文件中原本有两条账号密码,那个是事例来的,可以删掉,也可以不用管他,反正只是注释的,不生效的。添加账号后,按esc键,输入:wq保存并退出。
5、管理权限
打开authz文件,可以看到如下事例配置
其中[aliases]节点表示别名,这个我们不用理。[groups]节点表示用户组,在这里我们可以创建一些用户组,并把用户归入组,这样我们在授权的时候就可以直接给用户组授权,而不用每个用户都单独授权。用户组的添加格式:组名=用户名,用户名2(多个用户之间用逗号隔开,而且用户名必须在passwd文件中已经创建的)。比如我们这里添加一个admin组,用户是admin。admin=admin
配置完用户和组后,现在我们来配置具体项目的权限,首先我们要清楚了解到,在svn里,权限只能控制到目录,而无法控制到具体的某个文件。所以我们这里实际是给用户进行目录权限的控制。比如这里,我刚刚创建的project1,那么现在我要控制admin组的成员全部都有读写权限,那么就添加如下信息:
[/]
@admin=rw
*=
上面的[/]表示project1的根目录,相当于[project1:/],@admin=rw表示admin这个用户组下的所有成员都有读写权限(read,write),*=表示除上述已经授权的用户或者用户组外,其它人一律没有权限。对于[/](或者[project1:/])这个配置是非常重要的。如果没有这个节点的配置的话,那么所有人都无法操作这个项目。如果想要配置项目下的某个目录权限,则使用[项目名:/目录名],例如我这里给admin用户组的成员授权project1项目下的code目录有读权限(注意配置子目录权限的时候前面一定要带/,表示根目录开始算起)
[project1:/code]
@admin=r
*=
注意:在这里我们之前已经给admin用户组赋予[project1:/]根目录的读写权限了,那么在这里实际是无需配置code目录的权限了,因为权限是继承的,子目录会继承父目录的权限。通俗一点说,你给我整个project1项目的读写权限,不可能该项目下的code目录我反而没有权限了吧,对吧?这样能理解吗~一般情况下这种只会用于对某个用户组或者用户授予子目录的读写权限,而父目录不给写权限。这样来控制权限的~不管你怎么配置,只要用户有该项目的权限(不管是读还是写),那么就必须先配置根目录的权限,否则你只配置子目录的权限也是没用的。
下面是我测试用的权限配置:
我这里添加了一个admin用户组,其成员是用户admin,并且配置admin用户组对project1项目的根目录有只读权限,对其下的子目录code有读写权限。根据我个人测试,貌似*=这行不写也没有关系的。
6、修改配置
编辑svnserve.conf文件,将下面几行代码前面的#删除
# password-db = passwd
# authz-db = authz
删除上面两行中的#,最左边空格也删掉。目的就是让我们刚刚配置的用户信息和权限信息生效
当然,有些时候,我们的svn项目可能不止一个(执行svnadmin create就是创建一个项目<在svn里面一般称为库>),那么我们想共用一个账号信息和授权配置怎么办呢?不可能每个项目都去配置一次passwd和authz文件吧?方法很简单,那就是把passwd和authz文件提取到一个目录里,比如提取到/svn目录下,然后在svenserve.conf文件里,对password-db = passwd指定路径,如这里的password-db = /svn/passwd,以及authz-db = /svn/authz。这样就能够实现用户信息共享,权限配置也全部集在一个文件里了。另外还有一个realm配置,该配置实际就是在checkout的时候显示的那个项目名称,如下图
如果不想修改就默认也没有关系的
7、启动、停止svn服务
启动服务:svnserve -d -r /svn //这里的svn表示一开始创建的那个svn目录
-d:守护进程
-r:svn根目录
记得关闭防火墙或者设置开放端口3690,还有一个非常重要的:一定要关闭selinux,否则设置开机启动也没用,开机后服务是正常启动的,但是客户端操作的时候会直接提示没有权限,连输入账号密码的对话框都不会弹出来。这个要注意一下。selinux的关闭方法:
修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled
重启机器即可。
停止服务:killall svnserve
启动服务后,我们就可以测试了。先下载svn客户端工具TortoiseSVN,下载地址:http://tortoisesvn.net/
然后我们就可以进行checkout了,地址是svn://IP/项目名,比如:svn://192.168.3.130/project1
要注意,我们这里的svn服务目前只支持svn://,不支持http协议,要使用http协议的话,要另外安装其它东西,这里暂时不做。
8、设置svn服务开机启动
我们这里安装好的svn服务,重启系统后不会自动启动,那么我们需要让它开机自己启动。
echo svnserve -d -r /svn >> /etc/rc.d/rc.local
将启动svn服务的命令追加到/etc/rc.d/rc.local文件中,并设置该文件有执行(x)权限
chmod +x /etc/rc.d/rc.local
执行完毕后,重启系统即可实现开机自动启动svn服务
到此,我们的svn服务器就已经安装配置完毕。
ok
mjj通道