A.5. 使用 CVSup

A.5.1. 概述

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

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

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

当您阅读 FreeBSD 文档和邮件列表时,您可能会看见 supSupCVSup 的前身,有着相似的目的。 CVSup 使用很多和 sup 相同的方式, 而且, 它还是用使用和 sup 的兼容的配置文件。 Sup 已经不再被 FreeBSD 项目使用了, 因为 CVSup 既快又有更好的灵活性。

A.5.2. 安装

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

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

A.5.3. CVSup 配置

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

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

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

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

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

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

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

A.5.3.1. refuse 文件

像上面提到的,CVSup 使用一种 pull 方法。基本上,这意味着您要连接到 CVSup 服务器,服务器说, “这有些您能下载的东西 ...”,然后您的客户端反应“好,我要这个, 这个,这个,还有这个。”在默认的配置中, CVSup 客户端会取回您在配置文件中选定的 collection 和标签的每个文件。 然而,并不总是您想要的, 尤其是您在同步 docports,或者 www 树 -- 大部分人都不能阅读四种或者五种 语言,因此他们不需要下载特定语言的文件。 如果您在 CVSup ports collection,您 可以通过单独指定每个 collection 来避免这个 (比如,ports-astrologyports-biology,等等取代简单的说明 ports-all)。然而,因为 docwww 树没有特定语言的 collection,您必须 使用 CVSup 许多极好的特性之一: refuse 文件。

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

refuse 文件的格式很简单; 它仅仅包含您不希望下载的文件和目录名。 例如,如果您除了英语和一些德语之外不会讲其他语言, 而且感觉不需要使用德语应用程序(或者除了英语之外任何语言的应用程序), 您可以把下面这些放在您的 refuse 文件里:

ports/arabic
ports/chinese
ports/french
ports/german
ports/hebrew
ports/hungarian
ports/japanese
ports/korean
ports/polish
ports/portuguese
ports/russian
ports/ukrainian
ports/vietnamese
doc/da_*
doc/de_*
doc/el_*
doc/es_*
doc/fr_*
doc/it_*
doc/ja_*
doc/nl_*
doc/no_*
doc/pl_*
doc/pt_*
doc/ru_*
doc/sr_*
doc/zh_*

等等其他语言(您可以通过浏览 FreeBSD CVS 仓库找到完整的列表)。

有这个非常有用的特性,那些慢速连接或者要为他们的 Internet 连接按时付费的用户就可以节省宝贵的时间因为他们不再需要 下载那些从来不用的文件。要了解 refuse 文件的更多信息以及其它 CVSup 的优雅的特性,请浏览它的 手册页。

A.5.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.5.5. CVSup 文件 collection

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

最常用的 collection 是 src-all,和 ports-all。其它的 collection 只被有着特定 目的的小部分人使用, 有些站点可能不全部支持。

cvs-all release=cvs

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

distrib release=cvs

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

doc-all release=cvs

FreeBSD 使用手册和其它文档的源代码。 其中不包含 FreeBSD web 站点的文件。

ports-all release=cvs

FreeBSD Ports Collection。

Important: 如果您不想升级全部的 ports-all(整个 ports 树), 而只是使用下面列出的一个子集, 请确保您总是升级了 ports-base 子 collection! 无论何时在 ports 构建下层构造有所改变的时候都会通过 ports-base 表现出来,事实上某些 改变会很快的被“实际的” ports 使用,因此,如果您只升级了 “实际的” ports 而他们使用了一些新的特性, 就有极大的可能编译会因一些神秘的错误信息而失败。 这种情况下非常快速的要做的事情 就是确保您的 ports-base 子 collection 更新到 最新。

ports-archivers release=cvs

存档工具。

ports-astro release=cvs

天文相关的 ports。

ports-audio release=cvs

声音支持。

ports-base release=cvs

Ports Collection 构建下部构造 - 位于 /usr/portsMk/Tools/ 子目录的 各种各样的文件。

