A.7. 使用 CVSup (已取消)

A.7.1. 简介

Warning:

cvsup 已是过时的项目, 不推荐继续使用, 应该使用 Subversion 代替它。

CVSup 是一个用于从远程服务器主机上的主 CVS 仓库发布和升级源代码树的软件包。 FreeBSD 的源代码维护在加利福尼亚州一台主开发服务器的 CVS 仓库里。 有了 CVSup , FreeBSD 用户可以很容易的保持他们自己的源代码树更新。

CVSup 使用所谓的升级 pull 模式。 在 pull 模式下, 客户端在需要的时候向服务器端请求更新。 服务器被动的等待客户端的升级请求。 因此所有的升级都是客户端发起的。 服务器决不会发送未请求的升级。 用户必须手动运行 CVSup 客户端获取更新, 或者设置一个 cron 作业来让它以固定的规律自动运行。

术语 CVSup 用大写字母写正是表示, 代表了完整的软件包。 它的主要组件是运行在每个用户机器上的客户端 cvsup , 和运行在每个 FreeBSD 镜像站点上的服务器端 cvsupd

Note:

csup 是用 C 语言对 CVSup 软件的重写。 它最大的好处是, 这个程序更快一些, 并且也不需要依赖于 Modula-3 语言, 因此也就不需要安装后者。 另外, 您可以直接使用它, 因为它是基本系统的一部分。 假如您决定使用 csup , 则可以跳过安装 CVSup 这一步, 并在文章中余下部分提到的 CVSup 改为 csup

A.7.2. 安装

安装 CVSup 最简单的方式就是使用 FreeBSD packages collection 中预编译的 net/cvsup 软件包。 如果您想从源代码构建 CVSup 您可以使用 net/cvsup port。但是预先警告一下:net/cvsup 依赖于 Modula-3 系统,会花费相当的时间和磁盘空间来下载编译。

Note:

如果想在没有安装 Xorg 的计算机, 例如服务器上使用 CVSup , 则只能使用不包含 CVSup GUInet/cvsup-without-gui

A.7.3. CVSup 配置

CVSup 的操作被一个叫做 supfile 的配置文件所控制。 在目录 /usr/share/examples/cvsup/ 下面有一些示例的 supfiles

supfile 中的信息解答了 CVSup 下面的几个问题:

在下面的章节里, 我们通过依次回答这些问题来创建一个典型的 supfile 文件。 首先, 我们描述一下 supfile 的整体构成。

supfile 是个文本文件。 注释用 # 开头,至行尾有效。 空行和只包含注释的行会被忽略。

每个保留行描述一批用户希望接收的文件。 每行以 collection , 由服务器端定义的合理的文件分组,的名字开头。 collection 的名字告诉服务器您想要的文件。 collection 名字结束或者有更多的字段, 用空格分隔。 这些字段回答了上面列出的问题。 字段类型有两种:标记字段和值字段。 标记字段由独立的关键字组成, 比如, deletecompress 。 值字段也用关键字开头, 关键字后面跟 = 和第二个词而没有空格。 例如, release=cvs 是一个值字段。

一个典型的 supfile 往往接收多于一个的 collection。 创建 supfile 的一种方式是明确的为每一个 collection 指定相关的字段。 然而,这样使得 supfile 的行变得特别长, 很不方便, 因为 supfile 中的所有 collection 的大部分字段都是相同的。 CVSup 提供了一个默认机制来避免 这些问题。 用特定的伪 collection 名 *default 开头的行可以被用来设置标记和值为 supfile 中随后的 collection 中的默认值。 默认值可以通过为这个 collection 自身指定不同的值来对单个的 collection 覆盖设置, 也可以在 mid-supfile 中通过附加的 *default 行改变或扩充。

