F.3. 通过 CVSup获取源代码

使用匿名 CVS 检索 PostgreSQL 源码树的另一个方法是 CVSupCVSup 是由 John Polstra 开发的,用于为 FreeBSD 项目 分发CVS 仓库和其他文件树。

使用 CVSup 的主要优点是它可以可靠地在你的本地机器上复制 整个 CVS 仓库,允许快速的本地使用cvs 操作, 象logdiff。 其他优点包括与 PostgreSQL 服务器的快速同步,因为它使用一种高效的流传输协议, 该协议只传输最后更新(以来)的修改。

F.3.1. 准备一个 CVSup 客户端系统

做这件事需要为 CVSup 准备两个目录区域:一个本地 CVS 仓库(或者就是一个目录区域 — 如果你只是抓取一个快照而不是整个仓库; 见下文) 和一个本地 CVSup 簿记区域。 这些东西可以在同一个目录树里面共存。

确定你将在哪个目录里面安放你的 CVS 仓库的本地拷贝。在我们的一个系统中, 我们最近在 /home/cvs/ 设立了仓库, 但是以前我们把它放在 /opt/postgres/cvs/ 里的一个 PostgreSQL 开发版的目录树里。 如果你想把你的仓库放在 /home/cvs/,那么把

setenv CVSROOT /home/cvs

放到你的 .cshrc 文件, 或者根据你用的 shell 把类似的行放到你的 .bashrc.profile 文件里。

cvs 仓库区域必须被初始化。一旦设置了 CVSROOT,那么初始化可以简单地用下面的命令完成:

$ cvs init

之后,你列举 CVSROOT 目录时,你至少能看到一个名为 CVSROOT 的目录。

$ ls $CVSROOT
CVSROOT/

F.3.2. 运行CVSup客户端

先证实 cvsup 在你的路径里; 在大多数系统上你可以键入下面命令核实这些

which cvsup

然后,只需要用下面命令运行 cvsup

$ cvsup -L 2 postgres.cvsup

这里的 -L 2 打开了一些状态消息, 这样你就可以监控更新的进展过程,而 postgres.cvsup 是你赋予你的 CVSup 配置文件的路径和名称。

这里是一份为特定安装修改过的CVSup 配置文件,它维护着一个完整的本地 CVS 仓库:

# This file represents the standard CVSup distribution file
# for thePostgreSQLORDBMS project
# Modified by lockhart@fourpalms.org 1997-08-28
# - Point to my local snapshot source tree
# - Pull the full CVS repository, not just the latest snapshot
#
# Defaults that apply to all the collections
*default host=cvsup.postgresql.org
*default compress
*default release=cvs
*default delete use-rel-suffix
# enable the following line to get the latest snapshot
#*default tag=.
# enable the following line to get whatever was specified above or by default
# at the date specified below
#*default date=97.08.29.00.00.00

# base directory where CVSup will store its 'bookmarks' file(s)
# will create subdirectory sup/
#*default base=/opt/postgres # /usr/local/pgsql
*default base=/home/cvs

# prefix directory where CVSup will store the actual distribution(s)
*default prefix=/home/cvs

# complete distribution, including all below
pgsql

# individual distributions vs 'the whole thing'
# pgsql-doc
# pgsql-perl5
# pgsql-src

在上面的步骤里,如果你声明 repository,而不是pgsql, 那么你就会得到 cvsup.postgresql.org 上面的一个完整的仓库拷贝, 包括其 CVSROOT 目录。如果这么做,你可能会希望排除那些目录中的某些文件, 以便你做本地的修改,方法是使用一个 refuse 文件。比如,对于上面的设置,你可以在 /home/cvs/sup/repository/refuse 里面放下面这些行:

CVSROOT/config*
CVSROOT/commitinfo*
CVSROOT/loginfo*

参考 CVSup 的手册页获取如何使用拒绝(refuse)文件的信息。

下面的是PostgreSQL ftp 站点 建议的 CVSup 配置文件, 它将只是抓取目前(版本)的快照:

# This file represents the standard CVSup distribution file
# for thePostgreSQLORDBMS project
#
# Defaults that apply to all the collections
*default host=cvsup.postgresql.org
*default compress
*default release=cvs
*default delete use-rel-suffix
*default tag=.

