标签 svn 下的文章

最近唯一值得欣慰的事情,就是成功地在 64 位 FreeBSD 7.2 上使用源码编译的方式部署了 Subversion 守护进程。

为了秉承好人做到底、送佛送到西的原则,我将后期启动配置及仓库的创建、导入与导出方法记录并共享如下。同样地,感谢期间公司运维同事的全力协助。

启动方式:

/path/to/subversion/bin/svnserve -d -r /path/to/repository --listen-host=you.host.name --listen-port=4444

建议端口不低于 1024,否则需要 root 来启动。有了启动方式,系统自启动就不说了,自由发挥。

创建仓库:

/path/to/subversion/bin/svnadmin create /path/to/repository

导入仓库:

/path/to/subversion/bin/svnadmin load /path/to/repository < /path/to/dumpfile

导出仓库:

/path/to/subversion/bin/svnadmin dump /path/to/repository > /path/to/dumpfile

之前我居然用 svn import 命令导入仓库,死活报错,想起来丢脸万分、后悔万分:

subversion/libsvn_client/commit.c:765: (apr_err=150002)
svn: Path 'svn://you.host.name:4444/repository' already exists

关于钩子的作用,可以让客户端在操作 SVN 的同时触发一些事务脚本,从而完成某些作业——譬如在服务端 checkout 仓库到 Web 服务器所指向的目录,实现测试服务器的实时调试。

在折腾钩子的时候,我无意间发现我们敬爱的水总在一年前就写过相关的文章,猛击这里拜读。

下集预告:《64 位 FreeBSD 7.2 上部署 Nginx + PHP 及 MySQL 主从》。当然,老规矩,我不会写使用诸如 ports 来安装的此类“没有技术含量”的文章。

其实,我要的只是一个与 Apache 无关的轻量的独立的 Subversion 守护进程,即 svnserve;这次操作系统是 64 位的 FreeBSD 7.2。不知是 64 位的原因还是 7.2 的原因,部署过程非常不顺利。前后陆陆续续地折腾了两个多星期,快把 Google 都搜烂了。期间公司运维的贾同学与杨同学给予了大力帮助,在此表示感谢。

现在我们开始。首先刻录 64 位 FreeBSD 7.2 的第一张 CD,分区,最小化安装,设置 root 密码,添加隶属 wheel 组的普通用户帐户,配置网络与 sshd……一路顺畅无比,十分痛快,不再赘述。

然后使用 ssh 客户端(推荐 PuTTy,它还支持手机塞班操作系统)连接到服务器,验明正身:

svn# uname -a
FreeBSD svn.xx.xxxx.com 7.2-RELEASE FreeBSD 7.2-RELEASE #0: Fri May  1 07:18:07 UTC 2009     [email protected]:/usr/obj/usr/src/sys/GENERIC  amd64

接着下载 wget 并安装:

svn# mkdir -p /home/work/src/
svn# cd /home/work/src/
svn# fetch http://ftp.gnu.org/gnu/wget/wget-1.12.tar.gz
svn# tar -xzf wget-1.12.tar.gz
svn# cd wget-1.12.tar.gz
svn# ./configure
svn# make
svn# make install
svn# rehash

然后下载需要的其他安装包,并解压:

svn# cd /home/work/src/
svn# wget -c http://xmlsoft.org/sources/libxml2-2.7.7.tar.gz
svn# wget -c "http://downloads.sourceforge.net/project/expat/expat/2.0.1/expat-2.0.1.tar.gz?use_mirror=cdnetworks-kr-2"
svn# wget -c http://subversion.tigris.org/downloads/subversion-1.6.11.tar.gz
svn# wget -c http://subversion.tigris.org/downloads/subversion-deps-1.6.11.tar.gz
svn# tar -xzf libxml2-2.7.7.tar.gz
svn# tar -xzf expat-2.0.1.tar.gz
svn# tar -xzf subversion-1.6.11.tar.gz
svn# tar -xzf subversion-deps-1.6.11.tar.gz

安装 libxml:

svn# cd /home/work/src/libxml2-2.7.7/
svn# ./configure
svn# make
svn# make install

安装 expat:

svn# cd /home/work/src/expat-2.0.1/
svn# ./configure
svn# make
svn# make install

然后:

ln -s /usr/local/lib/libexpat.so /usr/lib/libexpat.so

进入 subversion 目录,逐个安装依赖包的组件:

svn# cd /home/work/src/subversion-1.6.11/

svn# cd apr
svn# ./configure --prefix=/usr/local/apr LDFLAGS="-L/lib64"
svn# make
svn# make install

svn# cd ../apr-util
svn# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/ LDFLAGS="-L/lib64"
svn# make
svn# make install

svn# cd ../zlib
svn# ./configure
svn# make
svn# make install

之前一直安装 serf,方法:

svn# cd ../serf
svn# ./configure --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ LDFLAGS="-L/lib64"
svn# make
svn# make install

无奈它死活就是报错:

/usr/lib/crt1.o(.text+0x8a): In function `_start':
: undefined reference to `main'
*** Error code 1

Stop in /usr/home/work/src/subversion-1.6.11/serf.

结果 Google 了好几天,看了 N 篇老外的帖子,发现如果不搭配 Apache 使用,这个组件可以不安装……

然后 neon 也可以不安装。下面的安装方式或许会报错:

svn# cd ../neon
svn# ./configure --enable-shared --enable-ssl LDFLAGS="-L/lib64"
svn# make
svn# make install

其实这个 sqlite 也可以不安装:

svn# cd ../sqlite-amalgamation
svn# ./configure --prefix=/usr/local/sqlite
svn# make
svn# make install

记得不要写到 Subversion 的编译参数里面。“--without-sqlite”也不行,会报错。

最后可以安装 Subversion 了:

svn# cd ..
svn# ./configure --prefix=/usr/local/subversion --with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apr-util/bin/apu-1-config --with-ssl --with-zlib=/usr/lib --without-serf --without-berkeley-db --enable-maintainer-mode LDFLAGS="-L/lib64"
svn# make
svn# make install

如果不安装前面的 expat,会报错:

/usr/bin/ld: cannot find -lexpat
*** Error code 1

Stop in /usr/home/work/src/subversion-1.6.11.

安装到此结束,如果没有意外报错的话——恭喜你,可以自恋一下了:

svn# /usr/local/subversion/bin/svnserve --version
svnserve, version 1.6.11 (r934486)
   compiled May 12 2010, 04:25:34

Copyright (C) 2000-2009 CollabNet.
Subversion is open source software, see http://subversion.tigris.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).

The following repository back-end (FS) modules are available:

* fs_fs : Module for working with a plain file (FSFS) repository.

启动方式就不多说了,手册上写得非常清楚。需要智能化脚本的,也可以 Google 到。

部署结束,感谢收看。