Linux下SVN的安裝與配置及相關問題解決方案

1.     環境準備

1.1 系統環境

[root@localhost mysql]# uname -ar

Linux localhost.localdomain 2.6.18-128.el5 #1 SMP Wed Jan 21 10:44:23 EST 2009 i686 i686 i386 GNU/Linux

1.2 所需軟件

1.1 JDKJava SE Development Kit 6u23 jdk-6u23-linux-i586.bin

1.2 ApacheUnix Source: httpd-2.2.17.tar.gz [PGP] [MD5] [SHA1]

1.3 Subversionsubversion-1.6.15.tar.gz

subversion-1.6.15.tar.gz

穩定

hwright 20101124日 星期三,8:10:13

   

Subversion 1.6.15 (MD5: cd7d613d86eb6465fdaf0f34a6cfe9ec)

信息

wget http://subversion.tigris.org/downloads/subversion-deps-1.6.12.tar.gz

           

1.3 目錄規整

1.  將上述所需軟件掛載到/mnt

2.  /mnt下的svn目錄拷貝到/usr/local/mytools

[root@localhost ~]# ls /mnt/svn

httpd-2.2.17.tar.gz  jdk-6u23-linux-i586.bin  subversion-1.6.15.tar.gz

[root@localhost ~]# cp -R /mnt/svn /usr/local/mytools/

說明:cp –R可以連文件夾一起拷貝,rrecursive 遞歸)

 

2.     安裝與配置

2.1 JDK的安裝與配置

2.1.1 安裝

[root@localhost svn]# ls /usr/local/mytools/svn  列出/usr/local/mytools/svn下的所有內容

httpd-2.2.17.tar.gz   jdk-6u23-linux-i586.bin  subversion-1.6.15.tar.gz

 

[root@localhost svn]# cd /usr/local/mytools/svn 進入svn目錄

 

[root@localhost svn]# ./jdk-6u23-linux-i586.bin 在當前目錄執行jdk-xxx.bin文件進行解壓,出現如下信息表示解壓成功

Java(TM) SE Development Kit 6 successfully installed.

 

Product Registration is FREE and includes many benefits:

* Notification of new versions, patches, and updates

* Special offers on Oracle products, services and training

* Access to early releases and documentation

 

Product and system data will be collected. If your configuration

supports a browser, the JDK Product Registration form will

be presented. If you do not register, none of this information

will be saved. You may also register your JDK later by

opening the register.html file (located in the JDK installation

directory) in a browser.

 

For more information on what data Registration collects and

how it is managed and used, see:

http://java.sun.com/javase/registration/JDKRegistrationPrivacy.html

 

Press Enter to continue.....

 

Done.

 

[root@localhost svn]# ls  解壓完成後查看,多了一個目錄jdk1.6.0_23

httpd-2.2.17.tar.gz  jdk1.6.0_23  jdk-6u23-linux-i586.bin  subversion-1.6.15.tar.gz

 

2.1.2  配置環境變量

[root@localhost jdk]# cp -R jdk1.6.0_23/ /usr/local/bin/ 爲方便管理,把解壓後的jdk目錄拷貝到/usr/local/bin/目錄下

 

[root@localhost workspace]# vi /etc/profile /etc/profile文件的export行的前面設置環境變量

 

JAVA_HOME=/usr/local/bin/jdk1.6.0_23 設置JDK HOME,最好一定不要帶空格哦

CLASSPATH=.;$JAVA_HOME/lib/dt.jar;$JAVA_HOME/lib/tools.jar:$CLASSPATH CLASSPATHjava加載類(class or lib)路徑,只有類在classpath中,java命令才能識別,設置CLASSPATH,前面一定要加上.;( .表示當前路徑 ;爲分隔符) ,否則可能會報錯。注意:兩個具體的參數中間用;分割,如$JAVA_HOME/lib/dt.jar;$JAVA_HOME/lib/tools.jar,參數和變量之間用:分割,如$JAVA_HOME/lib/tools.jar:$CLASSPATH

 