Note: 请查看 重要警告:您应该 总是更新这个 子 collection,无论您更新 FreeBSD Ports Collection 的任何部分的时候!

ports-benchmarks release=cvs

基准。

ports-biology release=cvs

生物学。

ports-cad release=cvs

计算机辅助设计工具。

ports-chinese release=cvs

中文语言支持。

ports-comms release=cvs

通信软件。

ports-converters release=cvs

字符编码转换。

ports-databases release=cvs

数据库

ports-deskutils release=cvs

计算机发明前常出现在桌面上的东西。

ports-devel release=cvs

开发工具。

ports-dns release=cvs

DNS 相关软件。

ports-editors release=cvs

编辑器

ports-emulators release=cvs

其它操作系统的模拟器

ports-finance release=cvs

货币,金融相关应用程序。

ports-ftp release=cvs

FTP 客户端和服务器端工具。

ports-games release=cvs

游戏

ports-german release=cvs

德语支持。

ports-graphics release=cvs

图形图像工具。

ports-hungarian release=cvs

匈牙利语言支持。

ports-irc release=cvs

Internet 多线交谈(IRC)工具。

ports-japanese release=cvs

日语支持。

ports-java release=cvs

Java™ 工具。

ports-korean release=cvs

韩国语言支持。

ports-lang release=cvs

编程语言。

ports-mail release=cvs

邮件软件。

ports-math release=cvs

数值计算软件。

ports-mbone release=cvs

MBone 应用程序。

ports-misc release=cvs

杂样工具。

ports-multimedia release=cvs

多媒体软件。

ports-net release=cvs

网络软件。

ports-news release=cvs

USENET 新闻软件。

ports-palm release=cvs

Palm™ 系列软件支持。

ports-polish release=cvs

波兰语支持。

ports-portuguese release=cvs

葡萄牙语支持。

ports-print release=cvs

打印软件。

ports-russian release=cvs

俄语支持。

ports-security release=cvs

安全工具。

ports-shells release=cvs

命令行 shell。

ports-sysutils release=cvs

系统实用工具。

ports-textproc release=cvs

文本处理工具(不 包含桌面出版)。

ports-vietnamese release=cvs

越南语支持。

ports-www release=cvs

万维网(WWW)相关软件。

ports-x11 release=cvs

支持 X window 系统的 ports。

ports-x11-clocks release=cvs

X11 时钟。

ports-x11-fm release=cvs

X11 文件管理器。

ports-x11-fonts release=cvs

X11 字体和字体工具。

ports-x11-toolkits release=cvs

X11 工具包。

ports-x11-servers

X11 服务器。

ports-x11-wm

X11 窗口管理器。

src-all release=cvs

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

src-base release=cvs

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

src-bin release=cvs

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

src-contrib release=cvs

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

src-crypto release=cvs

FreeBSD 项目之外的 密码系统工具和库,通常在 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-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)。

www release=cvs

FreeBSD WWW 站点的源代码。

distrib release=self

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

gnats release=current

GNATS bug 跟踪数据库。

mail-archive release=current

FreeBSD 邮件列表存档。

www release=current

预处理过的 FreeBSD WWW 站点文件(不是源文件)。 用于 WWW 镜像站点。

A.5.6. 更多信息

CVSup FAQ 和关于 CVSup 的其它信息,请查看 CVSup 主页

大多数 CVSup 的和 FreeBSD 相关的讨论都在 FreeBSD 技术讨论邮件列表。软件的新版本在那发布, 还有 FreeBSD 公告邮件列表

问题和 bug 报告应该发给 程序作者

A.5.7. CVSup 站点

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

中央服务器, 主要镜像站点, 中国台湾, 中国大陆, 丹麦, 乌克兰, 俄罗斯, 冰岛, 加拿大, 匈牙利, 南非, 印度尼西亚, 吉尔吉斯斯坦, 哥斯达黎加, 土耳其, 圣马力诺, 奥地利, 巴西, 希腊, 德国, 意大利, 拉脱维亚, 挪威, 捷克共和国, 斯洛伐克共和国, 斯洛文尼亚, 新加坡, 新西兰, 日本, 法国, 波兰, 泰国, 澳大利亚, 爱尔兰, 爱沙尼亚, 瑞典, 瑞士, 科威特, 立陶宛, 罗马尼亚, 美国, 芬兰, 英国, 荷兰, 菲律宾, 葡萄牙, 西班牙, 阿根廷, 韩国.

