Linux下搭建大型SNV平台


 

 

Linux下搭建大型SNV平台

Subversion是什么?

Subversion是一个自由/开源的版本控制系统。也就是说,在Subversion管理下,文件和目录可以超越时空。也就是Subversion允许你数据恢复到早期版本,或者是检查数据修改的历史。正因为如此,许多人将版本控制系统当作一种神奇的“时间机器”。

Subversion的版本库可以通过网络访问,从而使用户可以在不同的电脑上进行操作。从某种程度上来说,允许用户在各自的空间里修改和管理同一组数据可以促进团队协作。因为修改不再是单线进行,开发速度会更快。此外,由于所有的工作都已版本化,也就不必担心由于错误的更改而影响软件质量—如果出现不正确的更改,只要撤销那一次更改操作即可。

某些版本控制系统本身也是软件配置管理(SCM)系统,这种系统经过精巧的设计,专门用来管理源代码树,并且具备许多与软件开发有关的特性—比如,对编程语言的支持,或者提供程序构建工具。不过Subversion并不是这样的系统。它是一个通用系统,可以管理任何类型的文件集。对你来说,这些文件这可能是源程序—而对别人,则可能是一个货物清单或者是数字电影。

Subversion的特性

在讲解Subversion为版本控制领域带来的特性时,我们会经常通过Subversion对CVS的改进进行说明。如果不熟悉CVS,了解所有Subversion的特性会有一定的困难。而如果根本就不熟悉版本控制,你就只有干瞪眼的份儿了。因此,最好首先阅读一下第 1 章 基本概念,这一章简单介绍了一些版本控制的基本思想和概念。

Subversion支持:

版本化的目录

CVS只能跟踪单个文件的变更历史,但是Subversion实现的“虚拟”版本化文件系统则可以跟踪目录树的变更。在Subversion中,文件目录都是版本化的。

真实的版本历史

由于只能跟踪单个文件的变更,CVS无法支持如文件拷贝和改名这些常见的操作—这些操作改变了目录的内容。同样,在CVS中,一个目录下的文件只要名字相同即拥有相同的历史,即使这些同名文件在历史上毫无关系。而在Subversion中,可以对文件或目录进行增加、拷贝和改名操作,也解决了同名而无关的文件之间的历史联系问题。

原子提交

一系列相关的更改,要么全部提交到版本库,要么一个也不提交。这样用户就可以将相关的更改组成一个逻辑整体,防止出现只有部分修改提交到版本库的情况。

版本化的元数据

每一个文件和目录都有自己的一组属性—键和它们的值。可以根据需要建立并存储任何键/值对。和文件本身的内容一样,属性也在版本控制之下。

可选的网络层

Subversion在版本库访问的实现上具有较高的抽象程度,利于人们实现新的网络访问机制。Subversion可以作为一个扩展模块嵌入到Apache之中。这种方式在稳定性和交互性方面有很大的优势,可以直接使用服务器的成熟技术—认证、授权和传输压缩等。此外,Subversion自身也实现了一个轻型的,可独立运行的服务器软件。这个服务器使用了一个自定义协议,可以轻松的用SSH封装。

一致的数据操作

Subversion用一个二进制差异算法描述文件的变化,对于文本(可读)和二进制(不可读)文件其操作方式是一致的。这两种类型的文件压缩存储在版本库中,而差异信息则在网络上双向传递。

高效的分支和标签操作

在Subversion中,分支与标签操作的开销与工程的大小无关。Subversion的分支和标签操作用只是一种类似于硬链接的机制拷贝整个工程。因而这些操作通常只会花费很少且相对固定的时间。

可修改性

Subversion没有历史负担,它以一系列优质的共享C程序库的方式实现,具有定义良好的API。这使得Subversion非常容易维护,和其它语言的互操作性很强。

Subversion的架构

图1 “Subversion的架构”给出了Subversion设计总体上的“俯视图”。

图 1. Subversion的架构

clip_image001

 

图中的一端是保存所有版本数据的Subversion版本库,另一端是Subvesion的客户程序,管理着所有版本数据的本地影射(称为“工作拷贝”),在这两极之间是各种各样的版本库访问(RA)层,某些使用电脑网络通过网络服务器访问版本库,某些则绕过网络服务器直接访问版本库。