PATH=$JAVA_HOME/bin:$PATH Path使得系統可以在任何路徑下識別java命令,記得最後面一定要跟上 :$PATH,目的是把系統原理的PATH追加到後面,否則原理的PATH丟失,系統的很多軟件或操作就無法使用了

 

export JAVA_HOME PATH CLASSPATH

 

檢查環境變量是否配置成功

[root@localhost ~]# java -version

java version "1.6.0_23"

Java(TM) SE Runtime Environment (build 1.6.0_23-b05)

Java HotSpot(TM) Client VM (build 19.0-b09, mixed mode)

 

寫程序檢查

[root@localhost ~]#vi /usr/local/mytools/workspace/HelloJDK.java

Public class HelloJDK{

         Public static void main(String[] args){

         System.out.println(“~~~~~~~Hello JDK~~~~~~~”);

}

}

[root@localhost ~]# javac /usr/local/mytools/workspace/ helloJDK.java javacjava代碼編譯成class文件

[root@localhost ~]# java /usr/local/mytools/workspace/helloJDK java執行編譯過的class文件

~~~~~~~ Hello JDK ~~~~~~~~

 

至此在linux下面進行的JDK的安裝和配置已經完成啦,繼續下面的安裝咯

2.2ApacheSVN的整合

2.2.1          安裝所需的軟件包,比如aprapr-utilzlib等等

[root@localhost svn]#cd /usr/local/mytools/svn

[root@localhost svn]#wget http://subversion.tigris.org/downloads/subversion-deps-1.6.12.tar.gz

獲取subversion-deps-1.6.12.tar.gz軟件,裏面包含需要的aprapr-utilzlib等包

[root@localhost svn]#tar zxvf subversion-deps-1.6.12.tar.gz

[root@localhost svn]#cd subversion-1.6.12

 

[root@localhost subversion-1.6.12]#cd /apr 進入apr包,安裝

[root@localhost apr]#./buildconf

[root@localhost apr]# ./configure --prefix=/usr/local/bin/subversion1.6.15/svn/apr && make && make install  

 

[root@localhost apr]#cd ../apr-util進入apr-util包,安裝

[root@localhost apr-util]#./buildconf

[root@localhost apr-util]# ./configure --prefix=/usr/local/bin/subversion1.6.15/svn/apr-util --with-apr=/usr/local/bin/subversion1.6.15/svn/apr && make && make install

 

[root@localhost apr-util]cd ../zlib 進入zlib包,安裝,解決了svn編譯錯誤configure: error: subversion requires zlib

[root@localhost zlib]# ./configure --prefix=/usr/local/bin/subversion1.6.15/svn/zlib && make && make install

 

[root@localhost openssl-1.0.0c]# ./config --prefix=/usr/local/bin/subversion1.6.15/svn/openssl && make && make install 下載openssl包並進行安裝,爲後續安裝neon做準備

 

[root@localhost neon]# ./configure --prefix=/usr/local/bin/subversion1.6.15/svn/neon --with-apr=/usr/local/bin/subversion1.6.15/svn/apr --with-apr-util=/usr/local/bin/subversion1.6.15/svn/apr-util --with-openssl=/usr/local/bin/subversion1.6.15/svn/openssl

&&make && make install安裝neon

 

2.2.2          Apache的安裝

[root@localhost httpd-2.2.17]# ./buildconf 進入apache的源文件安裝目錄,先buildconf,一定要先做這一步,否則Apache安裝後文件夾不正確。剛開始沒有執行./buildconf 直接./configure && make && make install進行安裝的,安裝完成後進入apache安裝目錄,發現只有binbuild等等,conf等配置文件夾都丟失,於是到官網瞭解,在http://apr.apache.org/compiling_unix.html頁面發現有如下提示:Note that if you are compiling directly from the Subversion repository, you'll need GNU autoconf and GNU libtool installed, and you'll need to run ./buildconf before running the commands listed above. 於是先執行./buildconf ,然後再./configure && make && make install,安裝完成後目錄已經齊全

