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 手冊

http://www.subversion.org.cn/svnbook/1.4/svnbook.html#svn.foreword

本文以下只介紹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版本庫配置指示。(詳見:

http://www.subversion.org.cn/svnbook/1.4/svnbook.html#svn.ref.mod_dav_svn)

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命令。

好了,休息一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章