linux下安裝subversion1.6.5和apache2

以下安裝是在RHEL5.5默認安裝的情況下,以root身份進行安裝!
這個實驗我安裝了n次,最後總是不成功,因爲涉及到略多的軟件和配置。下面是安裝步驟和配置,自己記下來。希望給下次配置的時候不要像以前那麼費勁了!

1 .下載安裝apr,下載地址:http://apr.apache.org/
[root@localhost pub]# tar -jxvf apr-1.3.12.tar.bz2 首先解壓縮
[root@localhost pub]# mkdir /usr/local/apr 建立apr要安裝到的目錄
[root@localhost pub]# cd apr-1.3.12
[root@localhost apr-1.3.12]# ./configure –prefix=/usr/local/apr 開始配置編譯
[root@localhost apr-1.3.12]# make;make install 安裝

2.安裝apr-util
[root@localhost pub]# tar -jxvf apr-util-1.3.9.tar.bz2
[root@localhost pub]# cd apr-util-1.3.9
[root@localhost apr-util-1.3.9]# mkdir /usr/local/apr-util
[root@localhost apr-util-1.3.9]# ./configure –prefix=/usr/local/apr-util –with-apr=/usr/local/apr
[root@localhost apr-util-1.3.9]# make;make install

3.安裝neon
在安裝之前,需要確認libxml2,如果沒有安裝需要安裝上!
[root@localhost pub]# rpm -q libxml2
libxml2-2.6.26-2.1.2.8
[root@localhost pub]# rpm -q libxml2-devel
libxml2-devel-2.6.26-2.1.2.8

[root@localhost pub]# tar -zxvf neon-0.25.5.tar.gz
[root@localhost pub]# mkdir /usr/local/neon
[root@localhost pub]# cd neon-0.25.5
[root@localhost neon-0.25.5]# ./configure –prefix=/usr/local/neon
[root@localhost neon-0.25.5]# make;make install

4.安裝Berkeley DB

[root@localhost pub]# cd /usr/local/src
[root@localhost src]# tar -zxvf /var/ftp/pub/db-4.6.18.tar.gz
[root@localhost src]# cd db-4.6.18/
[root@localhost db-4.6.18]# cd build_unix/
[root@localhost build_unix]# mkdir /usr/local/berkeleydb
[root@localhost build_unix]# ../dist/configure –prefix=/usr/local/berkeleydb –enable-cxx
其中-enable-cxx就是編譯C++庫,這樣才能編譯Berkeley DB數據庫的PHP擴展php_db4.
yum -y install gcc-c++安裝一下就可以了

[root@localhost build_unix]# make;make install
[root@localhost build_unix]# echo ‘/usr/local/bekeleydb/lib/’>>/etc/ld.so.conf
[root@localhost build_unix]# ldconfig
這2句的作用就是通知系統Berkeley DB的動態鏈接庫在/usr/local/berkeleydb/lib/目錄

5.安裝sqlite-amalgamation-3.6.13.tar.gz
[root@localhost pub]# tar -zxvf sqlite-amalgamation-3.6.13.tar.gz
[root@localhost pub]# mkdir /usr/local/sqlite
[root@localhost pub]# cd sqlite-3.6.13/
[root@localhost sqlite-3.6.13]# ./configure –prefix=/usr/local/sqlite
[root@localhost sqlite-3.6.13]# make;make install

6.編譯安裝httpd, 下載地址:http://httpd.apache.org/
[root@localhost pub]#tar xvzf httpd-2.2.4.tar.gz//解壓apache2安裝包
[root@localhost pub]#cd httpd-2.2.4//進入解壓後的目錄
[root@localhost httpd-2.2.4]# mkdir /usr/local/apache2
[root@localhost httpd-2.2.4]# ./configure -prefix=/usr/local/apache2 –enable-dav –enable-so –enable-maintainer-mode –enable-rewrite –with-apr=/usr/local/apr/bin/apr-1-config –with-apr-util=/usr/local/apr/bin/apu-1-config
//配置apache安裝,後面的第一個參數是定製apache安裝到那個目錄,–enable-dav –enable-so是和subversion整合時需要的
[root@localhost httpd-2.2.4]# make;make install 完成安裝,如果沒有錯誤,真的太幸運了,哈哈。出現錯誤是很撓頭的!
[root@localhost pub]# cd /usr/local/apache2/
[root@localhost apache2]# bin/apachectl start 啓動web服務,並訪問,注意防火牆,如果能正確的訪問,說明沒有問題,ok了!
[root@localhost apache2]# bin/apachectl stop 可以停止,接着安裝其他的軟件包了。