Subversion的组件

安装好的Subversion由几个部分组成,下面将简单的介绍一下这些组件。下文的描述或许过于简略,不易理解,但不用担心—本书后面的章节中会用更多的内容来详细阐述这些组件。

svn

命令行客户端程序。

svnversion

此工具用来显示工作拷贝的状态(用术语来说,就是当前项目的修订版本)。

svnlook

直接查看Subversion版本库的工具。

svnadmin

建立、调整和修复Subversion版本库的工具。

svndumpfilter

过滤Subversion版本库转储数据流的工具。

mod_dav_svn

Apache HTTP服务器的一个插件,使版本库可以通过网络访问。

svnserve

一个单独运行的服务器程序,可以作为守护进程或由SSH调用。这是另一种使版本库可以通过网络访问的方式。

svnsync

一个通过网络增量镜像版本库的程序。

如果已经正确完成了Subversion的安装,我们就可以开始我们的学习之旅了。在后面的两章中,我们将讲解如何使用Subversion的客户端程序svn

服务配置

一个Subversion的版本库可以和客户端同时运行在同一个机器上,使用file:///访问,但是一个典型的Subversion设置应该包括一个单独的服务器,可以被办公室的所有客户端访问—或者有可能是整个世界。

本小节描述了怎样将一个Subversion的版本库暴露给远程客户端,我们会覆盖Subversion已存在的服务器机制,讨论各种方式的配置和使用。经过阅读本小节,你可以决定你需要哪种网络设置,并且明白怎样在你的主机上进行配置。

概述

Subversion的设计包括一个抽象的网络层,这意味着版本库可以通过各种服务器进程访问,而且客户端“版本库访问”的API允许程序员写出相关协议的插件,理论上讲,Subversion可以使用无限数量的网络协议实现,目前实践中只有两种服务器。

Apache是最流行的web服务器,通过使用mod_dav_svn模块,Apache可以访问版本库,并且可以使客户端使用HTTP的扩展协议WebDAV/DeltaV进行访问,因为Apache是一个非常易于扩展的web服务器,它提供了许多“易于获取的”特性,例如加密的SSL通讯,日志和与第三方工具的集成,以及内置的版本库web浏览功能。

在另一个角落是svnserve:一个更小,轻型的服务器程序,同客户端使用自定义的协议。因为协议是为Subversion专门设计的,并且是有状态的(不像HTTP),它提供了更快的网络操作—但也有一些代价。它只理解CRAM-MD5的认证,然而它非常易于配置,是开始使用Subversion的小团队的最佳选择。

第三个选择是使用SSH连接包裹的svnserve,尽管这个场景依然使用svnserve,它与传统的svnserve部署非常不同,SSH在多所有的通讯中使用加密方式,SSH也使用排他的认证,所以在服务器主机(svnserve与之不同,它包含了自己的私有用户帐号)上必须要有真实的系统帐户。最后,因为这些配置需要每个用户发起一个私有的临时svnserve进程,这与允许一组本地用户通过file://协议访问等同(从访问许可的视点)。因此路径为基础的访问控制变得没有意义,因为每个用户都可以直接访问版本库。

下面是三种典型服务器部署的总结。

 

 6.1.

特性

Apache + mod_dav_svn

svnserve

svnserve over SSH

认证选项

HTTP(S) basic auth、X.509 certificates、LDAP、NTLM或任何Apache httpd已经具备的方式

CRAM-MD5

SSH

用户帐号选项

私有的'users'文件

私有的'users'文件

系统帐号

授权选项

可以授予整个版本库的读/写权限,也可以指定目录的。

可以授予整个版本库的读/写权限,也可以指定目录的。

只能对版本库整体赋予读/写权限

加密

通过可选的SSL

SSH通道的

Logging

对每个HTTP请求记录完全的Apache日志,通过选项“高级”记录普通的客户端操作。

no logging

no logging

交互性

可以部分的被其他WebDAV客户端使用

只同svn客户端通讯

只同svn客户端通讯

Web浏览能力

有限的内置支持,或者通过第三方工具,如ViewVC