知道了这些, 我们现在就可以开始创建一个用于接收和升级 FreeBSD-CURRENT 主源代码树的 supfile 文件了。

  • 您想接收哪些文件?

    通过 CVSup 可用的文件组织成叫做 collections 的名称组。 这些可用的 collection 在 随后的章节 中描述。 在这个例子里, 我们希望接收 FreeBSD 系统的完整的主代码树。 有一个单独的大的 collection src-all 让我们完成这个。 创建我们的 supfile , 的第一步, 我们简单的列出这些 collection,每个一行(在这个例子里, 只有一行):

    src-all
  • 您想要它们的哪个版本?

    通过 CVSup ,您实际上可以接收曾经存在的源代码的任何版本。 这是有可能的, 因为 cvsupd 服务器直接通过 CVS 仓库工作, 那包含了所有的版本。 您可以用 tag=date= 值字段指定一个您想要的版本。

    Warning:

    仔细的正确指定任何 tag= 字段。 有一些 tag 只对特定的 collection 文件合法。 如果您指定了一个不正确的或者拼写错误的 tag , CVSup 会删除您可能不想删除的文件。 特别地, 对 ports-* 使用 tag=.

    tag= 字段在仓库中表示为一个符号标签。 有两种标签, 修订标签和分支标签。 修订标签代表一个特定的修订版本。 它的含义是一成不变的。 分支标签, 另一方面, 代表给定开发线上给定时间的最新修订。 因为分支标签不代表一个特定的修订版本, 它明天的含义就可能和今天的有所不同。

    Section A.8, “CVS 标签” 包含了用户可能感兴趣的分支标签。 当在 CVSup 的配置文件中指定标签的时候, 必须用 tag= 开头 (RELENG_8 会变成 tag=RELENG_8) 。 记住只有 tag=. 可以用于 Ports Collection 。

    Warning:

    注意像看到的那样正确的输入标签名。 CVSup 不能辨别合法和不合法标签。 如果您拼写错了标签名, CVSup 会像您指定了一个没有任何文件的合法标签一样工作, 那会删除您已经存在的代码。

    当您指定一个分支标签的时候, 您通常会收到开发线上文件的最新版本。 如果您希望接收一些过时的版本,您可以通过用 date= 值字段指定一个日期来做到。 cvsup(1) 手册页解释了如何来做。

    对于我们的示例来说,我们希望接收 FreeBSD-CURRENT 。 我们在我们的 supfile 的开头添加这行:

    *default tag=.

    有一个重要的特例, 如果您既没指定 tag= 字段也没指定 date= 字段的情况。 这种情况下, 您会收到直接来自于服务器 CVS 仓库的真实的 RCS 文件, 而不是某一特定版本。 开发人员一般喜欢这种操作模式。 通过在他们的系统上维护一份仓库自身的副本, 他们可以浏览修订历史以及检查文件过去的版本。 然而, 这个好处是以大量的磁盘空间为代价的。

  • 您想从哪里获取他们?

    我们使用 host= 字段来告诉 cvsup 从哪里获取更新。 任何一个 CVSup 镜像站 都可以, 虽然您应该选择一个离您比较近的站点。 在这个例子里我们将使用一个虚拟的 FreeBSD 发布站点, cvsup99.FreeBSD.org

    *default host=cvsup99.FreeBSD.org

    您需要在运行 CVSup 之前把这个改成一个实际存在的站点。 在任何 cvsup 运行的特定时刻, 您都可以在命令行上使用 -h hostname 。 选项来覆盖主机设置。

  • 您想把它们放在您自己机器的什么地方?

    prefix= 字段告诉 cvsup 把接收的文件放在哪里。 在这个例子里, 我们把源代码文件直接放进我们的主源代码树 , /usr/srcsrc 目录已经隐含在我们选择接收的 collection 里了, 所以正确的写法是:

    *default prefix=/usr
  • cvsup 在哪里维护它的状态文件?

    CVSup 客户端在被叫做 base 的目录里维护了几个状态文件。 这些文件帮助 CVSup 更有效的工作, 通过跟踪您已经接收到哪些更新的方式。 我们将使用标准的 base 目录, /var/db

    *default base=/var/db

    如果您的 base 目录还不存在,现在最好创建它。 如果 base 目录不存在,cvsup 客户端会拒绝工作。

  • 其他的 supfile 设置:

    supfile 中有一些其他选项需要介绍一下:

    *default release=cvs delete use-rel-suffix compress

    release=cvs 显示服务器应该从 FreeBSD 的主 CVS 仓库中获取信息。 事实上总是这样的,但是也有可能会超出这个讨论的范围。

    deleteCVSup 权限删除文件。 您应该总是指定这个, 这样 CVSup 可以保证您的源代码树完全更新。 CVSup 很小心的只删除那些不再依赖的文件。 您拥有的任何额外的文件会被严格的保留。

    use-rel-suffix 是 ... 不可思议的。 如果您真的想了解它,查看 cvsup(1) 联机手册。 否则,就指定而不用担心这个。

    compress 启用 gzip 风格的信道压缩。 如果您的网络连接是 T1 或者更快, 您可能不想使用压缩。 否则,它非常有帮助。

  • 把它们放在一起:

    这是我们的示例的完整 supfile 文件:

    *default tag=.
    *default host=cvsup99.FreeBSD.org
    *default prefix=/usr
    *default base=/var/db
    *default release=cvs delete use-rel-suffix compress
    
    src-all