(2004/10/26 16:33:28 UTC 更新)

中央服务器
  • cvsup.FreeBSD.org

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

  • cvsup2.FreeBSD.org

  • cvsup3.FreeBSD.org

  • cvsup4.FreeBSD.org

  • cvsup5.FreeBSD.org

  • cvsup6.FreeBSD.org

  • cvsup7.FreeBSD.org

  • cvsup8.FreeBSD.org

  • cvsup9.FreeBSD.org

  • cvsup10.FreeBSD.org

  • cvsup11.FreeBSD.org

  • cvsup12.FreeBSD.org

  • cvsup13.FreeBSD.org

  • cvsup14.FreeBSD.org

  • cvsup15.FreeBSD.org

  • cvsup16.FreeBSD.org

  • cvsup18.FreeBSD.org

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

  • cvsup3.tw.FreeBSD.org

  • cvsup4.tw.FreeBSD.org

  • cvsup5.tw.FreeBSD.org

  • cvsup6.tw.FreeBSD.org

  • cvsup7.tw.FreeBSD.org

  • cvsup8.tw.FreeBSD.org

  • cvsup9.tw.FreeBSD.org

  • cvsup10.tw.FreeBSD.org

  • cvsup11.tw.FreeBSD.org

  • cvsup12.tw.FreeBSD.org

  • cvsup13.tw.FreeBSD.org

中国大陆
  • cvsup.cn.FreeBSD.org

  • cvsup2.cn.FreeBSD.org

  • cvsup3.cn.FreeBSD.org

  • cvsup4.cn.FreeBSD.org

  • cvsup5.cn.FreeBSD.org

丹麦
  • cvsup.dk.FreeBSD.org

  • cvsup2.dk.FreeBSD.org

乌克兰
  • cvsup2.ua.FreeBSD.org

  • cvsup3.ua.FreeBSD.org

  • cvsup4.ua.FreeBSD.org

  • cvsup5.ua.FreeBSD.org

  • cvsup6.ua.FreeBSD.org

  • cvsup7.ua.FreeBSD.org

俄罗斯
  • cvsup.ru.FreeBSD.org

  • cvsup2.ru.FreeBSD.org

  • cvsup3.ru.FreeBSD.org

  • cvsup4.ru.FreeBSD.org

  • cvsup5.ru.FreeBSD.org

  • cvsup6.ru.FreeBSD.org

冰岛
  • cvsup.is.FreeBSD.org

加拿大
  • cvsup.ca.FreeBSD.org

匈牙利
  • cvsup.hu.FreeBSD.org

南非
  • cvsup.za.FreeBSD.org

  • cvsup2.za.FreeBSD.org

印度尼西亚
  • cvsup.id.FreeBSD.org

吉尔吉斯斯坦
  • cvsup.kg.FreeBSD.org

哥斯达黎加
  • cvsup1.cr.FreeBSD.org

土耳其
  • cvsup.tr.FreeBSD.org

圣马力诺
  • cvsup.sm.FreeBSD.org

奥地利
  • cvsup.at.FreeBSD.org

  • cvsup2.at.FreeBSD.org

巴西
  • cvsup.br.FreeBSD.org

  • cvsup2.br.FreeBSD.org

  • cvsup3.br.FreeBSD.org

  • cvsup4.br.FreeBSD.org

  • cvsup5.br.FreeBSD.org

希腊
  • cvsup.gr.FreeBSD.org

  • cvsup2.gr.FreeBSD.org