7安裝subversion1.6.5
http://subversion.tigris.org/
http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=10339&expandFolder=10339&folderID=260 subversion-1.6.5.tar.gz和subversion-deps-1.6.5.tar.bz2下載地址
[root@localhost pub]# tar -zxvf subversion-1.6.5.tar.gz
[root@localhost pub]# tar -jxvf subversion-deps-1.6.5.tar.bz2

./configure以前,需要yum -y install openssl-devel否則會一直報錯,提示你configure的時候加上–with-openssl,即使你加上了也會報錯,因爲需要一個openssl.h(具體的名字忘了)的頭文件,如果你沒有安裝openssl-devel這個軟件包的話,這個.h文件系統中是沒有的。再解壓縮subversion-devel-1.6.11.tar.gz後,會在解壓縮subversion-1.6.11.tar.gz產生的文件夾內生成zlib文件,在configure時,要加上他的路徑,否則configure: error: –with-zlib requires an argument.也是報錯!
[root@localhost subversion-1.6.5]#./configure –prefix=/usr/local/subversion –with-apxs=/usr/local/apache2/bin/apxs –with-apr=/usr/local/apr –with-apr-util=/usr/local/apr-util –with-neon=/usr/local/neon –with-sqlite=/usr/local/sqlite –with-ssl –with-zlib=/var/ftp/pub/subversion-1.6.5/zlib –enable-maintainer-mode –without-berkeley-db

在make之前一定要執行下一步,否則就會報錯如下:
/usr/bin/ld: cannot find -lexpat
collect2: ld returned 1 exit status
make: *** [subversion/svn/svn] Error 1
我也是出現錯誤了,報錯了,然後百度,google一頓狂搜,愣是沒有搜到我要的答案,不過大體上知道是缺少一個庫文件,這個文件的名稱應該包含lib,或expat,因爲提示是沒有找到lexpat嘛,所以,我就一個軟件包一個軟件包的測試,才找到這個軟件包的,在安裝完這個軟件包之後,make才繼續進行下去的!!!!需要安裝的軟件包主要是這兩個:expat-1.95.8-8.2.1.i386.rpm和expat-devel-1.95.8-8.2.1.i386.rpm
[root@localhost Server]# rpm -ivh expat-1.95.8-8.3.el5_4.2.i386.rpm
warning: expat-1.95.8-8.3.el5_4.2.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing… ########################################### [100%]
1:expat-devel ########################################### [100%]
[root@localhost Server]# rpm -ivh expat-devel-1.95.8-8.3.el5_4.2.i386.rpm
warning: expat-devel-1.95.8-8.3.el5_4.2.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing… ########################################### [100%]
1:expat-devel ########################################### [100%]
[root@localhost subversion-1.6.5]#make
[root@localhost subversion-1.6.5]#make install
完成安裝。

啓動/usr/local/apache2/bin/apachectl start後,如果報錯,這個我也查找了N久,才解決報錯內容如下:

[root@localhost bin]# ./apachectl start
httpd: Syntax error on line 53 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/mod_dav_svn.so into server: /usr/local/subversion/lib/libsvn_subr-1.so.0: undefined symbol: apr_memcache_add_server

需要在/etc/ld.so.conf中添加一下內容,並執行ldconfig
[root@localhost ~]# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/apache2/modules/
/usr/local/subversion/bin/
/usr/local/berkeleydb/bin/
[root@localhost ~]#ldconfig

這樣在啓動apache服務的是否就沒有報錯了!

安裝完成之後,需要配置subversion,在配置之前,首先來了解一下配置語句。
主要配置語句如下:
<Location /svn> 意思是Subversion版本可的URL是http://MyServer IP/svn/
DAV svn 告訴Apache是哪個模塊響應哪個URL的請求,在這裏是SubVersion模塊
SVNPath /path 單版本庫時使用此項指明版本庫的路徑,但是在多版本庫中不要使用此項
SVNListParentPath on 對於SubVersion1.3或更高的版本,這個指示會列出所有SVNParentPath中的版本庫
SVNParentPath /path 告訴Subversion需要查看的版本庫位於/path之下
SVNIndexXSLT “/svnindex.xsl” 使用它可以在用瀏覽器瀏覽時更好看
AuthType Basic 激活基本認證,就是用戶名和密碼
AuthName “Subversion repository” 用來說明何時彈出要求用戶輸入認證信息的認證對話框
AuthUserFile /path/passwd.conf 指定使用的認證密碼文件
AuthzSVNAccessFile /path/authz.conf 位置,Subversion版本庫的訪問控制文件的路徑
Require valid-user 指定只有輸入了正確的用戶名和密碼的用戶可以訪問URL
</Location>

