在 Linux/Apache 2.2 上配置SVN伺服器

來源:互聯網
上載者:User
文章目錄
  • * 準備,下載所需要檔案.
  • * 下載neon庫,使svn支援webdav,https加密的連結.(下載並重新命名即可,subversion會自動監測並配置),目前只支援 0.25.5.
  • * 檢查已安裝的 Apache2 是否已經安裝了 mod_dav .
  • * 編譯SVN,遇到的問題和解決方案.
  • * 配置Apache和SVN,測試
  • * 其它小結

自己裝svn,rpm包沒有安裝成功,所以源碼編譯安裝。遇到很多困難。網上搜尋了很多文章,這篇最好。轉下了。

原帖:

http://blog.yening.cn/2006/08/07/165.html

在 Linux/Apache 2.2 上配置SVN伺服器Posted in 2006/08/07 ¬ 12:30h.Onion2 Comments »
  • 準備,下載所需要檔案.
  • 檢查已安裝的 Apache2 是否已經安裝了 mod_dav .
  • 編譯SVN,遇到的問題和解決方案
    • 使用 預設檔案系統(fsfs) 儲存資料
    • 使用 Berkeley DB 儲存資料
  • 配置Apache和SVN,測試.
  • 其它小結
    • 從Windows平台上資料轉移
    • 設定檔,使用其支援對檔案中的 $Id$ 標籤每次提交的時候自動更新版本資訊.
    • 基於路徑的許可權控制
    •  

    • 常用SVN命令
  • 相關資源

* 準備,下載所需要檔案.

