SVN的编译和安装

     本文简单的介绍SVN的编译和安装过程。

1. SVN源码包下载

    从以下URL下载源码包:
    subversion-1.4.4.tar.bz2       http://subversion.tigris.org/downloads/subversion-1.4.4.tar.bz2
    subversion-deps-1.4.4.tar.bz2  http://subversion.tigris.org/downloads/subversion-deps-1.4.4.tar.bz2

2. 编译步骤

    执行以下2条命令,解压得到源程序:
    tar -jxf subversion-1.4.4.tar.bz2
    tar -jxf subversion-deps-1.4.4.tar.bz2

    通过以下命令编译SVN:
    cd subversion-1.4.4
    ./configure
    make

    执行以下命令安装SVN:
    make install

3. 安装SVN客户端

    经过"make install"命令后,就安装的整个 SVN的系统。但在只作客户端的机器上,只需要运行svn命令就完成代码的捡出、提交等SVN功能了。这样,我们可以将目前编译的svn程序打包后,安装到其它机器上就可以了。

    注意:文件subversion/svn/svn只是脚步文件,真正的二进制可执行文件为subversion/svn/.libs/svn。
    [root@localhost subversion-1.4.4]# file subversion/svn/svn
    subversion/svn/svn: Bourne shell script text executable
    [root@localhost subversion-1.4.4]# file subversion/svn/.libs/svn
    subversion/svn/.libs/svn: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), not stripped

    我们先看看svn关联的动态库,结果如下显示:
    [root@localhost subversion-1.4.4]# ldd subversion/svn/.libs/svn
        libsvn_client-1.so.0 => /usr/local/lib/libsvn_client-1.so.0 (0x40013000)
        libsvn_wc-1.so.0 => /usr/local/lib/libsvn_wc-1.so.0 (0x40034000)
        libsvn_ra-1.so.0 => /usr/local/lib/libsvn_ra-1.so.0 (0x4005c000)
        libsvn_diff-1.so.0 => /usr/local/lib/libsvn_diff-1.so.0 (0x40060000)
        libsvn_ra_local-1.so.0 => /usr/local/lib/libsvn_ra_local-1.so.0 (0x40066000)
        libsvn_repos-1.so.0 => /usr/local/lib/libsvn_repos-1.so.0 (0x4006c000)
        libsvn_fs-1.so.0 => /usr/local/lib/libsvn_fs-1.so.0 (0x40088000)
        libsvn_fs_fs-1.so.0 => /usr/local/lib/libsvn_fs_fs-1.so.0 (0x4008e000)
        libsvn_ra_svn-1.so.0 => /usr/local/lib/libsvn_ra_svn-1.so.0 (0x400a5000)
        libsvn_ra_dav-1.so.0 => /usr/local/lib/libsvn_ra_dav-1.so.0 (0x400b4000)
        libsvn_delta-1.so.0 => /usr/local/lib/libsvn_delta-1.so.0 (0x400de000)
        libsvn_subr-1.so.0 => /usr/local/lib/libsvn_subr-1.so.0 (0x400e7000)
        libaprutil-0.so.0 => /usr/local/apr/lib/libaprutil-0.so.0 (0x40111000)
        libapr-0.so.0 => /usr/local/apr/lib/libapr-0.so.0 (0x40125000)
        libpthread.so.0 => /lib/i686/libpthread.so.0 (0x40150000)
        librt.so.1 => /lib/librt.so.1 (0x40180000)
        libm.so.6 => /lib/i686/libm.so.6 (0x40191000)
        libcrypt.so.1 => /lib/libcrypt.so.1 (0x401b3000)
        libnsl.so.1 => /lib/libnsl.so.1 (0x401e0000)
        libdl.so.2 => /lib/libdl.so.2 (0x401f6000)
        libgssapi_krb5.so.2 => /usr/kerberos/lib/libgssapi_krb5.so.2 (0x401f9000)
        libkrb5.so.3 => /usr/kerberos/lib/libkrb5.so.3 (0x4020c000)
        libk5crypto.so.3 => /usr/kerberos/lib/libk5crypto.so.3 (0x40269000)
        libcom_err.so.3 => /usr/kerberos/lib/libcom_err.so.3 (0x40279000)
        libexpat.so.0 => /usr/lib/libexpat.so.0 (0x4027b000)
        libz.so.1 => /usr/lib/libz.so.1 (0x4029c000)
        libc.so.6 => /lib/i686/libc.so.6 (0x42000000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

    svn关联的一堆动态库,如果要将本机编译的svn程序复制到其他机器上运行,还必须带上这些动态库,比较麻烦。而且有时复制这些文件后,由于覆盖了原有的动态库可能影响其它程序的运行。

    因此,我们需要重新编译一个只链接静态库的svn程序,该svn程序就不再关联任何动态库。若需要再其他机器上安装客户端,只需复制单个文件svn就可以了。

    编译过程如下:
    ./configure --enable-all-static
    make

    通过以下步骤编译生成的svn程序为subversion/svn/svn。
    [root@Outside ~/subversion-1.4.4]# file subversion/svn/svn
    subversion/svn/svn: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.0.0, statically linked, stripped
    
    我们看看svn程序的动态库关联情况。
    [root@Outside ~/subversion-1.4.4]# ldd subversion/svn/svn
        not a dynamic executable

    因为该文件连接的为静态库,所以文件比较大,我们可以通过strip命令去除调试信息。
这样只要单独复制该文件到客户机上就可以了。
    [root@Outside ~/subversion-1.4.4]# ls -l subversion/svn/svn
    -rwxr-xr-x    1 root     1000     13120320 Nov  9 16:25 subversion/svn/svn
    [root@Outside ~/subversion-1.4.4]# strip subversion/svn/svn
    [root@Outside ~/subversion-1.4.4]# ls -l subversion/svn/svn
    -rwxr-xr-x    1 root     1000      1750300 Nov  9 16:31 subversion/svn/svn

你可能感兴趣的:(c,SVN,shell,File,url)