CentOS7.2源码安装Subversion1.9.7【填坑记】

参考文章:centos7源码编译安装Subversion 1.9.5

由来

采用最简单的方式通过源码安装Subversion:./configure,然后make && make install。这样的默认安装,效果是只支持svn和本地file协议,不支持http或https。而我需要一个支持http协议的svn。

感谢前人的轮子,能顺利完成本次安装,参考了上面这篇博客。这里主要记录下我不一样的操作和遇到的问题。

下载subversion源码:

下载地址:subversion-1.9.7.tar.gz

填坑一:

这里有个小问题要注意:尽量下载官方.tar.gz后缀的压缩包,不要选.zip的。测试发现.zip的压缩包解压后shell脚本使用了windows的换行符^M,运行时会报错(也有转文件编码的方式,方法可自行百度,这是参考方法)。

$ ./get-deps.sh 
-bash: ./get-deps.sh: /bin/sh^M: bad interpreter: No such file or directory

准备:

下完后解压并进入解压目录。阅读了一下INSTALL文件,其中说明了,svn客户端要支持http方式的话,需要安装serf库,也说了需要其他依赖包可以执行get-deps.sh脚本,执行后可以得到几个需要的依赖库目录(看脚本知道,其实就是根据系统的curl或wget等工具通过网络下载):

apr,apr-util,serf,sqlite-amalgamation,zlib。

根据参考博客,zlib和openssl可以通过yum直接安装,比手动编译方便,命令:

yum -y install zlib openssl

其他依赖库的安装,我的做法和参考博客稍有不同,既然get-deps.sh脚本都下载好了需要的依赖库源码,我就没有再先去下载另外的库了。apr,apr-util库都是分别进入源码目录然后执行编译安装,serf因为使用get-deps.sh下载的源码有问题,所以另外下载了1.3.9版本,详见下文,下面是安装过程。

安装apr:

cd apr
./configure
make && make install
完成后默认安装在了/usr/local/apr/目录下。

安装apr-util:

cd apr-util/
./configure --with-apr=/usr/local/apr/bin/apr-1-config
make && make install
接下来该安装serf了。因为serf库目前是采用scons(一个python写的自动化构建工具)构建的,所以如果没有安装过scons的,需要先安装scons,看到其他博客有说scons可以直接通过yum安装,我尝试了但是不行,所以还是通过源码安装。 下载源码压缩包,链接:http://www.scons.org/pages/download.html,我下载的是scons-3.0.0.zip

安装scons:

unzip -q scons-3.0.0.zip
cd scons-3.0.0
python setup.py install

安装serf:

我本想也用get-deps.sh脚本下载的serf直接编译安装,但是这里就遇到问题了。运行下面的scons命令:

cd serf
scons PREFIX=/usr/local/serf APR=/usr/local/apr/bin/apr-1-config APU=/usr/local/apr/bin/apu-1-config
得到了以下的错误信息:
File "/home/shenyong/subversion-1.9.7/serf/SConstruct", line 180
print 'Unknown variables:', ', '.join(unknown.keys())
SyntaxError: invalid syntax

这么正式的库,居然是语法错误?我对python不是特别熟悉,搜了一下也不知道是什么错,有懂的朋友,欢迎评论赐教。根据行号提示,查看到SConstruct第180行附近的内容如下:

unknown = opts.UnknownVariables()
if unknown:
  print 'Unknown variables:', ', '.join(unknown.keys())
  Exit(1)

如果因为一句打印的语法错误打断库的编译,我大可以把它注释掉,但是我们注意这到下面是一个退出语句,所以即使没有这句打印,也无法完成编译,这就很让人郁闷了!思考无果,我尝试着像参考博客中一样,单独下载一个serf库试一试。下载页面:http://serf.apache.org/download。笔者写这篇博客时最新版本是1.3.9,我下载了:serf-1.3.9.tar.bz2。然后解压、进入解压目录再次运行上面的命令:

tar xf serf-1.3.9.tar.bz2
cd serf-1.3.9
scons PREFIX=/usr/local/serf APR=/usr/local/apr/bin/apr-1-config APU=/usr/local/apr/bin/apu-1-config
依然得到了类似的错误信息:
scons: Reading SConscript files ...
  File "/home/shenyong/serf-1.3.9/SConstruct", line 186
    print 'Warning: Used unknown variables:', ', '.join(unknown.keys())
                                           ^
SyntaxError: invalid syntax
当时心里就绝望了~但是静下来仔细一看,发现这里打印只是个警告,于是赶紧像上面一样找到源码对应的位置:
unknown = opts.UnknownVariables()
if unknown:
  print 'Warning: Used unknown variables:', ', '.join(unknown.keys())
...

填坑二:

这里确实只是个警告打印,并没有在if分支里退出编译,说明如果没有这个打印,是不影响结果的!心里一阵惊喜,抱着试一试的心态,vi修改文件,注释掉了这个打印分支:

unknown = opts.UnknownVariables()
#if unknown:
#  print 'Warning: Used unknown variables:', ', '.join(unknown.keys())
...
再次执行上面的scons命令,顺利执行完scons命令,完成编译和库拷贝:
scons PREFIX=/usr/local/serf APR=/usr/local/apr/bin/apr-1-config APU=/usr/local/apr/bin/apu-1-config
scons install
cp /usr/local/serf/lib/libserf-1.so* /usr/local/lib/
最后一步,安装subversion了!
./configure --prefix=/usr/local/subversion1.9.7 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr --with-serf=/usr/local/serf
make && make install
在PATH路径中添加svn命令的软链接,方便使用(这一步可选,视自己的安装目录而定;也可以直接把svn安装目录添加到PATH中去):
ln -s /usr/local/subversion1.9.7/bin/svn /usr/local/bin

填坑三:

编译完成,迫不及待地运行svn --version查看,结果遇到了参考博客中说的问题:

svn: error while loading shared libraries: libserf-1.so.1: cannot open shared object file: No such file or director

前人种树,后人乘凉啊!有现成的解决办法就是好。照着参考博客提供的方法处理:

cd /etc/ld.so.conf.d/
#把我们放serf相关库文件的目录写入user-libs.conf
vi user-libs.conf
#在vi编辑器中写入这个路径:/usr/local/lib,保存退出
ldconfig
再次执行svn命令查看版本信息:

$ svn --version

svn, version 1.9.7 (r1800392)
   compiled Nov 28 2017, 16:20:30 on x86_64-unknown-linux-gnu

Copyright (C) 2017 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_svn : Module for accessing a repository using the svn network protocol.
  - 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

The following authentication credential caches are available:

* Plaintext cache in /home/shenyong/.subversion
* GPG-Agent
可以看到,已经支持http协议了,然后各种svn命令操作一通,确定没有问题了,终于大功告成!


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值