Centos 下搭建svn+apache 服務

Subversion是一個自由、開放源代碼的版本控制系統。它是一個通用系統,可用來管理任何類型的文件,其中包括程序源碼。

它的初始目標很明確,實現絕大部分CVS的已有功能;充分考慮現有的CVS用戶,在使用方式上模仿CVS,同時開發了一系列工具,使得基於CVS的項目能夠順利遷移到Subversion上。和CVS相比,它有很多優點,例如目錄版本控制、不可分割的提交、一致的數據處理方式和更有效率的分支與標記等。

Subversion有兩種運行方式,一種是基於Apache Http ServerSubversion,另一種是Subversion 獨立服務。下面我做的是基於Apache Http ServerSubversion,這樣做的好處是:A能使用WebDAV協議。B能使用瀏覽器作爲客戶端工具瀏覽源碼倉庫。C可以很容易的支持到SSPILDAP,這些都是Apache本身就支持的。D能得到比較完善的Apache安全認證系統。

下面是安裝與配置

一、  首先準備好相關的安裝包,我這裏使用的是下列的幾個包

Aprapr-1.4.2.tar.gzapr-util-1.3.10.tar.gz

Apachehttpd-2.2.22.tar.gz

Subversionsubversion-1.6.15.tar.gzsubversion-deps-1.6.15.tar.gz

二、  安裝和配置步驟

1、  安裝apr-1.4.2

#tar –zvxf apr-1.4.2.tar.gz

#cd apr-1.4.2

#./configure   安裝不指定路徑時 默認安裝到/usr/local/apr

# make

#make install

2、  安裝apr-util-1.3.10

#tar –zxvf apr-util-1.3.10.tar.gz

#cd apr-util-1.3.10

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

#make && make install

3、安裝httpd-2.2.22.tar.gz

#tar zxvf httpd-2.2.22.tar.gz

#

cd httpd-2.2.22

#./configure --prefix=/usr/local/apache \

--with-apr=/usr/local/apr/bin/apr-1-config  \

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

--enable-modules=so --enable-dav --enable-maintainer-mode --enable-rewrite

#make

#make install

安裝好後啓動apache

# /usr/local/apache/bin/apachectl -k start

用瀏覽器查看http://192.168.254.131,得到it works,說明apache已經配置成功了。

4、    安裝和配置Subversion

# tar zxvf subversion-1.6.15.tar.gz

# tar zxvf subversion-deps-1.6.15.tar.gz

# cd subversion-1.6.15

# rm -rf apr

# rm -rf apr-util

注意:SVN 依賴的APR版本要正確。如果Apache2.0.x,對應的APR版本應爲0.9.xApache2.2.x,對應的APR版本應爲1.2.x。由於subversion-deps包裏的APR0.9.x的,因此編譯svn時要刪除從deps裏解壓出來的apr, apr-util,改而使用apache 2.2裏提供的。(這裏指定爲開始安裝的apr目錄),這一點知識非常重要,自己之前多次安裝都沒成功,現在才明白是在這一點被卡住了,但最終還是被我解決了, 學習,和不斷實踐 會使你不斷成長!

# ./configure --prefix=/usr/local/svn --with-apxs=/usr/local/apache/bin/apxs /--with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apr/bin/apu-1-config --with-ssl --enable-maintainer-mode

#make

#make install

確定下svn有沒有安裝成功

#/usr/local/svn/bin/svnserve --version

會看到相關版本信息!

之後再看看apache 的相關模塊有沒有加載!如下:

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

下面開始建立版本庫

# mkdir -p /home/svndata

# chown -R apache.apache /home/svndata

# chmod -R 755 /home/svndata

# /usr/local/svn/bin/svnadmin create /home/svndata/www/  創建倉庫爲“www

#ls /home/svndata/www  查看有沒有創建好,如果多了一些文件則說明版本庫已經創建好

5、    配置apache支持svn

# vi /usr/local/apache/conf/httpd.conf

找到 User daemon 改爲 User apache

找到 Group daemon 改爲 Group apache

在配置文件末尾添加