那麼現在首先配置最簡單的版本庫,那就是單版本庫
1)如果只配置一個單版本庫,且希望任何人都可以訪問你的服務,那麼配置語句設置成以下就可以了
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authzsvn.so
<Location /www> #如果進行訪問,在瀏覽器裏輸入:http://server IP/www,就可以直接訪問了
DAV svn #告訴Apache使用svn模塊響應URL的請求
SVNPath /svn/svnroot/www # 這裏是版本庫所在的路徑
</Location>
如果是配置多版本庫,而且允許任何人訪問你的服務,配置語句如下:
<Location /svn>
DAV svn
SVNLISTParentPath on #此句,最好加上,否則在瀏覽器中輸入http://server IP/sev的時候將看不到,除非用戶記下了版本庫的名字,哈哈
SVNParentPath /svn/svnroot #注意這裏是SVNParentPath了,而不是SVNPath,^
^
</Location>
以上是配置單版本庫和多版本庫,但是一定要注意一個問題,單版本庫和多版本庫千萬不能同時存在,否則,就會出現問題,最常見的問題如下:
<?xml version=”1.0″ encoding=”utf-8″ ?>
– <D:error xmlns:D=”DAV:” xmlns:m=”http://apache.org/dav/xmlns” xmlns:C=”svn:”>
<C:error />
<m:human-readable errcode=”2″>Could not open the requested SVN filesystem</m:human-readable>
</D:error>
解決的方法就是隻保留一個版本庫,即,刪除或註釋掉單個版本庫,刪除或註釋掉多個版本庫的配置。如果SVNPath或SVNParentPath後的路徑寫錯了,也會出現這樣的錯誤。

2) 認證訪問
對用戶的訪問進行限制,最簡單的限制是通過HTTP的基本認證機制,apache提供了一個htpasswd工具來建立和管理可接受的用戶名和密碼,使用htpasswd可以建立你希望訪問你版本庫的用戶。
比如:
root@localhost svn]/usr/local/apache2/bin/htpasswd -cm /svn/passwd.conf usera #第一次使用htpasswd時,使用c參數是創建後面的passwd.conf文件,m參數是使用md5進行加密
New password:
Re-type new password:
Adding password for user usera
root@localhost svn]# cat passwd.conf 可以查看新建立用戶名與密碼的對應問題。
usera:$apr1$jBxj7/..$7QvnzhPVSrn3pXUB6XhPJ.
[root@localhost svn]# /usr/local/apache2/bin/htpasswd -m /svn/passwd.conf userb #在創建完htpasswd.conf後,再添加用戶時,可以不使用任何參數。但是如果使用參數c,則會重新創建passwd.conf文件
New password:
Re-type new password:
Adding password for user userb
[root@localhost svn]# cat passwd.conf
usera:$apr1$jBxj7/..$7QvnzhPVSrn3pXUB6XhPJ.
userb:$apr1$AT3ZZ…$jwyfVWT7Hou4/rklZ13Fi.

[root@localhost ~]# awk ‘BEGIN{FS=”:”}{print length($2)}’ /svn/passwd.conf
37
37
我們可以使用awk來查看一下加密後的密碼長度,在這裏顯示是37位。而對於系統用戶密碼使用md5進行加密後,密碼長度爲34位,差了3位,仔細觀察一下,使用md5加密的密碼開始的前三位是$1$,但是在這裏$1$之間加了3位,是apr,這是使用htpasswd進行加密的一個不同點。
認證文件添加成功後,需要在httpd.conf的Location區裏添加一些指示來告訴Apache如何使用這些密碼文件,AuthType指定系統使用的認證類型,使用Basic認證系統即可,AuthName是你提供給認證域一個任意的名稱,大多數瀏覽器會向用戶詢問用戶名和密碼的窗口中顯示這個名稱,最後,使用AuthUserFile指定使用htpasswd城建的密碼文件的位置。但是如果只有以上這些還是不夠的,即沒有指定向那些用戶要求輸入用戶名和密碼,最簡單的方式是向所有的用戶要求用戶名和密碼,那麼添加Require valid-user,就是告訴Apache任何用戶都要進行認證。如果是對多個倉庫,需要在httd.conf的Location區塊中再添加一個控制語句AuthzSVNAccessFile,他後面接權限控制文件,在這裏設置爲authz.conf,內容,我設置爲:
[root@localhost ~]# cat /svn/authz.conf
[groups]
admin = apache
[firstrepo:/]
@admin = rw
usera = rw
[secondrepo:/]
@admin = rw
userb = rw
[/]

  • = r

那麼現在,httpd.conf中Location區塊的就變成這個樣子了(單倉庫沒有SVNParentPath,SVNListParentPath,AuthzSVNAccessFile,只有SVNPath):
<Location /svn> #/svn這個名字可以隨便換,換成/也是可以的,只要自己感覺方便
DAV SVN
SVNListParentPath on
SVNParentPath /svn/svnroot
AuthType Basic
AuthName “Subversion repository”
AuthUserFile /svn/passwd.conf
Require valid-user
AuthzSVNAccessFile /svn/authz.conf
</location>