只有通过第三方工具,如ViewVC

只有通过第三方工具,如ViewVC

速度

有些慢

快一点

快一点

初始设置

有些复杂

极为简单

相当简单

 

以上介绍摘自Subversion 手册

本文以下只介绍SVN使用Apache http 服务,将完成多个项目版本库管理、SSL加密、web界面管理项目、mysql 存放用户密码等全套SVN解决方案。

好了,打起精神开始用功学习吧~

一、环境说明

Server : CentOS 5.5 IP: 10.1.254.241

Client : Win2003 IP:10.1.96.9

二、软件包安装

1、

[root@subversion-1 ~]# yum -y install mysql mysql-server mysql-devel per-DBI perl-DBD-MySQl mod_auth_mysql php-common Php-cli php http http-devel mod_sslsubversion subversion-devel subversion-perl mod_dav_svn php-mysql

Mod_auth_mysql 把用户名字和密码保存到MySQL数据库,然后直接使用它们进行身份验证。

Mod_dav_svn Apache通过Apache HTTP服务器用来维护Subversion版本库配置指示。

2、查看subversion是否安装成功

[root@subversion-1 ~]# svnserve --version

svnserve, version 1.6.11 (r934486)

compiled Jun 8 2011, 16:21:54

三、配置mysql

1、新建一个账户

GRANT all privileges ON *.* TO usvn@localhost IDENTIFIED BY 'usvn';

四、配置svn管理程序usvn

下载地址:http://subversion.tigris.org/downloads/subversion-1.6.11.tar.gz

1、 程序环境要求

1) PHP 5 (5.1.2 <= ver &lt; 5.3)

2) apache2

3) mod_dav enable (in Apache httpd.conf - DSO support - "LoadModule dav_module modules/mod_dav.so")

4) mod_dav_fs enable (in Apache httpd.conf - DSO support - "LoadModule dav_fs_module modules/mod_dav_fs.so")

5) mod_rewrite enable (in Apache httpd.conf - DSO support - "LoadModule rewrite_module modules/mod_rewrite.so")

6) proper AllowOverride configuration (see below example - "AllowOverride All")

7) Subversion - below modules are packed in most binary distributions

8) mod_authz_svn enable (in Apache httpd.conf - DSO support - "LoadModule authz_svn_module modules/mod_authz_svn.so")

9) mod_dav_svn enable (in Apache httpd.conf - DSO support - "LoadModule dav_svn_module modules/mod_dav_svn.so")

2、 解压到/var/www/html/usvn

3、 配置apache,httpd.conf添加以下几行,并注释Listen 80。

LoadModule dav_svn_module modules/mod_dav_svn.so

LoadModule authz_svn_module modules/mod_authz_svn.so

LoadModule ssl_module modules/mod_ssl.so

Alias /usvn /var/www/html/usvn/public/

&lt;Directory "/var/www/html/usvn/public">

Options +SymLinksIfOwnerMatch

AllowOverride all

Order allow,deny

Allow from all

</Directory>

4、apache启动后查看https的端口443是否打开,你就可以使用安全的http ssl传输数据了

[root@subversion-1 ~]# netstat -antp | grep 443

tcp 0 0 :::443 :::* LISTEN 4239/httpd

不要忘记修改防火墙允许访问本机的443端口

5、 在浏览器上输入地址:http://10.1.254.241/usvn/clip_image003

 

clip_image005

clip_image007

clip_image009

clip_image011

clip_image013

clip_image015

clip_image017

 

将以上配置添加到httpd.conf末尾,然后重启。接下来就可以通过usvn管理subversion了。

五、简单使用usvn

clip_image019

1、登录后显示台下,赶快创建一个项目吧

clip_image021

 

2、点击管理---》添加新项目

clip_image023

clip_image025

3、添加项目用户,点击管理----用户-----添加新用户

clip_image027

4、登录client安装TortoiseSVN

下载地址http://tortoisesvn.net/downloads.html,安装完成后,右键选择checkout

clip_image028

clip_image029

clip_image031

clip_image033

clip_image035

当然,你也可以通过https来浏览

clip_image037

还可以登录到usvn中来浏览

