1. 程式人生 > >在RedHat9.0下安裝Subversion 1.4.2

在RedHat9.0下安裝Subversion 1.4.2

使用了多年的CVS,苦來酸甜都嚐遍。一直垂涎subversion,卻沒有機會。而今機緣巧合得以在部門內推廣subversion, 不亦悅乎。

因部門開發需要使用RedHat9.0,伺服器一直使用這個版本的linux沒有升級。9.0自帶的subversion版本太低(0.17.1),需要升級到1.4.2。本人較懶,不願意從原始碼安裝subversion(一堆編譯選項,安裝位置等等的選擇,甚煩)。好在subersion的fans已經為咱做了準備,有現成的rpm包可以使用。不過天下也沒免費的午餐,小小問題還是要自己動手解決的 : )

1. 獲取subersion的red hat 9.0的rpm包。
    從http://the.earth.li/pub/subversion/summersoft.fay.ar.us/pub/subversion/latest/redhat-9.0/bin/
這裡獲取現成的rpm包。每個包只取最高版本的即可。

2. 解除安裝9.0自帶的包
    rpm -e subversion-devel subversion
    rpm -e mod_auth_mysql mod_auth_pgsql
   注意: 後兩個apahce的模組,在我們拿到的rpm包裡沒有更新的版本可用。本人的工作不會涉及到使用這兩個包的情況,沒有去找更新的包來安裝。

3. 安裝和升級下載的rpm包。
    9.0自帶的使用rpm -Uvh 命令升級,其餘的可以使用rpm -ivh安裝。升級httpd時,需要把幾個相關的mod放在一條命令裡一起升級。否則會報幾個httpd-mmn的依賴問題。可以參考:
   
http://www.redhat.com/archives/shrike-list/2003-May/msg00724.html


4. 配置subversion
    1)建立svn倉庫
          svnadmin create --fs-type fsfs /path/to/your/repos

    2)import一個project
          建立project的目錄結構並匯入:
          svn import --message "Initial import" myproj file:///path/to/your/repos/myproj

    3)配置subversion的web訪問
          在/etc/httpd/conf.d下有一個subversion.conf檔案,去掉其中的註釋,稍作修改即可為我所用:
          # Needed to do Subversion Apache server.
          LoadModule dav_svn_module     modules/mod_dav_svn.so

          # Only needed if you decide to do "per-directory" access control.
          LoadModule authz_svn_module   modules/mod_authz_svn.so

        #
        # Settings for Subversion Repository
        #
        <Location /repos>
            DAV svn
            SVNPath /path/to/your/repos
            AuthzSVNAccessFile /path/to/your/repos/svn-authz-access
            AuthType Digest
            AuthName "Subversion"
            AuthDigestDomain /repos/
            AuthDigestFile /path/to/your/repos/svn-auth-file
            Require valid-user
        </Location>

        設定目錄訪問許可權,首先設為我自己可用,其餘人只讀,做個測試。
        svn-authz-access:
        [/]
        * = r
        linuxnewer = rw
      
        設定digest方式的使用者名稱密碼
        htdigest -c /path/to/your/repos/svn-auth-file Subversion linuxnewer


OK.至此安裝和配置已經完成,啟動http服務試驗一下。
    /etc/rc.d/init.d/httpd start
web瀏覽器訪問正常,大喜。
用命令列訪問:
   svn co http://localhost/repos/myproj
輸入使用者名稱,密碼,結果抱錯:
   svn: REPORT 請求 “/repos/!svn/vcc/default”失敗
   svn: Not authorized to open root of edit operation
看來還用費點兒功夫。

6. 解決最後的問題
    google一下出錯資訊,蛛絲馬跡頗多,仔細尋找發現是digest模組的問題,且該問題已被提交到apchace的bug track系統。好,上去查查,發現:
           
http://issues.apache.org/bugzilla/show_bug.cgi?id=25040

裡面有一個digest模組的patch,喜出望外。

    從http://the.earth.li/pub/subversion/summersoft.fay.ar.us/pub/subversion/latest/redhat-9.0/src/取回httpd的原始碼包,安裝rpm -ivh。
    把找到的patch放在/usr/src/redhat/SOURCES下,命名為httpd-2.0.48-digest.patch。
    修改spec檔案:在/usr/src/redhat/SPEC/httpd.spec中新增
              Patch37: httpd-2.0.48-digest.patch
              %patch37 -p1 -b .digest
具體的位置,參考原spec檔案,和相關的內容放在一起就可以了。

    編譯,rpmbuild -bc。成功。
    把/usr/src/redhat/BUILD/httpd-2.0.48/worker/modules/aaa/.libs/mod_auth_digest.so拷貝到/usr/lib/httpd/modules下覆蓋原檔案。
    重起http服務,web頁面訪問OK,命令列訪問OK。狂喜。

7. 與此問題相關的一些連結
     http://issues.apache.org/bugzilla/show_bug.cgi?id=25040
     http://subversion.tigris.org/issues/show_bug.cgi?id=1608
     http://subversion.tigris.org/servlets/ReadMsg?list=dev&msgNo=50861
     http://subversion.tigris.org/faq.html