CVS 是应用最为广泛的版本控制系统。有大量的有关如何使用 CVS 的参考资料,也有很多关于 CVS 的安装和配置的零散信息,并且如此多的开源团体在使用 CVS 作为他们的版本控制系统。但如何配置 CVS 环境,以满足多种访问方式以及访问控制需求,为用户提供安全可靠且便捷的版本控制服务,这方面的完整参考资料并不多见。本文则侧重这方面的内容,提供了关于 CVS 访问控制,访问方式以及常用第三方集成工具的详细信息。
本文的最新版本将发布在程序员咖啡馆网站上(建设中)。欢迎订阅我们的邮件组,以获得关于本文的正式发布及更新信息。全文在保证完整性,且保留全部版权声明(包括上述链接)的前提下可以在任意媒体转载--须保留此标注。 目录 前言
1. 关于本文
2. 读者对象
3. 关于范例
1. 概述 2. 安装
2.1. 从源代码安装
2.2. 从二进制安装(仅对 Solaris 用户)
3. 资源库
3.1. 创建资源库
3.2. 文件系统权限
3.2.1. 资源库所有者
3.2.2. 资源库根目录权限
3.2.3. 管理目录权限
3.2.4. 项目目录权限
4. 资源库访问方式
4.1. 资源库名称
4.2. 本地访问方式
5. 通过 SSH 访问
5.1. SSH 简介
5.2. SSH 服务器
5.3. 从 Unix 客户端访问 CVS
5.3.1. 公共密钥认证
6. 基于密码认证的服务器
6.1. 设置基于密码认证的服务器
6.2. 密码文件
6.3. 只读资源库访问
6.4. 匿名访问
7. CVSWeb
7.1. 需求
7.2. 安装
7.2.1. 安装 Perl(仅对 Solaris 用户)
7.2.2. 安装 Perl 模块
7.2.3. 安装 RCS 工具
7.2.4. 安装 CvsGraph(可选)
7.2.5. 安装 Enscript(可选)
7.2.6. 安装 CVSWeb
7.2.7. 配置 CVSWeb
8. ViewCVS
8.1. 需求
8.2. 安装
8.2.1. 安装 Python
8.2.2. 安装 RCS 和 Diffutils
8.2.3. 安装 ViewCVS
8.2.4. 配置 ViewCVS
参考文献
本文的第一部分请见: http://spaces.msn.com/members/stephensuen/Blog/cns !1p1G_DGhjYiYGmj6keNZQAcw!202.entry 目录
7.1. 需求
7.2. 安装
7.2.1. 安装 Perl(仅对 Solaris 用户)
7.2.2. 安装 Perl 模块
7.2.3. 安装 RCS 工具
7.2.4. 安装 CvsGraph(可选)
7.2.5. 安装 Enscript(可选)
7.2.6. 安装 CVSWeb
7.2.7. 配置 CVSWeb
对于只想浏览一下资源库的内容,或者偶然地下载几个资源库中的文件的用户而言,最理想的途经莫过于通过 Web 访问 CVS 的资源库了。CVS 本身并没有提供这样的支持,不过我们可以利用第三方的工具来为用户提供这样的访问支持。以下为最常见的两个基于 Web 的 CVS 访问工具: 其中的 CVSweb 源于 FreeBSD 项目,并很快成为非常流行的 CVS 资源库的 Web 访问工具。它本身实际上是一个基于 Perl 编写的软件,以 CGI 脚本的形式,配置在 Web 服务器中,提供对 CVS 资源库的 Web 访问支持。我们将首先介绍 CVSweb 的需求,以及如何安装和配置这个工具。在之后的章节中我们将介绍另一个同类工具,即 ViewCVS。 [b]7.1. 需求 [/b]
CVSweb 是基于 Perl 编写的 CGI 脚本程序,在服务器上需要安装有 Perl 5.6.0 或其更新版本。此外,以下 CVSweb 所需的 Perl 模块可能没有预先安装,而需要用户自己手工安装: File::Temp IPC::Run MIME::Types String::Ediff URI 作为 CGI 脚本程序,CVSweb 当然还需要一个可以运行 CGI 脚本的 Web 服务器。我们将使用大多数系统中预装的 Apache HTTP 服务器作为我们的 Web 服务器。另外,还需要 GNU 的 RCS 工具,包括其中的 rlog(1) 和 rcsdiff(1)。CVSweb 需要物理地存取资源库,任何外部访问方式或者基于密码认证的服务器访问方式都不适用。最后,CVSweb 还需要系统中安装有 CVS。
除了基本的 CVSweb 工具外,你可能还需要以下两个常用的用于扩展 CVSweb 的第三方工具。尽管这些是可选的,没有它们,CVSweb 也可以毫无问题地正常工作。但我们极力推荐安装这些工具: GNU 的 Enscript -- 用于语法加亮 CvsGraph -- 用于版本和分支的图形化展示 在这一节,我们将首先分别介绍如何安装作为 CVSweb 先决条件的软件和工具,然后介绍如何安装和配置 CVSweb 以及如何配置扩展的第三方工具。你的系统中有可能已经安装有我们所需的一些软件,请根据本文提供的信息,仔细检查你的系统。 [b]7.2.1. 安装 Perl(仅对 Solaris 用户) [/b]
Perl 通常都预装在你的系统中,一般情况下,你只需要跳到下一节,按照说明安装所需的额外模块即可。不幸的是,对于 Solaris 用户而言,由于安装Perl 的额外模块需要编译器,预装在 Solaris 中的 Perl 需要 Sun 的 Forte 中的编译器才能安装新的模块,而这个编译器不是免费的。这意味着你的Solaris 很可能没有所需的编译器,也就无法方便地安装后面的模块。解决这个问题的最简单办法是,从 www.sunfreeware.com 下载并安装一个最新的 Perl,这个 Perl 可以利用 GNU 的 GCC 编译器安装模块,而且通常比预装的 Perl 的版本更新。以下的安装过程只适用于 Solaris 系统的用户。
根据你的平台类型以及相应的 Solaris 版本下载对应的安装包。解压后,通过 pkgadd(1M) 进行安装。通常 Sunfreeware 提供的软件都将被安装在目录 /usr/local 中。参见下面的示例: # gunzip perl-5.8.5-sol10-sparc-local.gz # pkgadd -d perl-5.8.5-sol10-sparc-local
接着,按照命令行的提示完成安装过程。当安装结束时,应该看到类似下面的信息表明安装成功: Installation of was successful.
Perl 的程序文件安装在了 /usr/local/bin 目录中。因为 Solaris 预装的 Perl 在目录 /usr/bin 中有符号链接,你需要确保在环境变量 $PATH 中,安装目录的位置在 /usr/bin 之前。不过,重新创建一个符号链接指向新的 Perl 安装是我个人喜欢的方案: $ which perl /usr/bin/perl $ ls -l /usr/bin/perl lrwxrwxrwx 1 root other 19 May 18 12:09 /usr/bin/perl -> /usr/loca l/bin/perl
在安装需要的 Perl 模块之前,应该首先检查你的 Perl 的安装,看看是否已经安装了这些模块。当然,首先我们需要知道模块都安装在哪里。Perl 的解释器有一个搜索模块的目录列表。在 Perl 程序中,这个列表包含在全局数组 @INC 中(你完全不必理解这句话也可以继续下面的安装)。通过下面的方法可以检查 @INC 的内容: 所有的模块文件都以模块名字加上 .pm 扩展名保存在该目录中。特别的,对于 File::Temp 这样的模块,File 表示包(Package)。模块 File::Temp 相应地保存在库中的 File/ 子目录下,所以文件 File/Temp.pm 表明该模块已经安装: 如果发现上述模块没有安装,可以从 www.cpan.org(Comprehensive Perl Archive Network)浏览并下载所需的模块。在 CPAN 上,大多数模块都以 tar 压缩包的形式保存,以 .tar.gz 作为扩展名,并根据模块的包结构组织在相应的子目录中。根据模块名称,找到相应的安装包并下载到本地。需要注意的是,模块 URI 依赖于模块 MIME::Base64;而模块 IPC::Run 测试过程如果发现模块 IO:Pty 没有安装也会报错。所以,如果你的 Perl 中缺少这两个模块,请一并下载并先安装这两个模块。这里有一点特别的是,模块 IO:Pty 包含在模块 IO:Tty 的安装包中。最终,在我们的示例中,将有以下文件需要安装: 注意: 大多数模块的安装包中都包含 README 文件,在安装模块前请先阅读这些文件,了解是否需要特殊的安装过程,或者需要安装其它作为前置条件的模块。 安装 Perl 模块的过程基本上都是以下三步: 下面仅以模块 IO::Tty 为例,简要说明安装过程。首先,解压缩并展开下载下来的安装包: 然后在该安装目录中构建模块。构建过程需要执行下面三个命令: 其中 Makefile.PL 是一个 Perl 脚本程序,用于创建 Makefile 构建文件。命令 make 则具体构建模块,而 make test 则进行安装前的测试。构建过程同样需要 C 编译器,所以,构建前确保你具有可用的编译环境。我们使用的是 GNU 的 GCC 编译器。检查你的 $PATH 是否包含编译所需的程序路径。就我们的 Solaris 环境而言,参考下面的示例: 检查测试的报告,如果测试成功,则说明你已经准备好可以安装该模块了。安装模块只需要在安装目录中执行下面这个命令: 对于大多数操作系统而言,安装 Perl 模块需要 root 身份。 注意: 在模块 IPC::Run 的安装过程中,命令 make test 有时会报告类似如下的错误: # make test PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t t/adopt............ok 29/29 skipped: adopt not done yet t/binmode..........ok t/bogus............ok t/filter...........ok t/harness..........ok t/io...............ok t/kill_kill........ok t/parallel.........ok t/pty..............ok t/pump.............ok t/run..............NOK 70# Test 70 got: "Resource temporarily unavailable: write ( 6, '...9760 \"x\" chars...DOC2\n' ) at /tmp/IPC-Run-0.79/blib/lib/IPC/Run/IO.p m line 547\n" (t/run.t at line 350) # Expected: "" # t/run.t line 350 is: ok $x, ""; t/run..............FAILED test 70 Failed 1/267 tests, 99.63% okay t/signal...........ok t/timeout..........ok t/timer............ok t/win32_compile....ok Failed Test Stat Wstat Total Fail Failed List of Failed -------------------------------------------------- ----------------------------- t/run.t 267 1 0.37% 70 (1 subtest UNEXPECTEDLY SUCCEEDED), 29 subtests skipped. Failed 1/15 test scripts, 93.33% okay. 1/704 subtests failed, 99.86% okay. *** Error code 29 make: Fatal error: Command failed for target `test_dynamic'
我并不明白为何会发生这样的错误。不过,忽略这个错误而直接安装模块并没有发现什么问题。 [b]7.2.3. 安装 RCS 工具 [/b]
在安装 RCS 工具之前,请先检查你的系统中是否已经安装了这些工具。CVSweb 至少需要 rlog(1) 和 rcsdiff(1) 两个程序。限于篇幅,本节将仅以Solaris 为例,说明如何安装 RCS 工具。通过这里给出的链接,应可以找到适合其它系统的安装所需的安装包或者源代码。
还是老样子,对 Solaris 用户而言,可以从 Sunfreeware 下载我们需要的安装包。RCS 工具目前的版本是 5.7。此外,RCS 工具需要 GNU 的 Diffutils工具包。主流操作系统中都预装了这些工具(包括 cmp(1),diff(1),diff3(1) 和 sdiff(1) 等),当然也可以从 Sunfreeware 下载安装,如果你的系统中还没有的话。 [b]7.2.4. 安装 CvsGraph(可选) [/b]
CvsGraph 可以用于为 CVS 资源库中的文件生成其所有版本和分支的图形化展现。这是一个可选组件,你完全可以安全的跳过这一节。尽管安装这个组件需要额外安装一系列的组件,不过,相信为你的 CVS 用户提供尽可能好的使用体验会让你觉得这些努力都是值得的。
CvsGraph 需要安装以下支持库才能使用: zlib 通用数据压缩库。 libpng PNG 参考实现库。 GD 图形库。 典型安装的 Solaris 中应该已经包含了 zlib 和 libpng,分别对应于 SUNWzlib 和 SUNWpng 两个包。此外 Solaris 的 Companion CD 中还提供了对应于 GD 库的 SFWgd 安装包。因此,安装这些库之前,请先检查是否你的系统中已经安装了这些库。下面的例子说明了如何进行这种检查: $ pkginfo SUNWzlib SUNWpng SFWgd system SFWgd gd - GD Graphics Library GNOME2 SUNWpng PNG - Portable Network Graphics library system SUNWzlib The Zip compression library
除了利用这些安装包之外,Sunfreeware 也提供了对应上述库的安装包。所有通过 Sunfreeware 安装包安装的软件默认情况下都安装在 /usr/local 目录中,并且包名都以 SMC 作为前缀。这就使得我们可以方便的检查系统中是否已经安装有所需的包: $ pkginfo SMCzlib SMClpng SMCgd application SMCgd gd application SMClpng libpng application SMCzlib zlib
最后,当然你可以从这些库的官方网站下载源代码,在本地构建。不过,构建过程比较麻烦,而且非常容易出错。对于 Solaris 用户而言,最方便的方法当然是使用 Solaris 提供的包,因为 Solaris 的安装包工具极大地方便了软件的安装,维护以及卸载。
在安装了这些库之后,就可以开始安装 CvsGraph 了。因为这个软件的构建过程用到了一系列的 GNU 程序,尽管 Solaris 中也有这些程序对应的实现,但是它们对参数的支持和处理有所不同。如果你的操作系统环境中缺少这些 GNU 程序,构建过程将报告程序非法选项之类的错误而失败。所以,请先确保你的系统中安装有以下这些程序: GNU 的 Flex GNU 的 Bison GNU 的 m4 以我们的 Solaris 环境为例,从 Sunfreeware 下载上述三个软件安装即可。构建前,要确保在你的 $PATH 环境变量中,路径 /usr/local/bin 出现在/usr/bin 之前。下面的示例说明了安装之后的检查结果: $ pkginfo SMCbison SMCflex SMCm4 application SMCbison bison application SMCflex flex application SMCm4 m4 $ which bison flex m4 /usr/local/bin/bison /usr/local/bin/flex /usr/local/bin/m4
构建 CvsGraph 的过程参见下面的示例: gzip -dc cvsgraph-1.5.1.tar.gz | tar xf - cd cvsgraph-1.5.1 ./configure make
如果你的构建过程报告类似 GD 库没找到之类的错误,可以在执行 configure 命令时指出 GD 库的安装位置。如下面的示例: $ ./configure --with-gd-inc=/opt/sfw/inlcude --with-gd-lib=/opt/sfw/lib
如果你不知道这些 GD 库文件的安装位置,可以通过命令 pkgchk(1M) 检查包的安装位置。以安装 SFWgd 包为例,参见下面的示例: # pkgchk -l SFWgd
如果一切顺利,构建过程将生成程序文件 cvsgraph。将这个文件复制到合适的位置,比如 /usr/bin 或者 /usr/local/bin 目录(确保目标目录在 $PATH 环境变量中)。另外将安装目录中的 CvsGraph 配置文件 cvsgraph.conf 复制到适当位置,比如 /etc 或者 /usr/local/etc 中。 至此,CvsGraph 已经安装就绪可以被 CVSweb 调用了。因为 CvsGraph 需要 GD 库,所以,你可能需要配置你的运行环境,以便 CvsGraph 可以找到运行所需的库。在 Solaris 中,可以通过 crle(1) 命令配置库环境。参见下面的示例: # crle -l /lib:/usr/lib:/opt/sfw/lib
[b]7.2.5. 安装 Enscript(可选) [/b]
Enscript 用于将 ASCII 文件转换为 PostScript 并将结果保存在一个文件中或者直接发送到打印机。当然,我们所感兴趣的是这个软件的一个特性:语法加亮。在 CVSweb 中集成这个工具,可以在用户浏览并显示资源库中的源程序的内容时,提供语法加亮支持。
Enscript 的安装过程相对比较简单。目前有两个选择,从 Companion CD 安装(包名为 SFWenscr),或者从http://people.ssh.com/mtr/genscript/ 下载该软件的源代码(当前版本为 1.6.4 )在本地构建。前者当然是强烈推荐的方法。如果选择从源代码构建,则解开下载的文件后,参考安装目录中的安装说明 ./INSTALL 安装即可。以下是简要安装过程: gzip -dc enscript-1.6.4.tar.gz | tar xf - cd enscript-1.6.4 ./configure make make check make install
至此,我们已经安装了全部所需的软件,可以开始真正安装和配置 CVSweb 了。 [b]7.2.6. 安装 CVSWeb [/b]
从 http://people.freebsd.org/~scop/cvsweb/ 下载最新的 CVSweb 版本,展开到适当的目录。在展开后的目录中,文件 ./INSTALL 包含详细的安装信息。在继续下面的安装过程前,请仔细阅读该文件。 首先将文件 cvsweb.conf 复制到适当的配置文件目录中,典型的比如 /usr/local/etc/cvsweb/cvsweb.conf。然后将文件 cvsweb.cgi 复制到 Web 服务器运行 CGI 脚本的目录中。比如对于我们的 Solaris 10 中 Apache Web 服务器而言,为 /var/apache/cgi-bin 目录。编辑该脚本程序文件中的 $config变量(搜索"Configuration Area"可以找到该变量),使其指向你的配置文件。如果你的 Perl 不在标准的 /usr/bin 目录中,还需要修改该脚本程序的第一行。最后,将文件 css/cvsweb.css 复制到你的 Web 服务器目录中(比如 /var/apache/htdocs/css 目录)。 [b]7.2.7. 配置 CVSWeb [/b]
CVSWeb 的配置文件需要适当修改,以最终完成安装过程。打开安装在配置文件目录中配置文件,首先检查 @command_path 变量是否包含了我们之前安装的诸多工具所在的路径。然后是最重要的 @CVSrepositories 变量。你不必熟悉 Perl 的语法,根据配置文件给出的例子的格式,定义你自己的所有资源库的实例应该不成问题。我们没有定义 $cvstreedefault 变量的值,所以刚刚定义的资源库实例的列表中的第一项将作为默认的资源库实例。用户浏览资源库时,将默认首先显示该资源库的内容。 变量 $iconsdir 和 %ICONS 用于配置 CVSweb 所需的图标信息。典型的 Apache HTTP 服务器环境中包含这些图标,并且无需修改这些配置。样式文件cvsweb.ccs 用于 CVSweb,修改 $cssurl 变量指向该文件的实际安装位置即可。 现在,如果一切顺利,你应该已经可以访问 CVSweb 了。不过,我们将配置额外的集成工具,以提供附加的功能。 CvsGraph 用于图形化展示显示文件的版本和分支信息。变量 $allow_cvsgraph 和 $cvsgraph_config 用于配置该工具。只要正确配置 @command_path 变量,则无需修改默认的 $allow_cvsgraph 变量。如果没有指定 $cvsgraph_config 变量,则将使用 CvsGraph 的默认配置。 Enscript 用于语法加亮,通常只需要留意变量 $allow_enscript 的值即可。 至此,我们已经完成了 CVSweb 的基本配置。再次访问 CVSweb,你将发现资源库文件列表中的每个文件名的左侧多了一个图标,点击该图标,将显示该文件的图形化版本和分支信息。如果,你的资源库中有源程序,比如 C 或者 Java 源程序,你可以浏览并显示这些源程序的内容,此时应该是语法加亮的。 ViewCVS 和我们已经介绍的 CVSweb 一样,提供对资源库的 Web 访问支持。不过 ViewCVS 是基于 Python 编写的。基本上可以在这两个工具之间自由选择,通常没有必要同时安装这两个工具。不过,因为 Perl 语言本身可读性较差,这使得基于 Perl 的项目,比如 CVSweb 被认为将越来越难于维护。因此,现在很多用户基于这个原因而使用 ViewCVS。当然,最好还是基于自身的实际使用经验决定你最终使用哪个工具为你的 CVS 用户提供服务。 [b]8.1. 需求 [/b]
使用 ViewCVS 访问 CVS 资源库,你需要: Python-1.5.2 或其更新版本 RCS(Revision Control System) GNU 的 Diffutils 对 CVS 资源库的只读物理访问 尽管 ViewCVS 支持以独立的服务器模式运行,而无需第三方的 Web 服务器支持,我们推荐使用 Apache HTTP 服务器 或者其它可以运行 CGI 脚本的 Web 服务器。我们的介绍将是基于 Apache HTTP 服务器的。
另外,ViewCVS 可以集成其它工具提供附加功能。为了使用这些可选功能,你需要: GNU 的 Enscript -- 用于语法加亮 CvsGraph -- 用于版本和分支的图形化展示 ViewCVS 的安装过程相对 CVSweb 来说稍微简单一些,这主要是因为安装额外软件模块的过程稍微简单了一些。对于已经介绍过的软件安装过程,这里不再赘述,请参考相应的说明。 [b]8.2.1. 安装 Python [/b]
Python 是一种解释型的交互式面相对象编程语言。对于 Solaris 用户而言,安装 Python 比较简单:从 Sunfreeware 下载所需的安装包安装即可。安装 Python 之前,还需要安装 GNU 的 ncurses。此外,如果你还没有安装 GCC,则还需要安装 GCC 编译器或者 libgcc 共享库。参见 Sunfreeware上关于 Python 安装包的说明。
安装的简要过程如下(假设系统中已经安装了 GCC): gzip -d ncurses-5.4-sol10-sparc-local.gz gzip -d python-2.3.3-sol10-sparc-local.gz pkgadd -d ncurses-5.4-sol10-sparc-local pkgadd -d python-2.3.3-sol10-sparc-local
[b]8.2.2. 安装 RCS 和 Diffutils [/b]
ViewCVS 需要 RCS 工具,至少需要其中的 rlog(1),rcsdiff(1) 和 co(1) 程序。此外,还需要安装 GNU 的 Diffutils。关于这些工具的安装过程,在CVSweb 的安装过程中已有说明,请参考 安装 RCS 工具。 当前的 ViewCVS 的发布版本为 0.9.3。你可以从官方网站直接下载这个版本,开始后面的安装过程。不过,由于我们将同时安装用于 ViewCVS 的集成工具,而其中某些工具的最新版本可能与 ViewCVS 的 0.9.3 不相适应。为此,我们将安装 ViewCVS 的最新开发版本,目前为 1.0-dev 版。
ViewCVS 并没有提供可供直接下载的开发版本的压缩包。我们需要从它的 CVS 资源库中直接检出其最新版本程序。为此,你当然需要有适当的 CVS 客户端软件。假定我们用于检出的工作目录为 /tmp/viewcvs,检出的方法如下: # mkdir /tmp/viewcvs # cd /tmp/viewcvs # cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/ viewcvs login Logging in to :pserver:anonymous@cvs.sourceforge.net:2401/cvsroo t/viewcvs CVS password: # cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/ viewcvs co -P viewcvs ... # cd viewcvs # ls CHANGES cvsgraph.conf.dist tests website CVS elemx tools windows INSTALL lib tparse www README standalone.py viewcvs-install TODO templates viewcvs.conf.dist #
在上面的例子中,登录 CVS 服务器时输入空的密码,即直接回车即可。在检出的文件 ./INSTALL 中包含安装说明,安装前请仔细阅读该文件。
ViewCVS 提供了脚本程序 ./viewcvs-install 用于自动安装所需的文件。运行该脚本时,它将提示输入安装的根目录,默认为 /usr/local/viewcvs-VERSION,其中 VERSION 为相应的 ViewCVS 版本,在我们的例子中为 /usr/local/viewcvs-1.0-dev。安装过程将自动检查是否需要创建目标目录。除了程序文件外,如果安装程序检查到之前安装的文件,并且文件已经修改,将提示用户是否需要覆盖。因此,用户不必担心自己之前的文件,尤其是配置文件viewcvs.conf 被覆盖。
安装后的结果如下面的例子所示: 注意: ViewCVS 的 0.9.3 版本的安装结果与此不大相同,比如用于 CGI 的脚本程序保存的位置就不同。请参考特定版本的安装说明文件。 安装 ViewCVS 之后,就需要对其进行相应的配置,并将相应的 CGI 脚本程序安装到 Web 服务器中。 ViewCVS 的配置文件为 VIEWCVS_INSTALLATION_DIRECTORY/viewcvs.conf。其中 VIEWCVS_INSTALLATION_DIRECTORY 为安装目录。配置文件中包含对各个选项的详细说明。典型的情况下,需要修改以下这些选项: 选项 cvs_roots 同于指定允许用户访问的每个 CVS 资源库的路径,并同时赋予它们一个名称。每个资源库由 name: path 指定;多个资源库由逗号分隔(可以分行)。选项 default_root 用于指定默认的资源库,即用户访问 ViewCVS 将首先显示的资源库的名称。这里的名称即选项 cvs_roots 中定义的资源库对应的名称。如果没有指定该选项,则 ViewCVS 将首先显示一个资源库的列表。
ViewCVS 还有一个指定资源库的方式可能对某些用户非常有吸引力。选项 root_parents 用于指定一组目录,其中每一个目录中都可以有任意多个资源库实例。该选项使得用户不必每次增加一个资源库实例,就在选项 cvs_roots 中增加一项。只要这些资源库实例在同一父目录下,选项 roots_parents 中的一项记录就可以达到同样的目的了。当然,由于这种"自动"的方式将以目录名称作为资源库的名称,同时指定上述两个选项时,或者指定多个资源库父目录时,要小心处理名称冲突的问题。 提示: 两个非常著名的开源组织 Apache 和 SourceForge 分别使用了上述两种指定资源库的方式。其中 Apache 本身作为其为数不是很多的项目的管理者,因此将不同的项目作为同一资源库实例之下的不同模块,以便集中管理。因此 Apache 只要通过选项 cvs_roots 指定自己的资源库即可。而 SourceForge 为数量巨大的自由项目提供平台,每个项目具有独立的资源库实例,分别由各个项目自己的管理者管理。对于这样的组织,维护资源库的列表是不可能的,因此 root_parents 更适合它的需要。 指定了资源库之后,需要告诉 ViewCVS 在哪里可以找到 RCS 工具。修改 rcs_path 选项,指向安装 RCS 工具的目录。如果 ViewCVS 没有找到所需的RCS 工具,在浏览资源库中的文件时,将报告类似下面这样的错误: Error: Rlog output ended early. Expected RCS file "" ViewCVS 的脚本程序安装在 VIEWCVS_INSTALLATION_DIRECTORY/www/cgi/ 目录中。你可以在你的 Web 服务器执行 CGI 脚本的相应目录中建立到ViewCVS 脚本的符号链接,当然,这需要将 Web 服务器配置为允许追随符号链接。更简单的方法是将这些脚本直接复制到 Web 服务器的 CGI 脚本目录中。ViewCVS 的脚本中记录了 ViewCVS 的安装位置,因此不必担心这些脚本能否找到它们的配置文件及其它文件。现在,你可以通过浏览器访问刚刚安装的脚本,看看是否一切正常。接下来,我们将配置 ViewCVS 使用集成工具。 use_enscript -- 是否使用 Enscript enscript_path -- Enscript 所在的路径 use_cvsgraph -- 是否使用 CvsGraph cvsgraph_path -- CvsGraph 所在的路径 cvsgraph_conf -- CvsGraph 配置文件,通常接受默认值即可 注意: 如果你安装的 ViewCVS 的版本是 0.9.3,且安装的 Enscript 是较新的版本。则有可能二者不相匹配。此时,查看源程序内容时,ViewCVS 将报告与 Enscript 有关的"Broken pipe"之类的错误。 [Cederqvist-1.11.20]
本文的最新版本将发布在程序员咖啡馆网站上(建设中)。欢迎订阅我们的邮件组,以获得关于本文的正式发布及更新信息。全文在保证完整性,且保留全部版权声明(包括上述链接)的前提下可以在任意媒体转载--须保留此标注。 目录 前言
1. 关于本文
2. 读者对象
3. 关于范例
1. 概述 2. 安装
2.1. 从源代码安装
2.2. 从二进制安装(仅对 Solaris 用户)
3. 资源库
3.1. 创建资源库
3.2. 文件系统权限
3.2.1. 资源库所有者
3.2.2. 资源库根目录权限
3.2.3. 管理目录权限
3.2.4. 项目目录权限
4. 资源库访问方式
4.1. 资源库名称
4.2. 本地访问方式
5. 通过 SSH 访问
5.1. SSH 简介
5.2. SSH 服务器
5.3. 从 Unix 客户端访问 CVS
5.3.1. 公共密钥认证
6. 基于密码认证的服务器
6.1. 设置基于密码认证的服务器
6.2. 密码文件
6.3. 只读资源库访问
6.4. 匿名访问
7. CVSWeb
7.1. 需求
7.2. 安装
7.2.1. 安装 Perl(仅对 Solaris 用户)
7.2.2. 安装 Perl 模块
7.2.3. 安装 RCS 工具
7.2.4. 安装 CvsGraph(可选)
7.2.5. 安装 Enscript(可选)
7.2.6. 安装 CVSWeb
7.2.7. 配置 CVSWeb
8. ViewCVS
8.1. 需求
8.2. 安装
8.2.1. 安装 Python
8.2.2. 安装 RCS 和 Diffutils
8.2.3. 安装 ViewCVS
8.2.4. 配置 ViewCVS
参考文献
本文的第一部分请见: http://spaces.msn.com/members/stephensuen/Blog/cns !1p1G_DGhjYiYGmj6keNZQAcw!202.entry 目录
7.1. 需求
7.2. 安装
7.2.1. 安装 Perl(仅对 Solaris 用户)
7.2.2. 安装 Perl 模块
7.2.3. 安装 RCS 工具
7.2.4. 安装 CvsGraph(可选)
7.2.5. 安装 Enscript(可选)
7.2.6. 安装 CVSWeb
7.2.7. 配置 CVSWeb
对于只想浏览一下资源库的内容,或者偶然地下载几个资源库中的文件的用户而言,最理想的途经莫过于通过 Web 访问 CVS 的资源库了。CVS 本身并没有提供这样的支持,不过我们可以利用第三方的工具来为用户提供这样的访问支持。以下为最常见的两个基于 Web 的 CVS 访问工具: 其中的 CVSweb 源于 FreeBSD 项目,并很快成为非常流行的 CVS 资源库的 Web 访问工具。它本身实际上是一个基于 Perl 编写的软件,以 CGI 脚本的形式,配置在 Web 服务器中,提供对 CVS 资源库的 Web 访问支持。我们将首先介绍 CVSweb 的需求,以及如何安装和配置这个工具。在之后的章节中我们将介绍另一个同类工具,即 ViewCVS。 [b]7.1. 需求 [/b]
CVSweb 是基于 Perl 编写的 CGI 脚本程序,在服务器上需要安装有 Perl 5.6.0 或其更新版本。此外,以下 CVSweb 所需的 Perl 模块可能没有预先安装,而需要用户自己手工安装: File::Temp IPC::Run MIME::Types String::Ediff URI 作为 CGI 脚本程序,CVSweb 当然还需要一个可以运行 CGI 脚本的 Web 服务器。我们将使用大多数系统中预装的 Apache HTTP 服务器作为我们的 Web 服务器。另外,还需要 GNU 的 RCS 工具,包括其中的 rlog(1) 和 rcsdiff(1)。CVSweb 需要物理地存取资源库,任何外部访问方式或者基于密码认证的服务器访问方式都不适用。最后,CVSweb 还需要系统中安装有 CVS。
除了基本的 CVSweb 工具外,你可能还需要以下两个常用的用于扩展 CVSweb 的第三方工具。尽管这些是可选的,没有它们,CVSweb 也可以毫无问题地正常工作。但我们极力推荐安装这些工具: GNU 的 Enscript -- 用于语法加亮 CvsGraph -- 用于版本和分支的图形化展示 在这一节,我们将首先分别介绍如何安装作为 CVSweb 先决条件的软件和工具,然后介绍如何安装和配置 CVSweb 以及如何配置扩展的第三方工具。你的系统中有可能已经安装有我们所需的一些软件,请根据本文提供的信息,仔细检查你的系统。 [b]7.2.1. 安装 Perl(仅对 Solaris 用户) [/b]
Perl 通常都预装在你的系统中,一般情况下,你只需要跳到下一节,按照说明安装所需的额外模块即可。不幸的是,对于 Solaris 用户而言,由于安装Perl 的额外模块需要编译器,预装在 Solaris 中的 Perl 需要 Sun 的 Forte 中的编译器才能安装新的模块,而这个编译器不是免费的。这意味着你的Solaris 很可能没有所需的编译器,也就无法方便地安装后面的模块。解决这个问题的最简单办法是,从 www.sunfreeware.com 下载并安装一个最新的 Perl,这个 Perl 可以利用 GNU 的 GCC 编译器安装模块,而且通常比预装的 Perl 的版本更新。以下的安装过程只适用于 Solaris 系统的用户。
根据你的平台类型以及相应的 Solaris 版本下载对应的安装包。解压后,通过 pkgadd(1M) 进行安装。通常 Sunfreeware 提供的软件都将被安装在目录 /usr/local 中。参见下面的示例: # gunzip perl-5.8.5-sol10-sparc-local.gz # pkgadd -d perl-5.8.5-sol10-sparc-local
接着,按照命令行的提示完成安装过程。当安装结束时,应该看到类似下面的信息表明安装成功: Installation of was successful.
Perl 的程序文件安装在了 /usr/local/bin 目录中。因为 Solaris 预装的 Perl 在目录 /usr/bin 中有符号链接,你需要确保在环境变量 $PATH 中,安装目录的位置在 /usr/bin 之前。不过,重新创建一个符号链接指向新的 Perl 安装是我个人喜欢的方案: $ which perl /usr/bin/perl $ ls -l /usr/bin/perl lrwxrwxrwx 1 root other 19 May 18 12:09 /usr/bin/perl -> /usr/loca l/bin/perl
在安装需要的 Perl 模块之前,应该首先检查你的 Perl 的安装,看看是否已经安装了这些模块。当然,首先我们需要知道模块都安装在哪里。Perl 的解释器有一个搜索模块的目录列表。在 Perl 程序中,这个列表包含在全局数组 @INC 中(你完全不必理解这句话也可以继续下面的安装)。通过下面的方法可以检查 @INC 的内容: 所有的模块文件都以模块名字加上 .pm 扩展名保存在该目录中。特别的,对于 File::Temp 这样的模块,File 表示包(Package)。模块 File::Temp 相应地保存在库中的 File/ 子目录下,所以文件 File/Temp.pm 表明该模块已经安装: 如果发现上述模块没有安装,可以从 www.cpan.org(Comprehensive Perl Archive Network)浏览并下载所需的模块。在 CPAN 上,大多数模块都以 tar 压缩包的形式保存,以 .tar.gz 作为扩展名,并根据模块的包结构组织在相应的子目录中。根据模块名称,找到相应的安装包并下载到本地。需要注意的是,模块 URI 依赖于模块 MIME::Base64;而模块 IPC::Run 测试过程如果发现模块 IO:Pty 没有安装也会报错。所以,如果你的 Perl 中缺少这两个模块,请一并下载并先安装这两个模块。这里有一点特别的是,模块 IO:Pty 包含在模块 IO:Tty 的安装包中。最终,在我们的示例中,将有以下文件需要安装: 注意: 大多数模块的安装包中都包含 README 文件,在安装模块前请先阅读这些文件,了解是否需要特殊的安装过程,或者需要安装其它作为前置条件的模块。 安装 Perl 模块的过程基本上都是以下三步: 下面仅以模块 IO::Tty 为例,简要说明安装过程。首先,解压缩并展开下载下来的安装包: 然后在该安装目录中构建模块。构建过程需要执行下面三个命令: 其中 Makefile.PL 是一个 Perl 脚本程序,用于创建 Makefile 构建文件。命令 make 则具体构建模块,而 make test 则进行安装前的测试。构建过程同样需要 C 编译器,所以,构建前确保你具有可用的编译环境。我们使用的是 GNU 的 GCC 编译器。检查你的 $PATH 是否包含编译所需的程序路径。就我们的 Solaris 环境而言,参考下面的示例: 检查测试的报告,如果测试成功,则说明你已经准备好可以安装该模块了。安装模块只需要在安装目录中执行下面这个命令: 对于大多数操作系统而言,安装 Perl 模块需要 root 身份。 注意: 在模块 IPC::Run 的安装过程中,命令 make test 有时会报告类似如下的错误: # make test PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t t/adopt............ok 29/29 skipped: adopt not done yet t/binmode..........ok t/bogus............ok t/filter...........ok t/harness..........ok t/io...............ok t/kill_kill........ok t/parallel.........ok t/pty..............ok t/pump.............ok t/run..............NOK 70# Test 70 got: "Resource temporarily unavailable: write ( 6, '...9760 \"x\" chars...DOC2\n' ) at /tmp/IPC-Run-0.79/blib/lib/IPC/Run/IO.p m line 547\n" (t/run.t at line 350) # Expected: "" # t/run.t line 350 is: ok $x, ""; t/run..............FAILED test 70 Failed 1/267 tests, 99.63% okay t/signal...........ok t/timeout..........ok t/timer............ok t/win32_compile....ok Failed Test Stat Wstat Total Fail Failed List of Failed -------------------------------------------------- ----------------------------- t/run.t 267 1 0.37% 70 (1 subtest UNEXPECTEDLY SUCCEEDED), 29 subtests skipped. Failed 1/15 test scripts, 93.33% okay. 1/704 subtests failed, 99.86% okay. *** Error code 29 make: Fatal error: Command failed for target `test_dynamic'
我并不明白为何会发生这样的错误。不过,忽略这个错误而直接安装模块并没有发现什么问题。 [b]7.2.3. 安装 RCS 工具 [/b]
在安装 RCS 工具之前,请先检查你的系统中是否已经安装了这些工具。CVSweb 至少需要 rlog(1) 和 rcsdiff(1) 两个程序。限于篇幅,本节将仅以Solaris 为例,说明如何安装 RCS 工具。通过这里给出的链接,应可以找到适合其它系统的安装所需的安装包或者源代码。
还是老样子,对 Solaris 用户而言,可以从 Sunfreeware 下载我们需要的安装包。RCS 工具目前的版本是 5.7。此外,RCS 工具需要 GNU 的 Diffutils工具包。主流操作系统中都预装了这些工具(包括 cmp(1),diff(1),diff3(1) 和 sdiff(1) 等),当然也可以从 Sunfreeware 下载安装,如果你的系统中还没有的话。 [b]7.2.4. 安装 CvsGraph(可选) [/b]
CvsGraph 可以用于为 CVS 资源库中的文件生成其所有版本和分支的图形化展现。这是一个可选组件,你完全可以安全的跳过这一节。尽管安装这个组件需要额外安装一系列的组件,不过,相信为你的 CVS 用户提供尽可能好的使用体验会让你觉得这些努力都是值得的。
CvsGraph 需要安装以下支持库才能使用: zlib 通用数据压缩库。 libpng PNG 参考实现库。 GD 图形库。 典型安装的 Solaris 中应该已经包含了 zlib 和 libpng,分别对应于 SUNWzlib 和 SUNWpng 两个包。此外 Solaris 的 Companion CD 中还提供了对应于 GD 库的 SFWgd 安装包。因此,安装这些库之前,请先检查是否你的系统中已经安装了这些库。下面的例子说明了如何进行这种检查: $ pkginfo SUNWzlib SUNWpng SFWgd system SFWgd gd - GD Graphics Library GNOME2 SUNWpng PNG - Portable Network Graphics library system SUNWzlib The Zip compression library
除了利用这些安装包之外,Sunfreeware 也提供了对应上述库的安装包。所有通过 Sunfreeware 安装包安装的软件默认情况下都安装在 /usr/local 目录中,并且包名都以 SMC 作为前缀。这就使得我们可以方便的检查系统中是否已经安装有所需的包: $ pkginfo SMCzlib SMClpng SMCgd application SMCgd gd application SMClpng libpng application SMCzlib zlib
最后,当然你可以从这些库的官方网站下载源代码,在本地构建。不过,构建过程比较麻烦,而且非常容易出错。对于 Solaris 用户而言,最方便的方法当然是使用 Solaris 提供的包,因为 Solaris 的安装包工具极大地方便了软件的安装,维护以及卸载。
在安装了这些库之后,就可以开始安装 CvsGraph 了。因为这个软件的构建过程用到了一系列的 GNU 程序,尽管 Solaris 中也有这些程序对应的实现,但是它们对参数的支持和处理有所不同。如果你的操作系统环境中缺少这些 GNU 程序,构建过程将报告程序非法选项之类的错误而失败。所以,请先确保你的系统中安装有以下这些程序: GNU 的 Flex GNU 的 Bison GNU 的 m4 以我们的 Solaris 环境为例,从 Sunfreeware 下载上述三个软件安装即可。构建前,要确保在你的 $PATH 环境变量中,路径 /usr/local/bin 出现在/usr/bin 之前。下面的示例说明了安装之后的检查结果: $ pkginfo SMCbison SMCflex SMCm4 application SMCbison bison application SMCflex flex application SMCm4 m4 $ which bison flex m4 /usr/local/bin/bison /usr/local/bin/flex /usr/local/bin/m4
构建 CvsGraph 的过程参见下面的示例: gzip -dc cvsgraph-1.5.1.tar.gz | tar xf - cd cvsgraph-1.5.1 ./configure make
如果你的构建过程报告类似 GD 库没找到之类的错误,可以在执行 configure 命令时指出 GD 库的安装位置。如下面的示例: $ ./configure --with-gd-inc=/opt/sfw/inlcude --with-gd-lib=/opt/sfw/lib
如果你不知道这些 GD 库文件的安装位置,可以通过命令 pkgchk(1M) 检查包的安装位置。以安装 SFWgd 包为例,参见下面的示例: # pkgchk -l SFWgd
如果一切顺利,构建过程将生成程序文件 cvsgraph。将这个文件复制到合适的位置,比如 /usr/bin 或者 /usr/local/bin 目录(确保目标目录在 $PATH 环境变量中)。另外将安装目录中的 CvsGraph 配置文件 cvsgraph.conf 复制到适当位置,比如 /etc 或者 /usr/local/etc 中。 至此,CvsGraph 已经安装就绪可以被 CVSweb 调用了。因为 CvsGraph 需要 GD 库,所以,你可能需要配置你的运行环境,以便 CvsGraph 可以找到运行所需的库。在 Solaris 中,可以通过 crle(1) 命令配置库环境。参见下面的示例: # crle -l /lib:/usr/lib:/opt/sfw/lib
[b]7.2.5. 安装 Enscript(可选) [/b]
Enscript 用于将 ASCII 文件转换为 PostScript 并将结果保存在一个文件中或者直接发送到打印机。当然,我们所感兴趣的是这个软件的一个特性:语法加亮。在 CVSweb 中集成这个工具,可以在用户浏览并显示资源库中的源程序的内容时,提供语法加亮支持。
Enscript 的安装过程相对比较简单。目前有两个选择,从 Companion CD 安装(包名为 SFWenscr),或者从http://people.ssh.com/mtr/genscript/ 下载该软件的源代码(当前版本为 1.6.4 )在本地构建。前者当然是强烈推荐的方法。如果选择从源代码构建,则解开下载的文件后,参考安装目录中的安装说明 ./INSTALL 安装即可。以下是简要安装过程: gzip -dc enscript-1.6.4.tar.gz | tar xf - cd enscript-1.6.4 ./configure make make check make install
至此,我们已经安装了全部所需的软件,可以开始真正安装和配置 CVSweb 了。 [b]7.2.6. 安装 CVSWeb [/b]
从 http://people.freebsd.org/~scop/cvsweb/ 下载最新的 CVSweb 版本,展开到适当的目录。在展开后的目录中,文件 ./INSTALL 包含详细的安装信息。在继续下面的安装过程前,请仔细阅读该文件。 首先将文件 cvsweb.conf 复制到适当的配置文件目录中,典型的比如 /usr/local/etc/cvsweb/cvsweb.conf。然后将文件 cvsweb.cgi 复制到 Web 服务器运行 CGI 脚本的目录中。比如对于我们的 Solaris 10 中 Apache Web 服务器而言,为 /var/apache/cgi-bin 目录。编辑该脚本程序文件中的 $config变量(搜索"Configuration Area"可以找到该变量),使其指向你的配置文件。如果你的 Perl 不在标准的 /usr/bin 目录中,还需要修改该脚本程序的第一行。最后,将文件 css/cvsweb.css 复制到你的 Web 服务器目录中(比如 /var/apache/htdocs/css 目录)。 [b]7.2.7. 配置 CVSWeb [/b]
CVSWeb 的配置文件需要适当修改,以最终完成安装过程。打开安装在配置文件目录中配置文件,首先检查 @command_path 变量是否包含了我们之前安装的诸多工具所在的路径。然后是最重要的 @CVSrepositories 变量。你不必熟悉 Perl 的语法,根据配置文件给出的例子的格式,定义你自己的所有资源库的实例应该不成问题。我们没有定义 $cvstreedefault 变量的值,所以刚刚定义的资源库实例的列表中的第一项将作为默认的资源库实例。用户浏览资源库时,将默认首先显示该资源库的内容。 变量 $iconsdir 和 %ICONS 用于配置 CVSweb 所需的图标信息。典型的 Apache HTTP 服务器环境中包含这些图标,并且无需修改这些配置。样式文件cvsweb.ccs 用于 CVSweb,修改 $cssurl 变量指向该文件的实际安装位置即可。 现在,如果一切顺利,你应该已经可以访问 CVSweb 了。不过,我们将配置额外的集成工具,以提供附加的功能。 CvsGraph 用于图形化展示显示文件的版本和分支信息。变量 $allow_cvsgraph 和 $cvsgraph_config 用于配置该工具。只要正确配置 @command_path 变量,则无需修改默认的 $allow_cvsgraph 变量。如果没有指定 $cvsgraph_config 变量,则将使用 CvsGraph 的默认配置。 Enscript 用于语法加亮,通常只需要留意变量 $allow_enscript 的值即可。 至此,我们已经完成了 CVSweb 的基本配置。再次访问 CVSweb,你将发现资源库文件列表中的每个文件名的左侧多了一个图标,点击该图标,将显示该文件的图形化版本和分支信息。如果,你的资源库中有源程序,比如 C 或者 Java 源程序,你可以浏览并显示这些源程序的内容,此时应该是语法加亮的。 ViewCVS 和我们已经介绍的 CVSweb 一样,提供对资源库的 Web 访问支持。不过 ViewCVS 是基于 Python 编写的。基本上可以在这两个工具之间自由选择,通常没有必要同时安装这两个工具。不过,因为 Perl 语言本身可读性较差,这使得基于 Perl 的项目,比如 CVSweb 被认为将越来越难于维护。因此,现在很多用户基于这个原因而使用 ViewCVS。当然,最好还是基于自身的实际使用经验决定你最终使用哪个工具为你的 CVS 用户提供服务。 [b]8.1. 需求 [/b]
使用 ViewCVS 访问 CVS 资源库,你需要: Python-1.5.2 或其更新版本 RCS(Revision Control System) GNU 的 Diffutils 对 CVS 资源库的只读物理访问 尽管 ViewCVS 支持以独立的服务器模式运行,而无需第三方的 Web 服务器支持,我们推荐使用 Apache HTTP 服务器 或者其它可以运行 CGI 脚本的 Web 服务器。我们的介绍将是基于 Apache HTTP 服务器的。
另外,ViewCVS 可以集成其它工具提供附加功能。为了使用这些可选功能,你需要: GNU 的 Enscript -- 用于语法加亮 CvsGraph -- 用于版本和分支的图形化展示 ViewCVS 的安装过程相对 CVSweb 来说稍微简单一些,这主要是因为安装额外软件模块的过程稍微简单了一些。对于已经介绍过的软件安装过程,这里不再赘述,请参考相应的说明。 [b]8.2.1. 安装 Python [/b]
Python 是一种解释型的交互式面相对象编程语言。对于 Solaris 用户而言,安装 Python 比较简单:从 Sunfreeware 下载所需的安装包安装即可。安装 Python 之前,还需要安装 GNU 的 ncurses。此外,如果你还没有安装 GCC,则还需要安装 GCC 编译器或者 libgcc 共享库。参见 Sunfreeware上关于 Python 安装包的说明。
安装的简要过程如下(假设系统中已经安装了 GCC): gzip -d ncurses-5.4-sol10-sparc-local.gz gzip -d python-2.3.3-sol10-sparc-local.gz pkgadd -d ncurses-5.4-sol10-sparc-local pkgadd -d python-2.3.3-sol10-sparc-local
[b]8.2.2. 安装 RCS 和 Diffutils [/b]
ViewCVS 需要 RCS 工具,至少需要其中的 rlog(1),rcsdiff(1) 和 co(1) 程序。此外,还需要安装 GNU 的 Diffutils。关于这些工具的安装过程,在CVSweb 的安装过程中已有说明,请参考 安装 RCS 工具。 当前的 ViewCVS 的发布版本为 0.9.3。你可以从官方网站直接下载这个版本,开始后面的安装过程。不过,由于我们将同时安装用于 ViewCVS 的集成工具,而其中某些工具的最新版本可能与 ViewCVS 的 0.9.3 不相适应。为此,我们将安装 ViewCVS 的最新开发版本,目前为 1.0-dev 版。
ViewCVS 并没有提供可供直接下载的开发版本的压缩包。我们需要从它的 CVS 资源库中直接检出其最新版本程序。为此,你当然需要有适当的 CVS 客户端软件。假定我们用于检出的工作目录为 /tmp/viewcvs,检出的方法如下: # mkdir /tmp/viewcvs # cd /tmp/viewcvs # cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/ viewcvs login Logging in to :pserver:anonymous@cvs.sourceforge.net:2401/cvsroo t/viewcvs CVS password: # cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/ viewcvs co -P viewcvs ... # cd viewcvs # ls CHANGES cvsgraph.conf.dist tests website CVS elemx tools windows INSTALL lib tparse www README standalone.py viewcvs-install TODO templates viewcvs.conf.dist #
在上面的例子中,登录 CVS 服务器时输入空的密码,即直接回车即可。在检出的文件 ./INSTALL 中包含安装说明,安装前请仔细阅读该文件。
ViewCVS 提供了脚本程序 ./viewcvs-install 用于自动安装所需的文件。运行该脚本时,它将提示输入安装的根目录,默认为 /usr/local/viewcvs-VERSION,其中 VERSION 为相应的 ViewCVS 版本,在我们的例子中为 /usr/local/viewcvs-1.0-dev。安装过程将自动检查是否需要创建目标目录。除了程序文件外,如果安装程序检查到之前安装的文件,并且文件已经修改,将提示用户是否需要覆盖。因此,用户不必担心自己之前的文件,尤其是配置文件viewcvs.conf 被覆盖。
安装后的结果如下面的例子所示: 注意: ViewCVS 的 0.9.3 版本的安装结果与此不大相同,比如用于 CGI 的脚本程序保存的位置就不同。请参考特定版本的安装说明文件。 安装 ViewCVS 之后,就需要对其进行相应的配置,并将相应的 CGI 脚本程序安装到 Web 服务器中。 ViewCVS 的配置文件为 VIEWCVS_INSTALLATION_DIRECTORY/viewcvs.conf。其中 VIEWCVS_INSTALLATION_DIRECTORY 为安装目录。配置文件中包含对各个选项的详细说明。典型的情况下,需要修改以下这些选项: 选项 cvs_roots 同于指定允许用户访问的每个 CVS 资源库的路径,并同时赋予它们一个名称。每个资源库由 name: path 指定;多个资源库由逗号分隔(可以分行)。选项 default_root 用于指定默认的资源库,即用户访问 ViewCVS 将首先显示的资源库的名称。这里的名称即选项 cvs_roots 中定义的资源库对应的名称。如果没有指定该选项,则 ViewCVS 将首先显示一个资源库的列表。
ViewCVS 还有一个指定资源库的方式可能对某些用户非常有吸引力。选项 root_parents 用于指定一组目录,其中每一个目录中都可以有任意多个资源库实例。该选项使得用户不必每次增加一个资源库实例,就在选项 cvs_roots 中增加一项。只要这些资源库实例在同一父目录下,选项 roots_parents 中的一项记录就可以达到同样的目的了。当然,由于这种"自动"的方式将以目录名称作为资源库的名称,同时指定上述两个选项时,或者指定多个资源库父目录时,要小心处理名称冲突的问题。 提示: 两个非常著名的开源组织 Apache 和 SourceForge 分别使用了上述两种指定资源库的方式。其中 Apache 本身作为其为数不是很多的项目的管理者,因此将不同的项目作为同一资源库实例之下的不同模块,以便集中管理。因此 Apache 只要通过选项 cvs_roots 指定自己的资源库即可。而 SourceForge 为数量巨大的自由项目提供平台,每个项目具有独立的资源库实例,分别由各个项目自己的管理者管理。对于这样的组织,维护资源库的列表是不可能的,因此 root_parents 更适合它的需要。 指定了资源库之后,需要告诉 ViewCVS 在哪里可以找到 RCS 工具。修改 rcs_path 选项,指向安装 RCS 工具的目录。如果 ViewCVS 没有找到所需的RCS 工具,在浏览资源库中的文件时,将报告类似下面这样的错误: Error: Rlog output ended early. Expected RCS file "" ViewCVS 的脚本程序安装在 VIEWCVS_INSTALLATION_DIRECTORY/www/cgi/ 目录中。你可以在你的 Web 服务器执行 CGI 脚本的相应目录中建立到ViewCVS 脚本的符号链接,当然,这需要将 Web 服务器配置为允许追随符号链接。更简单的方法是将这些脚本直接复制到 Web 服务器的 CGI 脚本目录中。ViewCVS 的脚本中记录了 ViewCVS 的安装位置,因此不必担心这些脚本能否找到它们的配置文件及其它文件。现在,你可以通过浏览器访问刚刚安装的脚本,看看是否一切正常。接下来,我们将配置 ViewCVS 使用集成工具。 use_enscript -- 是否使用 Enscript enscript_path -- Enscript 所在的路径 use_cvsgraph -- 是否使用 CvsGraph cvsgraph_path -- CvsGraph 所在的路径 cvsgraph_conf -- CvsGraph 配置文件,通常接受默认值即可 注意: 如果你安装的 ViewCVS 的版本是 0.9.3,且安装的 Enscript 是较新的版本。则有可能二者不相匹配。此时,查看源程序内容时,ViewCVS 将报告与 Enscript 有关的"Broken pipe"之类的错误。 [Cederqvist-1.11.20]