A.7.3.1. refuse 文件

像上面提到的, CVSup 使用一种 pull方法 。 基本上, 这意味着您要连接到 CVSup 服务器, 服务器说, 这有些您能下载的东西 ... , 然后您的客户端反应 好, 我要这个, 这个, 这个, 还有这个。 在默认的配置中, CVSup 客户端会取回您在配置文件中选定的 collection 和标签的每个文件。 为了获取部分文件,需要使用: refuse 文件。

refuse 文件本质上是告诉 CVSup 它不应该从 collection 中取得某些文件; 换句话说,它告诉客户端 拒绝 来自服务器的特定的文件。 refuse 文件可以在 base/sup/ 中找到 ( 或者,如果您没有, 应该创建一个 ) 。 base 在您的 supfile 中定义; 默认情况下, base 就是 /var/db , 这意味着默认的 refuse 文件就是 /var/db/sup/refuse

refuse 文件的格式很简单; 它仅仅包含您不希望下载的文件和目录名。 例如:

bin/
usr.bin/

那些慢速网络或者要为他们的互联网连接按时付费的用户就可以节省宝贵的时间因为他们不再需要下载那些从来不用的文件。 要了解 refuse 文件的更多信息以及如何优雅的使用 CVSup , 请查看它的联机手册。CVSup 的优雅的特性,请浏览它的 手册页。 用户谁是在低速链路或按分钟为他们的互联网连接付费就可以节省时间,因为他们将不再需要下载,他们将永远不会使用的文件。有关垃圾文件和其它CVSup的优雅特性的更多信息,请浏览它的手册页。

A.7.4. 运行 CVSup

您现在准备尝试升级了。 命令很简单:

# cvsup supfile

supfile 的位置当然就是您刚刚创建的 supfile 文件名啦。 如果您在 X11 下面运行, cvsup 会显示一个有一些可以做平常事情的按钮的 GUI 窗口。 按 go 按钮, 然后看着它运行。

在这个例子里您将要升级您目前的 /usr/src 树, 您将需要使用 root 账户来运行程序, 这样 cvsup 就有权限来更新您的文件。 刚刚创建了您的配置文件, 又从来没有使用过这个程序, 紧张不安是可以理解的。 有一个简单的方法不改变您当前的文件来做一次试验性的运行。 只要在方便的地方创建一个空目录, 并在命令行上作为一个额外的参数说明:

# mkdir /var/tmp/dest
# cvsup supfile /var/tmp/dest

您指定的目录会作为所有文件更新的目的路径。 CVSup 会检查您在 /usr/src 中的文件, 但是不会修改或删除。 任何文件更新都会被放到 /var/tmp/dest/usr/src 里了。 在这种方式下运行 CVSup 也会把它的 base 目录状态文件保持原样。 这些文件的新版本会被写到指定的目录。 因为您有 /usr/src 目录的读权限, 所以执行这种试验性的运行甚至不需要使用 root 用户。

如果您没有运行 X11 或者不喜欢 GUI, 当您运行 cvsup 的时候需要在命令行添加两个选项:

# cvsup -g -L 2 supfile

-g 告诉 CVSup 不要使用 GUI。如果您 没在运行 X11 这个是自动的,否则您必须指定它。

-L 2 告诉 CVSup 输出所有正在升级的文件的细节。 有三个等级可供选择, 从 -L 0-L 2 。 默认是 0 ,意味着除了错误消息什么都不输出。

还有许多其它的选项可用。 想要一个简短的列表, 输入 cvsup -H 。 要查看更详细的描述, 请查看联机手册。

