在AIX系统安装svn客户端

某些原因,不能使用分布式的 git、hg 做版本管理,也懒得折腾权限插件,于是在 Windows 系统里使用 VisualSVN Server 搭建了 svn 服务器。

首先,解决 VisualSVN 的 SSL 证书问题:
https://oicu.github.io/posts/d4b9c670.html
否则使用 svn 命令时不能永久保存证书,每次使用 svn 命令都会提示或奔溃。

在 Linux 和 Windows 安装 svn 客户端都简单,但在 AIX 上就稍微麻烦点,由于同一个系统里有多个用户,编译这种麻烦事肯定是排除的,优先考虑使用 rpm 安装。

由于低版本的 svn 客户端 checkout 之后,在本地每个文件夹都生成 .svn 隐藏目录,svn 1.7 及之后的版本在本地的 working copy 只有根目录有一个 .svn 目录,取代以前的所有的目录下都有 .svn 目录的方式。因此推荐使用 subversion 1.7 之后的版本。

AIX 系统用的 rpm 包可以从以下网站获取:
http://www.oss4aix.org/download/RPMS/subversion/
http://www.perzl.org/aix/index.php?n=Main.Subversion
ftp://public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/subversion/
http://www.bullfreeware.com/

ibm 网站提供的 svn 版本较新,但是不能使用 http/https 访问 VisualSVN 服务器的库,排除!
perzl 网站是 svn 官网推荐的 Windows 编译版本,但版本较旧,截止发文,最新的只有 v1.8.5-1。
oss4aix 网站的版本比 prezl 的新一点,我最终选用的是 subversion-1.8.10-2.aix5.3.ppc.rpm 这个包。
未测试 bullfreeware 网站的包。

依赖关系(Package dependencies):
prezl 及 bullfreeware 网站列有依赖关系供参考,每个版本的 subversion 依赖都不一样,根据具体来安装。依赖包不用安装太新的,满足最低要求即可!否则一个依赖一个,装个没完。
svn 1.8 之前的版本使用 http/https 访问需要安装 neon 依赖,1.8 及之后版本弃用 neon 而改使用 serf。
serf 的版本越新越好,旧版本可能处理 SSL 证书会有问题,我选用 oss4aix 网站的 serf-1.2.1-2.aix5.1.ppc.rpm

因为只是安装客户端,如果提示要依赖 httpd(ibm 网站的版本要),使用 --nodeps 参数:

1
rpm -ivh --nodeps subversion-1.8.10-2.aix5.3.ppc.rpm

我所用的 AIX 7.1 系统并没有使用 UTF-8 编码!使用 svn 客户端遇到中文文件名无法检出,处理方法为(不推荐):

1
2
export LC_ALL=
export LC_CTYPE="Zh_CN.GB18030"

locale 命令查看,把其他 LC_* 环境变量设置为 C 或者 en_US。
不要设置 LANG 这个环境变量!

rpm -qa 查看已经安装的包:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
zlib-1.2.8-1
file-5.28-1
libgcc-4.5.4-1
apr-1.5.2-2
apr-util-1.5.4-1
file-libs-5.28-1
gettext-0.19.7-1
expat-2.1.0-1
sqlite-3.9.2.0-1
db4-4.7.25-2
openssl-1.0.1t-1
serf-1.2.1-2
libiconv-1.14-2
info-5.2-1
readline-6.3-5
subversion-1.8.10-2
python-2.7.5-1
gdbm-1.8.3-5

对应的 rpm 包是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
apr-1.5.2-2.aix5.2.ppc.rpm
apr-util-1.5.4-1.aix5.1.ppc.rpm
db4-4.7.25-2.aix5.1.ppc.rpm
expat-2.1.0-1.aix5.1.ppc.rpm
file-5.28-1.aix5.1.ppc.rpm
file-libs-5.28-1.aix5.1.ppc.rpm
gettext-0.19.7-1.aix6.1.ppc.rpm
info-5.2-1.aix5.1.ppc.rpm
libgcc-4.5.4-1.aix7.1.ppc.rpm
libiconv-1.14-2.aix5.1.ppc.rpm
openssl-1.0.1t-1.aix5.1.ppc.rpm
readline-6.3-5.aix5.1.ppc.rpm
serf-1.2.1-2.aix5.1.ppc.rpm
sqlite-3.9.2.0-1.aix5.1.ppc.rpm
subversion-1.8.10-2.aix5.3.ppc.rpm
zlib-1.2.8-1.aix6.1.ppc.rpm
python-2.7.5-1.aix6.1.ppc.rpm
gdbm-1.8.3-5.aix5.2.ppc.rpm

特别注意 libgcc 这个包对应的版本!我尝试装其他版本都不行,只好装这个 aix7.1 的。

如果没设置 LIBPATH 变量,或虽然设置了但所有动态库路径里都不产生库版本冲突时,svn可正常运行。
检查动态库是否有冲突:
ldd /usr/bin/svn
有冲突需要修改程序运行时查找动态库的路径顺序,/opt/freeware/lib 顺序必须在前
LIBPATH=/opt/freeware/lib:$LIBPATH
export 这个设置放到 .profile 里的话,可能会影响编译或者其他程序的运行。

由于在 .profile 里更改全局环境变量 LC_CTYPE 会带来其他影响,建议创建一个脚本先修改 LIBPATH(不能export),并 alias svn 为这个脚本,顺便解决中文文件名、中文备注乱码的问题。

1
2
3
4
5
#!/bin/sh
# Author: oicu
# Usage: alias svn='/opt/freeware/bin/svn.sh'
LIBPATH=/opt/freeware/lib:$LIBPATH
env LC_CTYPE=zh_CN /opt/freeware/bin/svn "$@"

locale 命令查看环境的变量设置为:

1
2
3
4
5
6
7
8
LANG=en_US
LC_COLLATE="en_US"
LC_CTYPE="en_US"
LC_MONETARY="en_US"
LC_NUMERIC="en_US"
LC_TIME="en_US"
LC_MESSAGES="en_US"
LC_ALL=