[root@localhost httpd-2.2.17]#./configure --prefix=/usr/local/bin/apache2.2.17 --enable-dav --enable-so && make && make install 配置,編譯,安裝

[root@localhost httpd-2.2.17]# ls /usr/local/bin/apache2.2.17/ 安裝完成後查看如果包含如下文件或文件夾,表示安裝成功

apr       bin    cgi-bin  error   icons    lib   man     modules

apr-util  build  conf     htdocs  include  logs  manual  zlib

2.2.3          SVN的安裝

[root@localhost svn]#cd /usr/local/mytools/svn 進入SVN的安裝文件目錄

 

[root@localhost svn]# tar zxvf subversion-1.6.15.tar.gz  tar命令解壓tar.gz文件

 

[root@localhost svn]# ls 查看解壓後的文件

httpd-2.2.17.tar.gz  subversion-1.6.15  subversion-1.6.15.tar.gz

 

[root@localhost svn]# cd subversion-1.6.15 進入解壓目錄

 

[root@localhost subversion-1.6.15]# ls 查看解壓目錄下的文件

aclocal.m4  build-outputs.mk  contrib        HACKING      README        www

autogen.sh  CHANGES           COPYING        INSTALL      subversion

BUGS        COMMITTERS        doc            Makefile.in  tools

build       configure         gen-make.opts  notes        TRANSLATING

build.conf  configure.ac      gen-make.py    packages     win-tests.py

 

[root@localhost subversion-1.6.15]# ./configure –help 查看configure的幫助文檔

 

[root@localhost svn]#sqlite-amalgamation-3.6.13.tar.gz (下載並加壓該包)

[root@localhost svn]tar xzvf sqlite-amalgamation-3.6.13.tar.gz

[root@localhost svn]# mkdir /usr/local/mytools/svn/subversion-1.6.15/ sqlite-amalgamation | cp sqlite-3.6.13/ sqlite3.c /usr/local/mytools/svn/subversion-1.6.15/ sqlite-amalgamation svn安裝包下創建sqlite-amalgamation,並且將sqlite-3.6.13包中的sqlite3.c拷貝到sqlite-amalgamation,可以解決svn編譯時出現的configure: error: Subversion requires SQLite

問題

 

[root@localhost subversion-1.6.15]# ./configure --prefix=/usr/local/bin/subversion1.6.15 --with-apxs=/usr/local/bin/apache2.2.17/bin/apxs --with-apr=/usr/local/bin/subversion1.6.15/svn/apr --with-apr-util=/usr/local/bin/subversion1.6.15/svn/apr-util --with-zlib=/usr/local/bin/subversion1.6.15/svn/zlib --with-ssl --enable-maintainer-mode 在當前目錄下執行configure命令進行配置,--with-apxs參數表示將SVN安裝到Apache下面

[root@localhost subversion-1.6.15]#make

[root@localhost subversion-1.6.15]#make install

make時出錯/usr/bin/ld: cannot find -lexpat
collect2: ld returned 1 exit status
make: *** [subversion/svn/svn] Error 1

原因缺少了lexpat包,使用yum查找到相應的源並進行安裝

yum list expat*(估計包升級了,如果查找lexpat找不到就找expat包)

yum install expat****.386

使用yum安裝後源文件一般存儲在/var/cache/yum目錄下

如果使用的是光盤安裝,可以在安裝光盤中找到相應的expat庫文件

2.2.4          ApacheSVN的整合

1.       進入SubVersion的安裝目錄,查找到mod_dav_svn.somod_authz_svn.so兩個文件,將它們拷貝到Apachemodules目錄下