一旦您对升级工作的方式满意了,您就可以使用 cron(8) 来安排规则的运行 CVSup 。 很显然的, 您不应该让 CVSup 通过 cron(8) 运行的时候使用它的 GUI 。

A.7.5. CVSup 文件 Collections

CVSup 可用的文件 collection 是分级组织的。 有几个大的 collection , 然后它们有分成更小的子 collection 。 接收一个大的 collection 等同于接收它的每一个子 collection 。 collection 的等级关系在下面列表中通过缩进的使用反映出来。

最常用的 collection 是 src-all

cvs-all release=cvs

FreeBSD 的主 CVS 仓库,包含密码系统的代码。

distrib release=cvs

FreeBSD 发行版本和镜像相关的文件。

projects-all release=cvs

FreeBSD 内部项目的代码库。

src-all release=cvs

FreeBSD 主代码,包含密码系统的代码。

src-base release=cvs

/usr/src 顶层的各式各样的文件。

src-bin release=cvs

单用户模式下可能用到的用户工具 (/usr/src/bin) 。

src-cddl release=cvs

采用了 CDDL 授权的实用工具和函数库 (/usr/src/cddl) 。

src-contrib release=cvs

FreeBSD 项目之外的工具和库, 通常不作修改 (/usr/src/contrib) 。

src-crypto release=cvs

FreeBSD 项目之外的密码系统工具和库, 通常不作修改 (/usr/src/crypto) 。

src-eBones release=cvs

Kerberos 和 DES (/usr/src/eBones) 。 目前的 FreeBSD 中不再使用使用。

src-etc release=cvs

系统配置文件 (/usr/src/etc) 。

src-games release=cvs

游戏 (/usr/src/games) 。

src-gnu release=cvs

GNU 公共许可协议的工具 (/usr/src/gnu) 。

src-include release=cvs

头文件 (/usr/src/include) 。

src-kerberos5 release=cvs

Kerberos5 安全包 (/usr/src/kerberos5) 。

src-kerberosIV release=cvs

KerberosIV 安全包 (/usr/src/kerberosIV) 。

src-lib release=cvs

库 (/usr/src/lib) 。

src-libexec release=cvs

通常被其它程序调用的系统程序 (/usr/src/libexec) 。

src-release release=cvs

生成 FreeBSD 版本必需的文件 (/usr/src/release) 。

src-rescue release=cvs

用于紧急修复的静态联编的程序; 请参见 rescue(8) (/usr/src/rescue) 。

src-sbin release=cvs

单用户模式的系统工具 (/usr/src/sbin) 。

src-secure release=cvs

密码相关库和命令 (/usr/src/secure) 。

src-share release=cvs

跨平台的共享的文件 (/usr/src/share) 。

src-sys release=cvs

内核 (/usr/src/sys) 。

src-sys-crypto release=cvs

内核密码系统代码 (/usr/src/sys/crypto) 。

src-tools release=cvs

维护 FreeBSD 的各种各样的工具 (/usr/src/tools) 。

src-usrbin release=cvs

用户工具 (/usr/src/usr.bin) 。

src-usrsbin release=cvs

系统工具 (/usr/src/usr.sbin) 。

distrib release=self

CVSup 服务器的配置文件。 用于 CVSup 镜像站。

gnats release=current

GNATS bug 跟踪数据库。

mail-archive release=current

FreeBSD 邮件列表存档。

A.7.6. 更多信息

CVSup FAQ 以及关于 CVSup 的其他信息, 请查看 CVSup 主页

多数与 FreeBSD 有关的 CVSup 讨论会在 FreeBSD 技术讨论邮件列表 进行。 这个软件的新版本会在 FreeBSD 公告邮件列表 里公布。

如果对于 CVSup 有任何问题, 或希望提交 bug 报告, 请参阅 CVSup FAQ

A.7.7. CVSup 镜像站

FreeBSD 的 CVSup 服务器运行于下列站点:

中央服务器, 主要镜像站点, 中国台湾, 丹麦, 乌克兰, 亚美尼亚, 俄罗斯, 南非, 巴西, 德国, 意大利, 拉脱维亚, 挪威, 捷克共和国, 斯洛伐克共和国, 斯洛文尼亚, 日本, 法国, 波兰, 澳大利亚, 爱尔兰, 爱沙尼亚, 瑞典, 瑞士, 立陶宛, 美国, 芬兰, 荷兰, 西班牙, 韩国.

