随着Subversion版本的更新,Subversion升级问题已经呈现在大家的眼前,那么怎么升级Subversion呢,在这里发表一下个人的见解,希望对大家有所帮助。
在我的SlackwareLinux里,将Subversion从1.4.6升级到1.6.11,Apache使用最新的2.2.15版本,都从源码编译安装。
Subversion升级完后Apache启动不了,错误提示如下:
Cannotload/usr/local/apache2.2/modules/mod_dav_svn.sointoserver:/usr/local/apache2.2/modules/mod_dav_svn.so:undefinedsymbol:svn_log__updatem,很怀疑是Apache和Subversion使用了不兼容的libapr,在Subversion的INSTALL文件里如是说:
WerecommendusingthelatestApache.However,whateverversionyouchoose,you*must*ensurethatSubversionandApacheareusingthesameversionofAPR.Ifyoudon't,thingswillsegfaultandbreak.
ldd看一下:
ldd/usr/local/apache2.2/bin/httpd
ldd/usr/local/svn1.6/bin/svn发现它们果然使用了不同的libapr,前者是用的操作系统自带的,后者用的Subversion软件包自己的。
APR的全称是ApachePortableRuntime,用过mod_perl或ApacheAPI编程的应该很清楚这个。它提供一个抽象的操作系统级服务,例如文件和网络IO、内存管理等。它也包含了一些实用函数例如哈希表、校验和、参数处理等。尽管APR最开始是为pache服务器开发的,但已发展成为一个标准库,被Subversion和其他网络产品所使用,为软件跨平台运行提供方便。于是重新编译Apache和Subversion,让它们使用相同的libapr和libapr-util,过程如下:
1.解开Subversion-1.6.11.tar.bz2和Subversion-deps-1.6.11.tar.bz2(后者包含了apr和apr-util,以及其他Subversion依赖库例如SQLite等),得到同一个目录Subversion-1.6.11。
2.cdSubversion-1.6.11/apr;./configure;make&&makeinstall
安装apr,默认安装到/usr/local/apr目录。
3.cdSubversion-1.6.11/apr-util;./configure--with-apr=/usr/local/apr;make&&makeinstall
安装apr-util,默认安装到上述相同目录。
4.进入Apache的源代码目录,安装Apache:
./configure--prefix=/usr/local/apache2.2--enable-so--enable-dav\
--with-apr=/usr/local/apr--with-apr-util=/usr/local/apr
make&&makeinstall
5.再次回到Subversion-1.6.11,安装Subversion升级:
./configure--prefix=/usr/local/svn1.6--with-apr=/usr/local/apr\
--with-apr-util=/usr/local/apr--with-apxs=/usr/local/apache2.2/bin/apxs
make&&makeinstall
关键之处是第4步和第5步里,都使用--with-apr和--with-apr-util指定了同一个apr安装目录。
再次启动Apache,一切OK。
这次升级才发现Subversion在今年2月已变成了Apache的子项目,这是一件好事。一是因为Apache项目的代码质量控制得很好,二是Apache项目的文档都很完美。有一本关于Subversion的自由图书:Subversion与版本控制,主页在: http://svnbook.red-bean.com/">http://svnbook.red-bean.com/。本文介绍Subversion升级完毕,对你有启示吗?欢迎关注本文的其他相关报道。
【编辑推荐】