環境
Linux version 2.6.9-89.ELlargesmp (gcc version 3.4.6 20060404 (Red Hat 3.4.6-11)) #1 SMP Mon Apr 20 10:43:12 EDT 2009
安裝篇 一、安裝Apache 安裝腳本如下: mkdir /usr/svn/ && cd /usr/svn/ 下載 httpd-2.2.17.tar.gz tar xvzf httpd-2.2.17.tar.gz && cd httpd-2.2.17 安裝 apr 現在在httpd-2.2.17目錄下。 cd srclib/apr ./configure -prefix=/usr/local/apr make make install 安裝 apr-util cd srclib/apr-util ./configure -prefix=/usr/local/apr-util -with-apr=/usr/local/apr make make install 回到httpd-2.2.17目錄下 ./configure -enable-dav -enable-so --prefix=/usr/local/apache2/ -with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util make make install 說明: 其中--enable-dav允許Apache提供DAV協議支持,--enable-so允許運行時加載DSO模塊,前兩個參數是必須要加的,你還可以根據您的需要添加其他的參數。這裏我們使用最簡的安裝模式. 啓動:/usr/local/apache2/bin/apachectl start 二、安裝SVN 下載 sqllite tar xvzf sqlite-amalgamation-3.6.13.tar.gz && cd sqlite-3.6.13 ./configure --prefix=/usr/local/sqlite make make install 下載 subversion-1.6.15.tar.gz tar xvzf subversion-1.6.15.tar.gz && cd subversion-1.6.15 ./configure --with-apxs=/usr/local/apache2/bin/apxs --prefix=/usr/local/subversion -with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-ssl --enable-maintainer-mode --with-sqlite=/usr/local/sqlite make make install 說明: 其中,--with-apxs 用於生成apache httpd的mod_dav_svn和mod_authz_svn模塊 三、創建 repository 假設我們把版本庫建立在/home目錄下,那麼執行mkdir repository新建版本庫文件夾,通過svnadmin create repository/test命令可創建名爲test的版本庫。若創建成功,則subversion的安裝便已成功完成。 具體操作步驟: groupadd svnroot useradd -g svnroot svnroot (紅色表示用戶組,黑色表示用戶名) passwd svnroot (鍵入svnroot的口令) # cd /home && mkdir svnroot && cd svnroot # mkdir repository # /usr/local/subversion/bin/svnadmin create repository/test 發現就會自動生成如下的幾個文件: conf dav db format hooks locks README.txt 四、導入源代碼 現在我們有了自已的一個版本庫了。現在就可以導入源代碼進來 目前我的目錄是:/home/svnroot/repository # ls Test 在這裏面我們再運行:mkdir -p import/{trunk,branches,tags} 此命令 就可以創建新的文件目錄層次出來即import目錄下面再包含三個子目錄出來! 下面的語句: /usr/local/subversion/bin/svn import /home/svnroot/repository/import file:///home/svnroot/repository/test/ -m "Init repository" 這條語句將把路徑/home/svnroot/repository/import下的目錄和文件導入到你創建的Subversion 倉庫中去, 運行此語句之後的輸出: 新增 /root/repository/import/trunk 新增 /root/repository/import/branches 新增 /root/repository/import/tags 提交後的版本爲 1。 五、版本庫所有者與權限修改 目前,repository目錄依然爲root用戶所有,默認權限爲755,爲了讓用戶能夠通過apache正常讀寫該目錄,我們需要先將該目錄以及該目錄的上層目錄svnroot的所有權交給svnroot用戶,然後爲了安全起見,將repository和svnroot目錄的權限都改爲700。 操作步驟: 第一步:打開apache配置文件/usr/local/apache2/conf/httpd.conf,確保將User和Group 設置爲 User svnroot Group svnroot 在最後新加 <Location /svn> DAV svn SVNParentPath /home/svnroot/repository/ AuthType Basic AuthName "Subversion Repository" AuthUserFile /home/svnroot/repository/pwdfile AuthzSVNAccessFile /home/svnroot/repository/authz Satisfy Any Require valid-user </Location> 其中/svn表示一個url的模式,匹配形如http://host/svn的url;SVNParentPath 指定的目錄下的所有項目都被subversion 認爲是合法的版本庫;AuthzSVNAccessFile爲授權文件;AuthType 則制定了客戶端身份認證機制,Basic表示http基本認證機制;AuthUserFile就是先前創建的密碼文件;Satisfy Any 和Require valid-user告訴apache所有用戶先使用匿名方式訪問版本庫,只有當訪問控制策略要求一個真實的用戶名時,apache纔會對客戶端進行身份驗證,這是使用得最多的一種授權方式。 第二步:進入/home目錄,修改svn倉庫的所有者 chown -R svnroot:svnroot svnroot chmod 700 root chmod 700 svnroot/repository 六、生成身份認證文件 身份認證文件保存用戶的用戶名和密碼,用於確定用戶身份。 命令: /usr/local/apache2/bin/htpasswd -cm /home/svnroot/repository/pwdfile test /usr/local/apache2/bin/htpasswd -m /home/svnroot/repository/pwdfile daiyanfei /usr/local/apache2/bin/htpasswd -m /home/svnroot/repository/pwdfile guolei /usr/local/apache2/bin/htpasswd -m /home/svnroot/repository/pwdfile zhouwenming /usr/local/apache2/bin/htpasswd -m /home/svnroot/repository/pwdfile daishuwei /usr/local/apache2/bin/htpasswd -m /home/svnroot/repository/pwdfile zhangwu /usr/local/apache2/bin/htpasswd -m /home/svnroot/repository/pwdfile zhangyueshan /usr/local/apache2/bin/htpasswd -m /home/svnroot/repository/pwdfile yuhaidong 說明: 其中-c表示創建身份認證文件,-m則表示密碼使用md5加密。 這樣就可以創建了一個用戶test 最後將pwdfile文件的所有者改爲svnroot並將其權限設置爲700 chown -R svnroot: svnrootpwdfile chmod 700 pwdfile 七、創建授權文件 其中,trunk表示主幹,branches則爲項目的分支,tags存放某個版本的快照。習慣上來說,大多數開發人的本地拷貝都來自truck目錄,所以每個開發人員都應有trunk目錄的讀寫權限,這樣他們才能正常的進行日常的開發;而分支目錄一般在,如某些開發人員需要大幅修改代碼以增加新功能,或者代碼進入較爲穩定的階段,開始bug去處工作等情況下使用,儘管這意味着這些代碼總是有固定的一個或幾個開發人員維護,但是基於“源代碼共同擁有”的原則,我們還是可以將其設置爲所有用戶具有讀寫權限;tags目錄則一般用於某個版本的發佈,比如當項目到達版本1834時,release1已經完成,那麼就可以將它複製到tags目錄,作爲一個快照存放,取一個好記得多的名字,比如release1(似乎應該只讓某些人有寫入權限,這樣可以防止快照被破壞,可是即使被破壞了又怎麼樣呢,不要忘了我們在使用一個版本管理軟件)。 根據authz文件的語法,我麼可以把上述的設置表達成這樣:(注意每個有效配置行的前面都不能有空格) vi /home/svnroot/repository/authz 把下面內容貼進去 (去掉//和註釋) [groups] //羣組設置 g_pm = micheal //某羣組裏的成員 g_dev = harry,sally [test:/] //倉庫test的根目錄的訪問權限 @g_pm = r //g_pm組用戶具有讀和寫權限,’@’開頭的表示羣組設置 @g_dev = r //g_dev用戶具有讀寫權限 [test:/trunk] //倉庫test的trunk目錄的訪問權限 @g_pm = rw //g_pm組用戶具有讀和寫權限,’@’開頭的表示羣組設置 @g_dev = rw //g_dev用戶具有讀寫權限 [test:/branches] //倉庫test的branches目錄下的訪問權限 @g_pm = rw //g_pm組用戶具有讀和寫權限,’@’開頭的表示羣組設置 @g_dev = rw //g_dev用戶具有讀寫權限 [test:/tags] //倉庫test的tags目錄下的訪問權限 @g_pm = rw //g_pm組用戶具有讀和寫權限,’@’開頭的表示羣組設置 @g_dev = rw //g_dev用戶具有讀寫權限 如果需要對某個用戶授權,可以這麼寫: [test:/branches] //倉庫test的branches目錄下的訪問權限 sally = r //sally用戶具有讀權限 編輯完成之後將此文件的權限變更過來 不要忘記將authz文件的所有者改爲svnroot,並且將其權限設爲700。 八、修改Apache配置文件 vi /usr/local/apache2/conf/httpd.conf 確保以下兩行已被subversion正確添加 LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so 最後,使用如下命令重啓apache httpd,打開瀏覽器訪問http://localhost/svn/test/這個URL便可訪問版本庫了,當然,受權限的限制,必須是合法用戶才能訪問且具有相應的權限的目錄。 安裝配置過程中常見的BUG: 添加一個我們的權限控制配置文件進來。這樣的話就可以限制哪個賬號對哪些目錄具備了什麼樣的操作權限了。非常方便哦!到時我們可以給一個開發的賬號與一個其上管理員的賬號信息出來! 在安裝軟件時,可能出現各種庫文件找不到的情況。。 如果是內部錯誤 vi /usr/local/apache2/logs/error_log 看看是否這裏不對