2011
Oct
25

安裝 svn client 之前,有一些必要的軟體要先安裝,其中包含 neon, sqlite, apr。

neon 安裝

neon 是一個能夠使得 svn 支援 http 下載網路資料的程式

--with-ssl 使 neon 可以支援 https 傳輸

檢查 neon 是否支援 ssl : /usr/local/bin/neon-config --support ssl ,如果有支援的話,就不會跳出錯誤。

SQLite 安裝


  • vim ~/.bash_profile 加上 PATH=$PATH:/usr/local/bin

APR : Apache Portable Runtime

  • 載點 http://apr.apache.org/download.cgi
  • ./configure --prefix=/usr/local/apr --bindir=/usr/local/bin --sbindir /usr/local/sbin --libdir=/usr/local/lib --includedir=/usr/local/include --mandir=/usr/local/share/man --enable-shared --enable-threads
  • make
  • sudo make install

SVN Client 安裝

Example
  1. [puritys]subversion-1.7.0$ ./configure --help |more
  2. `configure' configures subversion 1.7.0 to adapt to many kinds of systems.
  3. --bindir=DIR user executables [EPREFIX/bin]
  4. --sbindir=DIR system admin executables [EPREFIX/sbin]
  5. --libexecdir=DIR program executables [EPREFIX/libexec]
  6. --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
  7. --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
  8. --localstatedir=DIR modifiable single-machine data [PREFIX/var]
  9. --libdir=DIR object code libraries [EPREFIX/lib]
  10. --includedir=DIR C header files [PREFIX/include]
  11.  

將安裝目錄指定到 /home/proogram/svn

bin執行檔指定安裝到 /usr/local/bin

sbin執行檔指定安裝到 /usr/local/sbin

library指定安裝到 /usr/local/lib

sqlite 指定已安裝的目錄 /home/program/SQLite

neon 指定已安裝的目錄 /usr/local (PATH = $PREFIX/bin/neon-config , 因為 neon 執行檔我裝在 /usr/local/bin裡,所以這裡的路徑要這樣設)

  • ./configure --prefix=/usr/local/svn --bindir=/usr/local/bin --sbin=/usr/local/sbin --libdir=/usr/local/lib --includedir=/usr/local/include --mandir=/usr/local/share/man --with-neon=/usr/local --with-sqlite=/usr/local --with-apr/usr/local --with-apr-util=/usr/local
  • make
  • sudo make install
  • vim ~/.bash_profile 加上 PATH=$PATH:/usr/local/bin

等個幾分鐘就裝好囉,試玩一下吧(有點....久)

Example
  1. svn co http://xx
  2. svn up
  3. svn ci -m "xx"
  4. svn delete file
  5. svn add file

svn 檢查是否安裝成功

用 svn --version ,檢查一下module是否都有裝成功進去,剛剛我裝了 ra_neon, ra_svn ,ra_local 三個modules。

Example
  1. [puritys]SQLite$ svn --version
  2. svn, version 1.7.0 (r1176462)
  3. compiled Oct 25 2011, 23:51:11
  4.  
  5. Copyright (C) 2011 The Apache Software Foundation.
  6. This software consists of contributions made by many people; see the NOTICE
  7. file for more information.
  8. Subversion is open source software, see http://subversion.apache.org/
  9.  
  10. The following repository access (RA) modules are available:
  11.  
  12. * ra_neon : Module for accessing a repository via WebDAV protocol using Neon.
  13. - handles 'http' scheme
  14. * ra_svn : Module for accessing a repository using the svn network protocol.
  15. - with Cyrus SASL authentication
  16. - handles 'svn' scheme
  17. * ra_local : Module for accessing a repository on local disk.
  18. - handles 'file' scheme
  19.  

其他錯誤訊息

「svn: E170000: Unrecognized URL scheme forsvn: E170000: Unrecognized URL scheme for」 : neon,apr apr-util 其中之一沒裝成功

configure: error: Subversion requires SQLite ,殘念!! 如果你看到這個訊息,就是你沒有裝 SQLite 喔,或是沒有指定 SQLite 路徑。

svn server

在裝 svn server 之前,你必須先裝 web server ,也就是 apache ,因為svn server 是透過 https protocol 來傳輸資料, apache 的安裝設定可以參考 「這裡」。

svn server :其實和 svn client 差不多,只差在 apache module,在安裝 svn server 之前,必須先把 svn client 裝起來,然後再編譯 apache module ,這樣 svn server 就可以使用了。

svn server 所須要的資料,就是 svn client 所抓下來的檔案,兩邊的程式是放在一起的,在裝 apache svn module前,要先把 c 語言的 header 檔複製到正確的地方。

另外必須先安裝 apache mod_dav module ,這個 module 可以在 apache 下載的壓縮解中找到。

安裝 mod_dav

用 apxs 就可以簡單的安裝成功了,若安裝時發生以下的錯誤,意思是說 module 的名稱沒有被定義,所以我們用 -n dav_mod ,給他一個名字就可以了。

apxs:Error: Sorry, cannot determine bootstrap symbol name.

apxs:Error: Please specify one with option `-n'.

  • cd apache/dav/main
  • apxs -c -n dav_mod -i mod_dav.c
  • apache cond 加上 LoadModule dav_module modules/mod_dav.so