clip_image039

具体使用这里不再详述。

六、使用编译安装httpd,php时遇到的问题及解决方法

1、 要使用usvn就要注意PHP的版本5.1.2 &lt;= ver &lt; 5.3,httpd要把模块mod_rewrite、mod_dav mod_ssl

 

2、Apache相关的软件包apr apr-util httpd 可以从http://lab.renren.com获得

Subversion包下载地址 http://subversion.apache.org/download/#pre-releases

3、 以下编译代码:

? install apr-1.4.5

./configure

make && make install

? install apr-util

/configure --with-apr=/usr/local/apr

make && make install

? install httpd

./configure --prefix=/usr/local/httpd-2.2.192 \

–-enable-rewrite \

--enable-dav \

--enable-so \

--enable-maintainer-mode \

--enable-ssl \

--with-apr=/usr/local/apr/bin/apr-1-config\ --with-apr-util=/usr/local/apr/bin/apu-1-config &&make && make install

? install subversion

./configure

--prefix=/usr/local/subversion-1.6.11 \

--with-apxs=/usr/local/httpd/bin/apxs \

--with-apr=/usr/local/apr \

--with-apr-util=/usr/local/apr && make && make install

? install php

./configure --prefix=/usr/local/php \

--with-apxs2=/usr/local/httpd/bin/apxs \

--with-config-file-path=/usr/local/php \

--with-mysql=/usr/local/mysql --with-freetype-dir \

--with-gd --with-jpeg-dir --with-curl --with-png-dir \

--with-zlib --enable-mbstring \

--enable-exif \

--with-openssl && make && make install

? Install mysqli

cd /mysql-ser/ext/mysqi/

/usr/local/php/bin/phpize (产生configure文件)

./configure \

-prefix=/usr/local/mysqli \

-with-php-config=/usr/local/php/bin/php-config \

-with-mysqli=/usr/local/mysql/bin/mysql_config && make && make install

在/usr/local/php/php.ini 添加mysqli.so模块

extension_dir=”/path/to/mysqli.so/dir” 这个mysqli.so文件的目录在安装完成会显示

extension=mysqli.so

4、错误解决方法

? 在编译mysqli.so的错误

vi /usr/local/mysql/include/mysql.h

在第221行

... ...

enum mysql_protocol_type

{

MYSQL_PROTOCOL_DEFAULT, MYSQL_PROTOCOL_TCP, MYSQL_PROTOCOL_SOCKET,

MYSQL_PROTOCOL_PIPE, MYSQL_PROTOCOL_MEMORY

};

/*

There are three types of queries - the ones that have to go to

the master, the ones that go to a slave, and the adminstrative

type which must happen on the pivot connectioin

*/

#添加下面的4行

enum mysql_rpl_type

{

MYSQL_RPL_MASTER, MYSQL_RPL_SLAVE, MYSQL_RPL_ADMIN

};

2、如果出现以下错误:

/root/tmp/php-5.2.3/ext/mysqli/mysqli_api.c: In function 'zif_mysqli_stmt_bind_param':

/root/tmp/php-5.2.3/ext/mysqli/mysqli_api.c:144: error: 'gptr' undeclared (first use in this function)

/root/tmp/php-5.2.3/ext/mysqli/mysqli_api.c:144: error: (Each undeclared identifier is reported only once

/root/tmp/php-5.2.3/ext/mysqli/mysqli_api.c:144: error: for each function it appears in.)

/root/tmp/php-5.2.3/ext/mysqli/mysqli_api.c: In function 'zif_mysqli_stmt_execute':

/root/tmp/php-5.2.3/ext/mysqli/mysqli_api.c:603: error: 'gptr' undeclared (first use in this function)

make: *** [mysqli_api.lo] 错误1

修改一下这个文件就可以

vi mysqli_api.c

查找所有gptr,有四处分别位于行144、行150、行603、行607,以char* 替换

? 在进行到usvn第六步时要出现type=innodb错误,将报错的文件type=innodb全替换成engine=innodb,因为新的mysql版本不在支持type命令。

好了,休息一下。

本文出自 “祝建跃-专注、专业” 博客

 

相关内容

    暂无相关文章