关于作者:
程序员:杨洪(ellende)
blog: http://blog.csdn.NET/ellende
email: yangh.personal@qq.com
转载请注明出处,引用部分网上博客,若有侵权还请作者联系与我。
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后,没有mod_dav_svn.so和mod_authz_svn.so的库,所以我选择下载subversion源代码编译生成该两个库。
用svn下载:
svn co http://svn.apache.org/repos/asf/subversion/trunk/ subvesion
具体编译方法可阅读http://svn.apache.org/repos/asf/subversion/trunk/INSTALL,我就是琢磨这个文档一步一步编译库的。
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包,可以用下面链接:
http://archive.apache.org/dist/apr/ 选择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。
http://archive.apache.org/dist/serf/ 选择serf-1.3.9.tar
openssl用brew install openssl安装即可,scons用brew install scons安装即可。
配置编译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:
http://archive.apache.org/dist/httpd/ 选择httpd-2.4.33.tar.bz2下载,将该文件与subversion存放到一个目录下。
配置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没有错误,则可以在浏览器http://localhost/svn/learn_library,能够访问成功表示配置没问题,如果访问不成功,可以在/usr/local/apache2/logs下查看error_log什么原因导致。
5.总结
为了搞定mac下的svn+http访问,真是坎坷万分,网上没有相关资料,如果觉得有用,就给我点赞吧!