如果上述的安裝方式,在 restart apache 時有 error 的話,可以考慮另一種安裝方式,就是使用 apache 的 configure 方式去安裝。

  • cd apache
  • ./configure --enable-dav=shared
  • make
  • sudo cp modules/dav/main/.libs/mod_dav.so (apache_path)/modules/
  • apache cond 加上 LoadModule dav_module modules/mod_dav.so

安裝 mod_dav_svn

這個 apache module 在 svn 下載回來的檔案中,就可以找到,路徑在 「 svn/subversion/mod_dav_svn 」,這裡重新再編譯一次 svn 的資料,打開 svn server 的一些設定。

  • cd svn
  • make clean
  • ./configure --prefix=/home/program/svn --bindir=/usr/local/bin --sbin=/usr/local/sbin --libdir=/usr/local/lib --with-sqlite=/home/program/SQLite --with-neon=/usr/local --with-apr=/home/program/apache/bin/apr-1-config --with-apxs=/home/program/apache/bin/apxs --with-apr-util=/home/program/apache/bin/apu-1-config --with-ssl --enable-mod-activation
  • make

按著跳過安裝步驟 (make install),我們直接把需要的檔案複製到正確的位置即可,這裡我們會用到兩個 module : mod_dav_svn.so , mod_authz_svn.so ,以及一些 header 檔。

  • cp -r svnpath/subversion/include /usr/include/ :複製 svn 會用到的 header 檔到 /usr/include/
  • sudo cp subversion/mod_dav_svn/.libs/mod_dav_svn.so /home/program/apache/modules/
  • sudo cp subversion/mod_authz_svn/.libs/mod_authz_svn.so /home/program/apache/modules/
  • apache cond 加上 LoadModule dav_svn_module modules/mod_dav_svn.so
  • apache cond 加上 LoadModule authz_svn_module modules/mod_authz_svn.so

安裝完程後就可以開始使用 svn 的功能了。

  • svnadmin create /repository : 建立 server 的 svn 路徑
  • 編輯 /repository/conf/svnserve.conf ,將下列的資料 unmark,注意開頭不能有空白
    • anon-access = read
    • auth-access = write
    • password-db = passwd
    • realm = My First Repository
  • 啟動 svn : svnserve -t -r /repository

這時你有了一空的 svn repository,使用 「svn import xxxdir svn+ssh://localhost/repository/xxxdir -m "Add new file"」將 xxxdir 新增到 svn server。


上傳成功後,就能用 svn co 抓下剛剛 commit 的資料夾,因為我將 client 與 server 都裝在 localhost ,所以我只要下指令 svn co svn+ssh://localhost/repository ,就可以抓下 svn server 的資料,接著我隨便建立幾個檔案之後,再輸入 svn ci -m " initial " ,將資料 commit 到 svn server。

雖然資料已經存到 svn server 了,不過去查看 /repository 的資料結構後,發現裡面的內容還蠻複雜的,沒辦法輕鬆的管理,其實 svn 是有提供 web manager 線上查看資料夾的,所以我修改 apache conf 加上內容如下。

Example
  1. LoadModule dav_module modules/mod_dav.so
  2. LoadModule dav_svn_module modules/mod_dav_svn.so
  3. LoadModule authz_svn_module modules/mod_authz_svn.so
  4. <Location /svn>
  5. DAV svn
  6. SVNPath /repository
  7. </Location>

加上上面的設定之後,再重啟 apache ,然後就可以在 http://localhost/svn 看到 svn server 的資料內容囉。


svn web manage

svn: Can't open file '/repository/db/txn-current-lock': Permission denied

如果有這個錯誤訊息,代表你對資料夾沒有讀取的權限,使用 chmod 或是 chown 修改權限即可。

svnserve.conf:19: Option expected

svnserve.conf 中的設定有錯誤,每一行的最前面不能有空白

相關資料


回應 (Leave a comment)