本文測試環境:

  • ubuntu 6.06 LTS (kernel 2.6.15-25-k7,gcc-4.0.3) /ubuntu server (2.6.15-26-server,gcc-4.0.4)
    Subversion 1.3.2/1.4.2
    Apache 2.2.2/2.2.3
    GCC 4.1.2

    最新的版本 Subversion 可以在這裡找到 :http://subversion.tigris.org/project_packages.html

    * 下載neon庫,使svn支援webdav,https加密的連結.(下載並重新命名即可,subversion會自動監測並配置),目前只支援 0.25.5.

     

    cd subversion-SVN-LAST-VERSION-DIR
    wget http://www.webdav.org/neon/neon-0.25.5.tar.gz
    tar xzf neon-0.25.5.tar.gz
    mv neon-0.25.5 neon* 檢查已安裝的 Apache2 是否已經安裝了 mod_dav .

    如果已經成功安裝了Apache,使用 httpd -M 來查看有沒有安裝 dav_module,如果沒有的話 必須附加 ‘–enable-dav’ ‘–enable-dav-fs’ 兩個參數重新編譯 Apache,否則即使編譯通過了svn,apache也會啟動不起來.

    如何編譯 Apache 請參考我另外一篇文章.

    * 編譯SVN,遇到的問題和解決方案.使用預設的檔案系統儲存資料.

    最終完整通過安裝和測試的編譯參數為:

    ./configure --with-apxs=/usr/local/apache2/bin/apxs /
    --with-apr=/home/src/server/httpd-2.2.2/srclib/apr /
    --with-apr-util=/home/src/server/httpd-2.2.2/srclib/apr-util
    --–with-ssl
    make
    make install

    其中 /home/src/server/ 為 httpd-2.2.2 原始碼所在檔案夾,根據實際情況調整一下.

    ◆ 遇到問題:

    1) --with-apr 和 --with-apr-util 如果沒有加上的話,即使編譯成功了也會出現

    Can’t set position pointer in file ‘/home/svn/repos/db/revs/0′: Invalid argument

    這樣的錯誤提示.

    2) 暫時不能使用 Berkeley DB [* 已解決]

    svn儲存檔案更新資料庫的方法有兩個,一種是直接使用 fs (filesystem)來儲存,另一種是通過Oracle提供支援的開來源資料庫 Berkeley DB 進行儲存。但是如果加上 –with-berkeley-db=/usr/local/BerkeleyDB.4.4 就會configure時就會報錯.

    configure: error: APR-UTIL was installed independently, it won’t be
    possible to use the specified Berkeley DB: /usr/local/BerkeleyDB.4.4

     

    我想 apr-unit 暫時不支援吧,我們就用預設的fs好了.

    3) 在make 的時候可能會遇到缺少 srclib/apr/libapr-1.la,srclib/apr-util/libaprutil-1.la 兩個檔案,找不到而make error.

    解決辦法:/usr/local/apache2/lib/ 中找到,將其複製到原始碼檔案夾相應的位置中.

    Update!!

    使用 BerkeleyDB 儲存資料.

    1) 安裝 BerkeleyDB

    cd /usr/local/src
    wget http://downloads.sleepycat.com/db-4.3.29.tar.gz

     

    tar xzvf db-4.3.29.tar.gz
    cd /usr/local/src/db-4.3.29/build_unix
    ../dist/configure --enable-compat185
    make
    make install

    2) 更新apr和apr-util原始碼

    # 清理編譯後的.la檔案
    cd /usr/local/src/httpd-2.2.3

     

    make clean

    cd /usr/local/src/subversion-1.3.2
    rm -rf apr
    rm -rf apr-util
    cp -rf /usr/local/src/httpd-2.2.3/srclib/apr ./
    cp -rf /usr/local/src/httpd-2.2.3/srclib/apr-util/ ./

    3) 編譯安裝

    ./configure --with-apxs=/usr/local/apache2/bin/apxs /
    --with-berkeley-db=/usr/local/BerkeleyDB.4.3 /
    --with-ssl
    make
    make install

    ◆ 遇到問題:
    1) BerkeleyDB 版本不能大於 4.3.否則同樣會出現以下錯誤.

    configure: error: APR-UTIL was installed independently, it won’t be
    possible to use the specified Berkeley DB: /usr/local/BerkeleyDB.4.4

    主要是apr-util 暫時不支援4.4的版本.

    2) 必須更新apr,apr-util 原始碼.
    subversion-1.3.2 內建的 apr-util 的版本是0.9.6的,必須升級為 1.2.7 雖然能編譯過去。但在 svn checkout 的時候會提示

    svn: REPORT request failed on ‘/!svn/vcc/default’
    svn: REPORT of ‘/!svn/vcc/default’: Could not read status line: connection was closed by server.

    這個問題困擾了我很長時間,Google和官方論壇都無結果。後來昨天竟然自己無意中解決了,感動的得哭了:)

    * 配置Apache和SVN,測試

    成功編譯svn後會在 httpd.conf 中自動加上

    LoadModule dav_svn_module modules/mod_dav_svn.so
    LoadModule authz_svn_module modules/mod_authz_svn.so

    兩個模組,沒有的話,自行加上或檢測是否真的編譯成功.

    假設我們現在要將一個名為 Lair 的項目匯入到 SVN中

    1). Apache的配置

    在 conf/httpd.conf 或 conf/extra/httpd-vhosts.conf 中加入

    <Location /svn/Lair>

     

    DAV svn
    SVNPath /home/svn/Lair
    </Location>

    可以參考以下apache的配置,實現資料加密傳輸,使用者身分識別驗證.

    Listen 443

     

    AddType application/x-x509-ca-cert .crt
    AddType application/x-pkcs7-crl .crl.

    SSLPassPhraseDialog exec:/etc/sendsslpwd
    SSLSessionCache shmcb:/usr/local/apache2/logs/ssl_scache(512000)
    SSLSessionCacheTimeout 300
    SSLMutex file:/usr/local/apache2/logs/ssl_mutex

    <VirtualHost _default_:443>
    DocumentRoot /var/SVNRoot
    ServerName svn.yousite.com:443
    ServerAdmin webmaster@yousite.com
    <Location />

    DAV svn
    SVNPath /var/SVNRoot
    AuthzSVNAccessFile /etc/svnserve.conf
    Satisfy Any
    AuthType Basic
    AuthName “yousite SVN Repository”
    AuthUserFile /etc/httpd-passwords.txt
    Require valid-user

    </Location>
    SSLEngine on
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    SSLCertificateFile /etc/ssl/server.crt
    SSLCertificateKeyFile /etc/ssl/server.key

    </VirtualHost>

    更詳細的配置說明文檔 http://svnbook.red-bean.com/nightly/en/svn.ref.mod_dav_svn.conf.html

    2). 配置,並且測試SVN,

    建立一個新使用者,用了儲存倉庫.

    useradd -m svn

    建立一個新模組

    su daemon (apache是以daemon使用者啟動並執行,所以要切換身份,否則可能會報目錄存取權限錯誤)
    svnadmin create --fs-type fsfs /home/svn/Lair

    匯入原來的項目

    svn import /var/www/Lair http://localhost/svn/Lair -m ‘Initial import’

     

    重建立立工作目錄

    rm -rf /var/www/Lair (注意備份!!)
    svn checkout http://localhost/svn/Lair

    測試開啟 http://localhost/svn/Lair

    如能看到一個你項目錄列表,說明您成功了。

    * 其它小結

    ■ 資料轉移:

    從 Windows 平台 SVN 伺服器轉移
    如果windows svn儲存的格式也是dbd的話,直接將SVN的檔案夾copy過來即可.然後
    執行 svnadmin recover /var/SVNRoot 檢查一下資料庫是否損壞.

    最後注意許可權,確保 db 目錄下的所有檔案能被apache讀寫(留意httpd.conf中的 User 和 Group)。

    chmod 755 db
    chmod 666 db/*

    否則checkout時出現以下錯誤,多數是因為 檔案或者目錄許可權問題 引起的,可以嘗試用 chown 或者 chmod 命令修改一下許可權

    <m:human-readable errcode=”160029″>

     

    Could not open the requested SVN filesystem
    </m:human-readable>

    <m:human-readable errcode=”13″>
    Could not open the requested SVN filesystem
    </m:human-readable>

    Can’t open activity db: APR does not understand this error code

    另外一種方法沒有測試過,原理大致和mysqldump一樣,將svn匯出為文字檔,然後重新匯入,好處是可以避免因為儲存格式不同而導致的資料轉移困難。

    # dump data to file (assuming a repo @ c:/repo):

     

    svnadmin dump c:/repo > c:/repo.txt
    # Copy the file over to linux:
    mkdir /repo
    svnadmin create /repo
    svnadmin load /repo < /repo.txt

    ■ 設定存取控制

    當 httpd.conf 中 設定 AuthzSVNAccessFile 時,可以設定不同使用者對不同目錄的存取控制.以下是一個例子.

    [groups]
    root = admin.root
    web = user1,user2
    soft = user3,user4

     

    [/]
    @root = rw

    [/www]

    @web = rw

    [/soft]
    @soft = rw

    一個更複雜的許可權控制例子:

    [groups]
    root = user1,user2
    web = user3,user4,user5,user6
    art = user7,user8,user9,user6
    blog = user10,user11

    # 所有的對 根路徑 有讀寫權限而不是具體的某個庫,例如 192.168.1.56/svn/ 下 有 trunk,tag,release 三個庫,
    則組內成員都對於這三個庫具有讀寫權限.
    [/]
    @root = rw
    @web = rw

     

    # 指定某個庫(trunk)的存取權限
    [trunk:/lib/Lair]
    @blog = rw

    # user5 將對目錄有任何許可權,雖然他繼承根路徑
    [trunk:/apps/views/blog]
    @blog = rw
    user5 =

    [trunk:/apps/views/myblog]
    @blog = rw
    user5 =

    [trunk:/www]
    @art = rw
    @blog = rw

    [trunk:/apps/views]
    @art = rw

    詳細的說明文檔:http://svnbook.red-bean.com/nightly/en/svn.serverconfig.httpd.html

    ■ 設定檔,使用其支援對檔案中的 $Id$ 標籤每次提交的時候自動更新版本資訊(自動屬性).

    Windows : C:/Documents and Settings/%USERNAME%/Application Data/Subversion/config
    Linux : ~/.subversion/config

    [miscellany]

     

    enable-auto-props = yes
    [auto-props]
    *.php=svn:keywords=Id
    *.html=svn:keywords=Id

    >> 關於自動屬性的更進階討論

    ■ 幾條常用svn 命令
    svn update
    svn add “filename”
    svn commit

    ———————–
    Change Log:

    • 2007-06-14 httpd-2.2.4,subversion-1.4.4,BDB-4.3,下通過.neno 還是不能使用0.2.6的,否則根據沒有辦法 checkout http 協議開頭的URL.
    • 2007-01-03 修正關於neno庫的安裝說明,以上配置可以最新版本的 httpd-2.2.3,subversion-1.4.2,BDB-4.3下通過.
    • 2006-08-14 neon庫subversion已經內建,不需要在單獨安裝,添加-with-ssl即可使用svn對ssl支援.
    • 2006-08-10 補充自動屬性的說明.
    • 2006-08-08 加入關於目錄訪問驗證的說明.
    • 2006-08-07 httpd,2.2.3測試依然有效,解決bdb資料庫的支援問題,添加從Windows到Linux下的資料轉移方案。
    • 2006-07-25 看到到.聲仔對 Can’t set position pointer in file 另一種解決方案,我當時也測試了,好像沒有成功。不想用apache原始碼編譯的朋友可以也測試一下
    • 2006-07-09 初稿.

    ———————–
    參考:

    • http://subversion.tigris.org/faq.html [FAQ]
    • http://svnbook.red-bean.com/ [文檔]
    • http://www.svnforum.org/ [論壇]
    • http://d.hatena.ne.jp/cooldaemon/searchdiary?word=%2a%5bSubversion%5d
    • http://artis.imag.fr/~Xavier.Decoret/resources/svn/index.html
    • http://www.germane-software.com/~ser/R_n_R/subversion.html#ftn.N45
    • http://zen.sh.nu/book/zh/index.html
  • Linux
    相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.