3)創建倉庫(repository)
創建倉庫需要用的svnadmin命令,具體操作如下
[root@localhost ~]# /usr/local/subversion/bin/svnadmin create /svn/svnroot/firstrepo #創建倉庫
[root@localhost ~]# ls /svn/svnroot/firstrepo/ #創建完成後,可以查看一下,在firstrepo這個倉庫下多了很多文件和目錄
conf db format hooks locks README.txt
[root@localhost ~]# /usr/local/subversion/bin/svnadmin create /svn/svnroot/secondrepo #再創建一個,並查看一下
[root@localhost ~]# ls /svn/svnroot/secondrepo/
conf db format hooks locks README.txt
如果是單個倉庫,那麼,只創建一個倉庫就行了。
現在來查看一下剛纔創建的兩個庫,在瀏覽器地址中輸入http://server IP/svn(注意這裏爲什麼要輸入svn,是因爲httpd.conf中<Location /svn>指定的),輸入用戶名和密碼後,就可以看到剛纔創建的兩個庫了,但是這兩個庫中沒有任何內容。呵呵^_^
其他需要注意事項:
(1)單個版本庫的httpd.conf Locatioon區中SVNPath /svn/svnroot/firstrepo跟/usr/local/subversion/bin/svnadmin create /svn/svnroot/firstrepo目錄要一樣,要不會很撓頭的!!多個版本庫知道svn的父目錄,這裏是SVNParentPath /svn/svnroot 就可以了
(2)如果是對多個倉庫,需要在httd.conf的Location區塊中再添加一個控制語句AuthzSVNAccessFile,他後面接權限控制文件。單個版本庫不需要,多個版本庫要設置不同版本庫的權限
(3)目錄svnroot目錄的權限設置成755
4)向倉庫中導入數據
剛纔我們查看了,倉庫中沒有任何數據,是應爲我們沒有導入任何數據,現在開始導入數據了,哈哈
首先看一下命令格式:svn import /要導入倉庫的路徑 file:///svn/svnroot/倉庫名 -m “一些說明”
[root@localhost ~]# /usr/local/subversion/bin/svn import /etc file:///svn/svnroot/firstrepo -m “the first repository”
提交後的版本爲 1。
#以上命令是將/etc這個目錄中的內容導入(import)到第一個倉庫中(firstrepo),第一次提交後的還會出現 “提交後的版本爲 1。”,每提交一次版本更新一次
[root@localhost ~]# /usr/local/subversion/bin/svn import /home file:///svn/svnroot/secondrepo/ -m “Second repository”
#以上命令是將/home目錄中的內容(import)到第二個倉庫(secondrepo)中。

查看一下剛纔導入數據的倉庫,在瀏覽器地址中輸入http://server IP/svn(注意這裏爲什麼要輸入svn,是因爲httpd.conf中<Location /svn>指定的),輸入用戶名和密碼後,就可以看到剛纔創建的兩個庫了,倉庫中已經存在我們導入的數據了, 說明導入成功了!^_^!

以下部分我沒有配置,網上搜索到的,以後也許能用到,先記下來:
版本庫服務器的同步
1.單版本庫跟服務器目錄的同步:
進入到版本庫下的hooks下去
svn checkout file:///版本庫的目錄 /本地要取出的目錄
[root@localhost ~]# /usr/local/subversion/bin/svn checkout file:///svn/svnroot/firstrepo/ /home/export
Cd /data/svn/svnroot/www/hooks
Vi post-commit

#!/bin/sh
SVN=/usr/local/subversion/bin/svn
WEB=/data/www #web目錄要更新同步的目錄
$SVN update –username apache –passwd 123456 $WEB #這裏面的username跟password一定要有讀寫的權限

Chmod 757 post-commit #給它可執行的權利
2.多版本更服務器目錄的同步
進入到版本庫下的hooks下去
svn checkout file:///版本庫的目錄 /本地要取出的目錄
Cd /data/svn/svnroot/www/hookd
Vi post-commit

#!/bin/sh
SVN=/usr/local/subversion/bin/svn
$SVN update –username apache –passwd 123456 /home #裏面的username跟password一定要有讀寫的權限

Chmod 757 post-commit #給它可執行的權利

注意:
1.svn checkout file:///版本庫的目錄 /本地要取出的目錄 ——>這步一定要做要不會同步修改的
2.目錄位置一定要對應好了,否則出現問題能累死人

希望這篇文章對各位有用,減少各位的麻煩,祝福各位好運!

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