進入subversion1.6.15目錄查找mod_dav_svn.somod_authz_svn.so兩個文件,沒有找到,於是到Apache2.2.17/modules下面查找,發現這兩個文件已經在安裝的時候被拷貝到modules目錄下了

2.       修改Apache的安裝目錄/conf目錄下的httpd.conf

2.1 設置監聽:Listen 192.168.1.249:8898

2.2 加載Module,按上述步驟安裝好後,這兩個module配置項已經在httpd.conf中了

LoadModule dav_svn_module modules/mod_dav_svn.so

LoadModule authz_svn_module modules/mod_authz_svn.so

2.3 httpd.conf文件最後添加如下信息

<Location /svn>  #表示以/svn的方式訪問

DAV svn

SVNParentPath /usr/local/mytools/SVNRoot #設置SVN的父目錄,這樣一個Apache配置可以對應多個SVN項目,如果想只對應單個項目,可以這樣設置SVNPath /usr/local/mytools/SVNRoot/prj_test_002 #跟具體的項目名稱

AuthType Basic

AuthName "Subversion repositories"

AuthUserFile /usr/local/mytools/SVNRoot/passwd #訪問SVN的用戶信息,在此設置的用戶可以訪問所有SVN項目

#AuthzSVNAccessFile /usr/local/mytools/SVNRoot/svnaccessfile #訪問SVN的權限設置文件,可以從SVN的某個項目的conf文件下面拷貝authz文件並重命名,[root@localhost SVNRoot]# cp authz /usr/local/mytools/SVNRoot/svnaccessfile

Require valid-user

</Location>

2.4   [root@localhost SVNRoot]#/usr/local/bin/apache2.2.17/bin/htpasswd –c passwd admin

passwd文件創建在SVNRoot下面,此處的參數只需要-c即可,passwd是用來保存訪問 svn的用戶名和密碼的,其中上面命令中的admin是用戶名,回車後系統要求輸入密碼和確認密碼,輸入完成後進入SVNRoot查看vi passwd,用戶名和密碼格式爲:用戶名:加密密碼;在linux下,明文密碼可能會存在無法操作的現象,所以會採用加密密碼

3. [root@localhost bin]# /usr/local/bin/apache2.2.17/bin/apachectl start 啓動apache服務

4. 訪問使用http:// Listen 192.168.1.249:8899/svn/prj_tester_002即可訪問

2.2.5          導入工程到SVN

 [root@localhost bin]#svn import /usr/local/mytools/workspace/ http://192.168.1.249:8898/svn/prj_tester_02 -m “import” --username admin –password manager (將/usr/local/mytools/workspace/工作區的所有內容導入到svn服務器

 

說明:在用svn import的時候老是出現SVN:cannot create repository “…..x.txn” Permission denied問題,後來在網上查了好多資料,發現有一個說需要把SVNRoot下面的prj_tester_02設置爲777的權限,即:chmod –R 777 prj_tester_02-R表示遞歸將prj_tester_02文件夾下的所有的文件和文件夾都修改權限。經過調整後,確實可以創建了。按道理,root用戶擁有至高無上的權限,爲什麼還會存在permission denied呢?是不是不允許root用戶進行svn import,同時基於安全性考慮,加上對Linux的用戶和權限的優良特性的神祕嚮往,決定新建一個普通用戶嘗試svn import

[root@localhost bin]#groupadd apachesvn

[root@localhost bin]#useradd apachesvn –p apachesvn

[root@localhost bin]#gpasswd –a apachesvn apachesvn

[root@localhost bin]#chown –R apachesvn:apachesvn prj_tester_02 變更版本庫prj_tester_02的所有者

[root@localhost bin]#chmod –R 755 prj_tester_02 變更prj_tester_02的權限