# base directory where CVSup will store its 'bookmarks' file(s)
*default base=/usr/local/pgsql

# prefix directory where CVSup will store the actual distribution(s)
*default prefix=/usr/local/pgsql

# complete distribution, including all below
pgsql

# individual distributions vs 'the whole thing'
# pgsql-doc
# pgsql-perl5
# pgsql-src

F.3.3. 安装 CVSup

CVSup 可以以源代码的形式、制作好了的二进制形式、或者 Linux RPM 的形式获得。 使用二进制的形式要远比从源代码里面制作要容易得多, 主要是因为编译需要高效但是庞大的 Modula-3 编译器。

从二进制包安装CVSup

如果你拥有一个在PostgreSQL ftp 站点 里贴出来的平台,或者你正在运行 FreeBSD, 你就可以使用制作好了的二进制形式,这时候 CVSup 是以一个已移植好了的形式获得的。

注意: CVSup 最初是作为一个用于分发 FreeBSD 源码树的工具开发的。 对于那些运行 FreeBSD 的人来说,它可以当作 "port"(移植)获取, 如果这些描述不足以说明如何获取和安装它的问题, 那么请为我们在这里贡献一个过程。

在写作这些的时候,可以获得下面平台的二进制 Alpha/Tru64,ix86/xBSD, HPPA/HP-UX10.20,MIPS/irix, ix86/linux-libc5,ix86/linux-glibc, Sparc/Solaris,and Sparc/SunOS。

  1. 检索适合你的平台的 cvsup (做客户端不需要cvsupd) 二进制文件。

    1. 如果你用 FreeBSD,安装CVSup 移植。

    2. 如果你使用其他平台,在PostgreSQL ftp 站点 找出并下载适合你的二进制文件。

  2. 如果需要,检查tar 文件以核实内容和目录结构。 至少对于 linux 的 tar 文件而言, 静态二进制和 手册页是不包括任何目录包信息的。

    1. 如果二进制在 tar 文件的顶层,那么只需要把他们解包到你的目标目录里面:

      cd /usr/local/bin
      tar zxvf /usr/local/src/cvsup-16.0-linux-i386.tar.gz
      mv cvsup.1 ../doc/man/man1/

    2. 如果 tar 文件里面有一个目录结构, 那么把 tar 文件解包到 /usr/local/src 里, 然后把二进制移动到上面对应的合适路径里。

  3. 确保新的二进制在你的路径里。

    $ rehash
    $ which cvsup
    $ set path=(path to cvsup $path)
    $ which cvsup
    /usr/local/bin/cvsup

F.3.4. 从源代码安装

从源代码安装 CVSup 并非易如反掌, 主要是因为大多数系统将需要先安装一个 Modula-3 编译器。 这个编译器可以以Linux RPM, FreeBSD 的包或者源代码的形式获得。

注意: 一个 Modula-3 的净代码安装大约需要 200MB 磁盘空间, 当把源代码删除后大约只有 50MB。

Linux 安装

  1. 安装 Modula-3.

    1. Polytechnique Montral 获取 Modula-3 发布,他们还在积极地维护着基于 DEC 系统研究中心 的代码。 PM3 RPM 版本压缩后大约 30MB。 在我们写作的时候,1.1.10-1 版在 RH-5.2 上干净利落的安装好了, 而1.1.11-1 版本显然是为另外一个版本(RH-6.0?)制作的, 无法在 RH-5.2 上运行。

      提示: 这些 rpm 包有许多 RPM 文件, 因此你可能会愿意把它们放在独立的一个目录里。

    2. 安装 Modula-3 rpm:

      # rpm -Uvh pm3*.rpm

  2. 解包 cvsup 版本:

    # cd /usr/local/src
    # tar zxf cvsup-16.0.tar.gz

  3. 制作 cvsup 的发布版,禁止 GUI 界面以避免要求 X11 库:

    # make M3FLAGS="-DNOGUI"

    如果你想制作一个静态的二进制以便于装到一个没有安装 Modula-3 的系统,用:

    # make M3FLAGS="-DNOGUI -DSTATIC"

  4. 安装制作好了的二进制:

    # make M3FLAGS="-DNOGUI -DSTATIC" install