在RedHat9.0下安裝Subversion 1.4.2
阿新 • • 發佈:2019-02-14
使用了多年的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
因部門開發需要使用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/
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的依賴問題。可以參考:
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系統。好,上去查查,發現:
裡面有一個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