Mac上安裝svn+http訪問(編譯subversion,serf,apr,apr-util,httpd)
關於作者:
程式設計師:楊洪(ellende)
blog: http://blog.csdn.NET/ellende
email: [email protected]
轉載請註明出處,引用部分網上部落格,若有侵權還請作者聯絡與我。
1.前言
這裡只說明如何配置mac通過Apache訪問svn倉庫,不具體說明如何建立svn倉庫和使用方法。花了2天終於搞定了http訪問,需要自己編譯subversion生成mod_dav_svn.so和mod_authz_svn.so兩個庫,以及編譯httpd生成對應支援dav svn的apache執行檔案。
2.下載subversion
因Mac用brew install subversion後,沒有
用svn下載:
3.配置編譯subversion
先下載依賴包:
cd subversion
./get-deps.sh
執行之後當前資料夾下面多出了apr, apr-util, zlib, serf, sqlite-amalgamation幾個件夾,其中apr,apr-util,zlib為subversion必需依賴包,系統中可能已安裝,但版本可能不匹配(尤其是apr,apr-util)。
也會提示下載httpd-2.4.10,不過我試了這個版本不可行,下載了httpd-2.4.33
若沒有自動下載apr和apr-util包,可以用下面連結:
接下來配置安裝apr包:
cd apr
./configure --prefix=/usr/local/opt/apr-svn
make clean
make && make install
cd ..
再配置安裝apr-util包:
cd apr-util
./configure --prefix=/usr/local/opt/apr-util-svn --with-apr=/usr/local/opt/apr-svn
make clean
make && make install
cd ..
若要svn支援http訪問,需要安裝serf。
openssl用
配置編譯serf:
cd serf-1.3.9
scons APR=/usr/local/opt/apr-svn PREFIX=/usr/local/opt/serf-1.3.9 APU=/usr/local/opt/apr-util-svn OPENSSL=/usr/local/Cellar/openssl/1.0.2l/
安裝serf:
sudo scons install
再執行autogen.sh檢查編譯的工具是否齊全:
cd subversion
./autogen.sh
buildcheck: checking installation...
buildcheck: autoconf version 2.69 (ok)
buildcheck: autoheader version 2.69 (ok)
buildcheck: libtool version 2.4.6 (ok)
由於我Mac電腦沒有libtool,我用brew install libtool安裝完成。
這裡原以為可以直接配置和編譯了subversion,結果發現需要匹配httpd進行編譯,對應的httpd需要支援mod_dav_svn功能。於是下載httpd-2.4.33版本,編譯apache可執行檔案。
下載httpd:
配置httpd:
cd httpd-2.4.33
./buildconf --with-apr=../subversion/apr --with-apr-util=../subversion/apr-util
這裡需要指定apr和apr-util的包,就是subversion自動下載的兩個包檔案。
再配置httpd:
./configure --enable-dav --enable-so --with-apr=/usr/local/opt/apr-svn --with-apr-util=/usr/local/opt/apr-util-svn --enable-deflate --enable-expires --enable-headers
這裡--enable-dav開啟mod dav功能,--enable-so支援動態庫
編譯httpd:
make clean
make && make install
編譯完成後會在/usr/local/apache2下生成可執行檔案。提示:編譯過程會有個標頭檔案引用錯誤,將該標頭檔案引用去掉即可。
這下終於可以編譯subversion了。
配置subversion:
cd subversion
./configure --prefix=/usr/local/opt/svn --with-apr=/usr/local/opt/apr-svn --with-apr-util=/usr/local/opt/apr-util-svn --with-apxs=/usr/local/apache2/bin/apxs --with-serf=/usr/local/opt/serf-1.3.9
這裡需要--with-apxs=指定apache可執行檔案apxs,這個指令會生成需要的兩個.so檔案,如果用Mac系統自帶的apache測試不可用(即--with-apxs=/usr/local/bin/apxs),所以用自己編譯的apache檔案。--with-serf是上面編譯好的路徑,支援http協議訪問。
編譯subversion:
make clean
make && make install
編譯完成後會拷貝本地生成的兩個.so在/usr/local/opt/svn/libexec下,即mod_dav_svn.so和mod_authz_svn.so。
測試svn編譯是否正確:
svn --version
顯示如下:
svn, version 1.11.0-dev (under development)
compiled Apr 27 2018, 22:29:45 on x86_64-apple-darwin17.4.0
The following repository access (RA) modules are available:
* 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
* ra_serf : Module for accessing a repository via WebDAV protocol using serf.
- using serf 1.3.9 (compiled with 1.3.9)
- handles 'http' scheme
- handles 'https' scheme
說明支援http和https協議訪問svn倉庫。
4.配置apache對應的svn支援http訪問
在/usr/local/apache2/conf下,修改httpd.conf檔案:
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
新增兩行:
LoadModule dav_svn_module /usr/local/opt/svn/libexec/mod_dav_svn.so
LoadModule authz_svn_module /usr/local/opt/svn/libexec/mod_authz_svn.so
末尾追加內容:
<Location /svn>
DAV svn
SVNParentPath /Users/ellende/SvnService
# Limit write permission to list of valid users.
<LimitExcept GET PROPFIND OPTIONS REPORT>
# Require SSL connection for password protection.
# SSLRequireSSL
AuthType Basic
# 使用基本認證方式,即使用者名稱、密碼認證
AuthName "Authorization Realm"
# 在認證對話方塊中出現的提示資訊
AuthUserFile /Users/ellende/SvnConfig/svnusers.conf
# 指定存放使用者名稱資訊的檔案路徑
AuthzSVNAccessFile /Users/ellende/SvnConfig/svnaccess.conf
# 指定存放使用者訪問路徑資訊的檔案路徑
Require valid-user
# 限定只有使用者輸入正確的使用者名稱和密碼後才能訪問該標籤所指向的路徑
</LimitExcept>
</Location>
在/Users/ellende/SvnService下建立svn版本倉庫,在/Users/ellende/SvnConfig下建立兩個配置檔案svnusers.conf和svnaccess.conf,建立方法可以參考網友的連結:
https://blog.csdn.net/yin380697242/article/details/49587267
我的svnaccess.conf配置為:
[groups]
g_admin=admin,ellende
[/]
*=r
[learn_library:/]
*=r
@g_admin=rw
這裡的learn_library是我在/Users/ellende/SvnService下建立的svn倉庫。
配置完成後,重啟apache:
/usr/local/apache2/bin/apachectl restart
如果啟動apache/usr/local/apache2/logs下檢視error_log什麼原因導致。
5.總結
為了搞定mac下的svn+http訪問,真是坎坷萬分,網上沒有相關資料,如果覺得有用,就給我點贊吧!