<Location /svn>

    DAV svn

    SVNParentPath /home/svndata (此處配置你的版本庫根目錄)

    AuthType Basic  (連接類型設置 基本驗證)

    AuthName "Subversion" (此處字符串內容修改爲提示對話框標題)

    AuthUserFile /home/svndata/passwd(此處爲訪問版本庫用戶的文件,用apachehtpasswd命令生成)

    AuthzSVNAccessFile /home/svndata/auth.conf(此處爲訪問版本庫權限的文件)

    Require valid-user(在authfile中所有的用戶都可以訪問,如果沒有它,則只能第一個用戶可以訪問新建庫)

</Location>

保存退出。

重新啓動apache

#/usr/local/apache/bin/httpd –k restart

6、    配置svn權限管理

1)    添加用戶

# /usr/local/apache/bin/htpasswd -c /home/svndata/passwd user1

第一次設置用戶時使用-c 表示新建一個用戶文件。回車後輸入用戶密碼,完成對用戶的增加。第二次添加用戶不需要帶-c參數。如:

/usr/local/apache/bin/htpasswd /home/svndata/passwd user2

2)    權限分配:

# vi /home/svndata/auth.conf

[groups]表示羣組設置

Admin=user1user2  表示admin羣組裏的成員

Develop=u1,u2  表示Develop羣組裏的成員

[www:/] 表示倉庫www的根目錄下的訪問權限

user1=rw  www倉庫user1用戶具有讀和寫權限

user2=r  www倉庫user2用戶具有讀權限

@develop=rw  develop的成員具有讀寫權限

[/] 在所有倉庫的根目錄下

*=r 對所有的用戶都具有讀寫權限

注意:在編輯auth.conf文件時,所有行都必須要頂頭寫,不能有縮行出現,否則會報錯。在auth.conf中也可以指定多個倉庫。若一個倉庫中有多個目錄,也可以設定某些用戶或組對該目錄有某些權限。如:可以根據自己的需求設置。

7、    配置svn鉤子

# mkdir -p /opt/test

# cd /home/svndata/www/hooks/

# cp post-commit.tmpl post-commit

# chown apache:apache post-commit

# chmod 755 post-commit

#vi post-commit

添加:

export LANG=zh_CN.UTF-8

/usr/local/svn/bin/svn update /opt/test --username=user1 --password=password --no-auth-cache(一定要加此參數!)

/usr/local/svn/bin/svn export http://192.168.254.131:80/svn/www/ /opt/test  --username=user1 --password=password --force --no-auth-cache

啓動svn

#/usr/local/svn/bin/svnserve –d –r /home/svndata

-d 表示以daemon方式(後臺運行)運行

-r 指定根目錄

#ps –ef | grep svnserve

 

出現上面的表示啓動成功

啓動apache

#/usr/local/apache/bin/httpd -k restart

#/usr/local/svn/bin/svn checkout http://192.168.254.131:80/svn/www/ /opt/test  --username=ting --password=ting --no-auth-cache

#chown -R apache.apache /opt/test/

接下來客戶端TortoiseSVN測試

如圖客戶端連接

 

 

 

 

 

 

 

最後瀏覽器測試

http://192.168.254.131/svn/www

 

 

 

 

 

 

 

 

成功!到此apache svn 服務器的架設已經完成。

 

 

FAQ

 

1、權限錯誤:

如果出現Svn提交失敗,可根據失敗的具體提示去google,一般都能查出大概的錯誤原因,然後依次排查。例如:hooks腳本沒有執行權限,就需要加入執行權限並修改其屬主和屬組。

chown –R apache.apache /home/svndata/www/hooks/post-commit

chmod 755 /home/svndata/www/hooks/post-commit

PS:我們這次出現錯誤的主要原因是svn checkout時是以root用戶的身份,所以/opt/test目錄的屬主和屬組是root用戶。apache用戶沒有相關執行權限。

解決辦法:

chown –R apache.apache /opt/test

chmod –R 755 /opt/test

2、日誌排錯法

如果再不報錯的情況下達不到預期的效果,就要添加相關日誌來輔助分析問題。如此次搭建中,客戶端沒有任何錯誤產生,但是就是達不到預期的效果。我們加入瞭如下日誌:

LOG=/home/svndata/hook.log

   /usr/local/svn/bin/svn update /opt/test --username=user1 --password=password --no-auth-cache(一定要加此參數!) >>$LOG

/usr/local/svn/bin/svn export http://192.168.254.131:80/svn/www/ /opt/test  --username=user1 --password=password --force --no-auth-cache  >>$LOG

 

 

 

 

 

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