( UTC 更新)

中央服务器
  • cvsup.FreeBSD.org

主要镜像站点
  • cvsup1.FreeBSD.org

  • cvsup3.FreeBSD.org

  • cvsup4.FreeBSD.org

  • cvsup5.FreeBSD.org

  • cvsup6.FreeBSD.org

  • cvsup7.FreeBSD.org

  • cvsup9.FreeBSD.org

  • cvsup10.FreeBSD.org

  • cvsup11.FreeBSD.org

  • cvsup12.FreeBSD.org

  • cvsup14.FreeBSD.org

  • cvsup15.FreeBSD.org

  • cvsup18.FreeBSD.org

中国台湾
  • cvsup.tw.FreeBSD.org

  • cvsup3.tw.FreeBSD.org

  • cvsup6.tw.FreeBSD.org

  • cvsup10.tw.FreeBSD.org

  • cvsup11.tw.FreeBSD.org

  • cvsup12.tw.FreeBSD.org

  • cvsup13.tw.FreeBSD.org

丹麦
  • cvsup.dk.FreeBSD.org

乌克兰
  • cvsup5.ua.FreeBSD.org

  • cvsup6.ua.FreeBSD.org

亚美尼亚
  • cvsup1.am.FreeBSD.org

俄罗斯
  • cvsup3.ru.FreeBSD.org

  • cvsup5.ru.FreeBSD.org

  • cvsup6.ru.FreeBSD.org

南非
  • cvsup.za.FreeBSD.org

巴西
  • cvsup2.br.FreeBSD.org

德国
  • cvsup.de.FreeBSD.org

  • cvsup2.de.FreeBSD.org

  • cvsup4.de.FreeBSD.org

  • cvsup5.de.FreeBSD.org

意大利
  • cvsup.it.FreeBSD.org

拉脱维亚
  • cvsup.lv.FreeBSD.org

挪威
  • cvsup.no.FreeBSD.org

捷克共和国
  • cvsup.cz.FreeBSD.org

斯洛伐克共和国
  • cvsup.sk.FreeBSD.org

斯洛文尼亚
  • cvsup.si.FreeBSD.org

日本
  • cvsup.jp.FreeBSD.org

  • cvsup2.jp.FreeBSD.org

  • cvsup3.jp.FreeBSD.org

  • cvsup4.jp.FreeBSD.org

  • cvsup5.jp.FreeBSD.org

  • cvsup6.jp.FreeBSD.org

法国
  • cvsup3.fr.FreeBSD.org

  • cvsup5.fr.FreeBSD.org

  • cvsup8.fr.FreeBSD.org

波兰
  • cvsup.pl.FreeBSD.org

澳大利亚
  • cvsup.au.FreeBSD.org

爱尔兰
  • cvsup.ie.FreeBSD.org

  • cvsup2.ie.FreeBSD.org

爱沙尼亚
  • cvsup.ee.FreeBSD.org

瑞典
  • cvsup.se.FreeBSD.org

瑞士
  • cvsup.ch.FreeBSD.org

立陶宛
  • cvsup.lt.FreeBSD.org

美国
  • cvsup1.us.FreeBSD.org

  • cvsup3.us.FreeBSD.org

  • cvsup4.us.FreeBSD.org

  • cvsup5.us.FreeBSD.org

  • cvsup7.us.FreeBSD.org

  • cvsup9.us.FreeBSD.org

  • cvsup11.us.FreeBSD.org

  • cvsup12.us.FreeBSD.org

  • cvsup13.us.FreeBSD.org

  • cvsup14.us.FreeBSD.org

  • cvsup15.us.FreeBSD.org

  • cvsup18.us.FreeBSD.org

芬兰
  • cvsup.fi.FreeBSD.org

荷兰
  • cvsup.nl.FreeBSD.org

  • cvsup2.nl.FreeBSD.org

  • cvsup3.nl.FreeBSD.org

西班牙
  • cvsup.es.FreeBSD.org

  • cvsup2.es.FreeBSD.org

  • cvsup3.es.FreeBSD.org

韩国
  • cvsup.kr.FreeBSD.org

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.