[root@localhost bin]# svn import /usr/local/mytools/workspace/ http://192.168.1.249:8898/svn/prj_tester_02 -m “import” --username admin –password manager 再次嘗試仍然出現permission denied問題,再次嘗試chmod –R 777 prj_tester_02,又可以了,就沒有其他的解決辦法了,繼續google,查到一個方法

[root@localhost bin]#chown -R daemon prj_tester_02

[root@localhost bin]#chmod -R 755 prj_tester_02

再次使用嘗試svn import,成功了,原來是需要將svn項目資源庫的所有者改成daemon啊,順便了解一下linux的用戶:

[root@localhost bin]#vi /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

apachesvn:x:502:502::/home/apachesvn:/bin/bash

  Linux系統中用戶是分角色的,不同的用戶所擁有的權限和操作也不同,需要注意的是用戶的角色主要是通過UID識別的。

  root用戶是系統唯一的管理員賬戶,擁有至高無上的權力,是真實用戶,可登錄系統,可操作系統任何文件和命令。

  虛擬用戶是僞用戶或假用戶,與真實用戶區分開來,這類用戶不具備登錄系統的能力,但卻是系統運行不可缺少的用戶,比如bindaemonadmftpmail等,這類用戶都是系統自帶的,當然也可以手動添加。

普通用戶由系統管理員添加,能登錄系統,只能操作自己的家目錄的內容,權限有限

 

[root@localhost home]# svn import ./test http://192.168.1.249:8898/svn/prj_tester_02 -m "import" --username admin --password manager

如果在導入工程的時候出現SVN:Path “prj_tester_02” exist,可嘗試使用如下方法解決

[root@localhost home]# svn import ./test http://192.168.1.249:8898/svn/prj_tester_02/test -m "import" --username admin --password manager  源文件或目錄與資源庫中的文件和目錄保持一致

2.2.6          SVNRootsvnaccessfile說明

用戶對SVN的訪問權限可以使用svnaccessfile進行配置,該配置是全局的,對SVNRoot下的多個資源庫有效,請記得如果使用該文件進行權限控制,需要將httpd.conf文件中#AuthzSVNAccessFile前面的#號去掉

[root@localhost SVNRoot]# vi svnaccessfile

[groups]   #設置用戶的所屬羣組

admin=jack,rose

developer1 = sara,kite

developer2 = wook,cookie

tester=money

docs=john

training=mark

 

# 爲所有庫指定默認訪問規則

# 所有人可以讀,管理員可以寫,不被系統識別的危險分子沒有任何權限

[/]

* = r

@admin = rw

dangerman =

 

# 開發人員和測試人員可以完全訪問他們的項目版本庫

[prj_tester_01:/]

@ developer1 = rw

@ tester = rw

[prj_tester_02:/]

@ developer2 = rw

@ tester = rw

 

# 文檔人員(比如需求人員)對所有的docs目錄有寫權限

[/trunk/doc]

@ docs = rw

 

# 培訓人員可以完全訪問培訓版本庫

[prj_training:/]

@training = rw

2.2.7          windows系統中訪問svn

所有的配置都結束了,此時可以在windows中進行訪問啦,開心的輸入http://192.168.1.249:8898/svn/prj_tester_02,得到的答案是無法連接到服務器,到底咋回事兒呢,在linux下明明可以的嘛。哦對了,應該是Linux防火牆的問題,於是乎調整防火牆配置:

[root@localhost home]#chkconfig iptables on | off 關閉和開啓防火牆的配置,需要重啓生效,重啓後不會復原

[root@localhost home]#service iptables start | stop 關閉和開啓防火牆服務的配置,立即生效,不需要重啓,重啓後會復原爲原來的防火牆設置

[root@localhost home]#vi /etc/sysconfig/iptables 如果iptables在開啓狀態,可以到/etc/sysconfig/iptables開放端口號,這樣外部就可以訪問啦

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8898 -j ACCEPT

經過如上設置後,再次通過windows訪問SVN http://192.168.1.249:8898/svn/prj_tester_02,成功

 

 

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