德国
  • cvsup.de.FreeBSD.org

  • cvsup2.de.FreeBSD.org

  • cvsup3.de.FreeBSD.org

  • cvsup4.de.FreeBSD.org

  • cvsup5.de.FreeBSD.org

  • cvsup6.de.FreeBSD.org

  • cvsup7.de.FreeBSD.org

  • cvsup8.de.FreeBSD.org

意大利
  • cvsup.it.FreeBSD.org

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

挪威
  • cvsup.no.FreeBSD.org

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

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

  • cvsup2.sk.FreeBSD.org

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

  • cvsup2.si.FreeBSD.org

新加坡
  • cvsup.sg.FreeBSD.org

新西兰
  • cvsup.nz.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

法国
  • cvsup.fr.FreeBSD.org

  • cvsup2.fr.FreeBSD.org

  • cvsup3.fr.FreeBSD.org

  • cvsup4.fr.FreeBSD.org

  • cvsup5.fr.FreeBSD.org

  • cvsup8.fr.FreeBSD.org

波兰
  • cvsup.pl.FreeBSD.org

  • cvsup2.pl.FreeBSD.org

  • cvsup3.pl.FreeBSD.org

泰国
  • cvsup.th.FreeBSD.org

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

  • cvsup2.au.FreeBSD.org

  • cvsup3.au.FreeBSD.org

  • cvsup4.au.FreeBSD.org

  • cvsup5.au.FreeBSD.org

  • cvsup6.au.FreeBSD.org

  • cvsup7.au.FreeBSD.org

爱尔兰
  • cvsup.ie.FreeBSD.org

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

瑞典
  • cvsup.se.FreeBSD.org

  • cvsup3.se.FreeBSD.org

瑞士
  • cvsup.ch.FreeBSD.org

科威特
  • cvsup1.kw.FreeBSD.org

立陶宛
  • cvsup.lt.FreeBSD.org

  • cvsup2.lt.FreeBSD.org

  • cvsup3.lt.FreeBSD.org

罗马尼亚
  • cvsup.ro.FreeBSD.org

  • cvsup1.ro.FreeBSD.org

  • cvsup2.ro.FreeBSD.org

  • cvsup3.ro.FreeBSD.org

美国
  • cvsup1.us.FreeBSD.org

  • cvsup2.us.FreeBSD.org

  • cvsup3.us.FreeBSD.org

  • cvsup4.us.FreeBSD.org

  • cvsup5.us.FreeBSD.org

  • cvsup6.us.FreeBSD.org

  • cvsup7.us.FreeBSD.org

  • cvsup8.us.FreeBSD.org

  • cvsup9.us.FreeBSD.org

  • cvsup10.us.FreeBSD.org

  • cvsup11.us.FreeBSD.org

  • cvsup12.us.FreeBSD.org

  • cvsup13.us.FreeBSD.org

  • cvsup14.us.FreeBSD.org

  • cvsup15.us.FreeBSD.org

  • cvsup16.us.FreeBSD.org

  • cvsup18.us.FreeBSD.org

芬兰
  • cvsup.fi.FreeBSD.org

  • cvsup2.fi.FreeBSD.org

英国
  • cvsup.uk.FreeBSD.org

  • cvsup2.uk.FreeBSD.org

  • cvsup3.uk.FreeBSD.org

  • cvsup4.uk.FreeBSD.org

荷兰
  • cvsup.nl.FreeBSD.org

  • cvsup2.nl.FreeBSD.org

  • cvsup3.nl.FreeBSD.org

  • cvsup5.nl.FreeBSD.org

菲律宾
  • cvsup1.ph.FreeBSD.org

葡萄牙
  • cvsup.pt.FreeBSD.org

  • cvsup2.pt.FreeBSD.org

  • cvsup3.pt.FreeBSD.org

西班牙
  • cvsup.es.FreeBSD.org

  • cvsup2.es.FreeBSD.org

  • cvsup3.es.FreeBSD.org

阿根廷
  • cvsup.ar.FreeBSD.org

韩国
  • cvsup.kr.FreeBSD.org

  • cvsup2.kr.FreeBSD.org

  • cvsup3.kr.FreeBSD.org