SVN的简介和工作原理
Subversion(简称svn)是近几年崛起的版本管理软件,是cvs的接班人,目前绝大多数开源软件都使用svn作为代码版本管理软件。Subversion支持linux和windows,但是普通应用在Linux上。
SVN主要是通过两种方式来工作:即是通过独立服务器和依赖Apache方式来工作。
SVN的作用体现如下方面
1、解决代码管理紊乱的问题。
2、解决代码冲突的问题。
3、解决代码拥有者对代码权限的控制。
系统环境:CentOS release 6.5 (Final)
服务器IP:192.168.159.130
vi /etc/sysconfig/network
一、安装相关软件包
[[email protected] ~]# yum -y install mysql mysql-devel mysql-server httpd mod_auth_mysql subversion mod_dav_svn
#mod_auth_mysql #实现Apache的MySQL认证
#subversion #SVN软件包
#mod_dav_svn #Subversion与Apache之间的接口,通过它,Apache就可以访问版本库,并且可以让客户端也使用HTTP的扩展协议WebDAV/DeltaV进行访问。
二、关闭和启动相关服务
#关闭防火墙和selinux,免得给实验造成不必要的错误
[[email protected] ~]# service iptables stop
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
[[email protected] ~]# setenforce 0
[[email protected] ~]# service mysqld start
#SVN是随着httpd服务启动而启动
[[email protected] ~]# service httpd start
Starting httpd: httpd: apr_sockaddr_info_get() failed for gupt-11
httpd: Could not reliably determine the server‘s fully qualified domain name, using 127.0.0.1 for ServerName
[ OK ]
三、创建版本库和相关授权
#创建测试目录。
[[email protected] ~]# mkdir -p /data/svn
#在提供的路径上创建一个新的空的版本库,如果提供的目录不存在,它会为你创建。
[[email protected] ~]# svnadmin create /data/svn/test
#SVN访问认证文件,这里添加一个组,这个组的成员对test项目有读写的权限。这里可以根据开发人员的需求授予项目相关的权限。
[[email protected] ~]# cat /data/svn/authz
[groups]
admin = dailele1,dailele2,php100
[test:/]
@admin = rw
四、授予项目Apache的权限
[[email protected] ~]# chown apache.apache /data/svn/ -R
[[email protected] ~]# chmod 755 /data/svn/ -R
五、配置认证数据库
[[email protected] ~]# mysql -uroot -p
mysql> create database svn_auth;
Query OK, 1 row affected (0.00 sec)
mysql> use svn_auth;
Database changed
mysql> grant all privileges on *.* to [email protected]‘%‘ identified by ‘123456‘ with grant option;
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE users
-> (
-> user_name CHAR(30) NOT NULL,
-> user_passwd CHAR(20) NOT NULL,
-> PRIMARY KEY (user_name)
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> insert into svn_auth.users values(‘dailele1‘,encrypt(‘123456‘));
Query OK, 1 row affected (0.00 sec)
mysql> insert into svn_auth.users values(‘dailele2‘,encrypt(‘123456‘));
Query OK, 1 row affected (0.01 sec)
mysql> insert into svn_auth.users values(‘php100‘,encrypt(‘123456‘));
Query OK, 1 row affected (0.00 sec)
六、Apache和SVN集成
[[email protected] ~]# vi /etc/httpd/conf/httpd.conf
<Location /svn>
DAV svn #开启DAV模块支持!
SVNParentPath /data/svn/ #项目的父目录
AuthzSVNAccessFile /data/svn/authz #SVN访问认证文件
AuthName "EELLY SUBVERSION" #认证名称
AuthType Basic #基本认证
AuthMYSQLEnable on #开启Mysql认证
AuthMYSQLUser svn #数据库访问用户名
AuthMySQLPassword 123456 #数据库访问的密码
AuthMYSQLDB svn_auth #存放认证信息的数据库名称
AuthMYSQLUserTable users #存放认证信息的表名称
AuthMYSQLNameField user_name #存放认证用户名的字段名称
AuthMYSQLPasswordField user_passwd #存放认证密码的字段名称
Require valid-user #表示只有认证的用户才能登陆
</Location>
七、重启服务
[[email protected] ~]# service httpd restart
八、修改my.cnf
[[email protected] ~]# vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
skip_grant_tables
#启动mysql时不启动grant-tables授权表,不然会报错导致账号无法通过验证。
[error] [client 172.18.107.176] MySQL ERROR: Access denied for user ‘svn‘@‘localhost‘ (using password: YES)
[[email protected] ~]# service mysqld restart
Stopping mysqld: [ OK ]
Starting mysqld: [ OK ]
九、测试
9.1、在客户端先在火狐浏览器上用dailele1这个用户登录test版本库。
dailele用户是可以通过认证的,由于这个是新建的版本库,里面当然是空的了。
简单的SVN基于MySQL认证就这样搭建完成了,只需要在MySQL数据库里面创建一个用户,然后在authz文件里面授予用户相应的权限即可访问相应的版本库了。