安裝 svn client 之前,有一些必要的軟體要先安裝,其中包含 neon, sqlite, apr。
neon 安裝
neon 是一個能夠使得 svn 支援 http 下載網路資料的程式
- 載點 http://en.sourceforge.jp/projects/sfnet_buluoos/downloads/0.3/src/neon-0.29.6.tar.gz/
- ./configure --prefix=/usr/local/neon --bindir=/usr/local/bin --sbin=/usr/local/sbin --libdir=/usr/local/lib --includedir=/usr/local/include --mandir=/usr/local/share/man --with-ssl
- make
- sudo make install
--with-ssl 使 neon 可以支援 https 傳輸
檢查 neon 是否支援 ssl : /usr/local/bin/neon-config --support ssl ,如果有支援的話,就不會跳出錯誤。
SQLite 安裝
- 載點 http://www.sqlite.org/sqlite-autoconf-3070800.tar.gz
- ./configure --prefix=/usr/local/sqlite --bindir=/usr/local/bin --sbin=/usr/local/sbin --libdir=/usr/local/lib --includedir=/usr/local/include --mandir=/usr/local/share/man
- make
- sudo make install
- 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 安裝
- 載點 http://apache.cdpa.nsysu.edu.tw/subversion/
- 檢查一下有那些configure 可以用
- [puritys]subversion-1.7.0$ ./configure --help |more
- `configure' configures subversion 1.7.0 to adapt to many kinds of systems.
- --bindir=DIR user executables [EPREFIX/bin]
- --sbindir=DIR system admin executables [EPREFIX/sbin]
- --libexecdir=DIR program executables [EPREFIX/libexec]
- --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --libdir=DIR object code libraries [EPREFIX/lib]
- --includedir=DIR C header files [PREFIX/include]
將安裝目錄指定到 /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
等個幾分鐘就裝好囉,試玩一下吧(有點....久)
- svn co http://xx
- svn up
- svn ci -m "xx"
- svn delete file
- svn add file
svn 檢查是否安裝成功
用 svn --version ,檢查一下module是否都有裝成功進去,剛剛我裝了 ra_neon, ra_svn ,ra_local 三個modules。
- [puritys]SQLite$ svn --version
- svn, version 1.7.0 (r1176462)
- compiled Oct 25 2011, 23:51:11
- Copyright (C) 2011 The Apache Software Foundation.
- This software consists of contributions made by many people; see the NOTICE
- file for more information.
- Subversion is open source software, see http://subversion.apache.org/
- The following repository access (RA) modules are available:
- * ra_neon : Module for accessing a repository via WebDAV protocol using Neon.
- - handles 'http' scheme
- * ra_svn : Module for accessing a repository using the svn network protocol.
- - with Cyrus SASL authentication
- - handles 'svn' scheme
- * ra_local : Module for accessing a repository on local disk.
- - handles 'file' scheme
其他錯誤訊息
「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 加上內容如下。
- LoadModule dav_module modules/mod_dav.so
- LoadModule dav_svn_module modules/mod_dav_svn.so
- LoadModule authz_svn_module modules/mod_authz_svn.so
- <Location /svn>
- DAV svn
- SVNPath /repository
- </Location>
加上上面的設定之後,再重啟 apache ,然後就可以在 http://localhost/svn 看到 svn server 的資料內容囉。
svn: Can't open file '/repository/db/txn-current-lock': Permission denied
如果有這個錯誤訊息,代表你對資料夾沒有讀取的權限,使用 chmod 或是 chown 修改權限即可。
svnserve.conf:19: Option expected
svnserve.conf 中的設定有錯誤,每一行的最前面不能有空白