A.5. 使用 CTM

CTM 是保持远程目录树和中央服务器目录树同步的一种方法。 它被开发用于 FreeBSD 的源代码树,虽然其他人随着时间推移会发现它可以用于其他目的。 当前几乎没有,也或者只有很少的文档讲述创建 deltas 的步骤, 所以如果您希望使用 CTM 去做其它事情, 请联系 ctm-users 邮件列表了解更多信息。

A.5.1. 为什么我该使用 CTM?

CTM 会给您一份 FreeBSD 源代码树的本地副本。 代码树有很多的 flavors 可用。不管您是希望跟踪完整的 CVS 树还是只是一个分支, CTM 都会给您提供信息。 如果您是 FreeBSD 上的一个活跃的开发者,但是缺乏或者不存在 TCP/IP 连接,或者只是希望把变化自动发送给您, CTM 就是适合您的。对于最积极的分支 您将会每天获得三个以上的 deltas。 然而,您应该考虑通过邮件来自动发送。 升级的大小总是保证尽可能的小。 通常小于 5K,也偶然(十分之一可能)会有 10-50K,也不时地有个大的 100K+ 甚至更大的。

您也需要让自己了解直接和开发代码而不是预发行版本打交道的各种警告。这种情况会很显著, 如果您选择了 current 代码的话。强烈建议您阅读和 FreeBSD 保持同步

A.5.2. 使用 CTM 我需要做什么?

您需要两样东西:CTM 程序,还有初始的 deltas 来 feed it(达到 current 级别)。

CTM 程序从版本 2.0 发布以来 已经是 FreeBSD 的一部分了,如果您安装了源代码副本的话, 它位于 /usr/src/usr.sbin/ctm

您喂给 CTMdeltas 可以有两种方式,FTP 或者 email。 如果您有普通的访问 Internet 的 FTP 权限, 那么下面的 FTP 站点支持访问 CTM

ftp://ftp.FreeBSD.org/pub/FreeBSD/CTM/

或者看看这一小节镜像

FTP 访问相关的目录并取得 README 文件,从那里开始。

如果您希望通过 email 得到您的 deltas:

订阅一个 CTM 分发列表。 ctm-src-cur 支持最新的开发分支。 ctm-src-7 支持 7.X 发行分支, 等等。。(如果您不知道如何订阅邮件列表, 点击上面的列表名或者到 http://lists.FreeBSD.org/mailman/listinfo 点击您希望订阅的列表。 列表页包含了所有必要的订阅指导。)

当您开始接收到您邮件中的 CTM 升级时,您可以使用 ctm_rmail 程序来解压并应用它们。 事实上如果您想要让进程以全自动的形式运行的话,您可以通过在 /etc/aliases 中设置直接使用 ctm_rmail 程序。 查看 ctm_rmail 手册页了解更多细节。

注意:

不管您使用什么方法得到 CTM deltas,您都应该订阅 ctm-announce 邮件列表。 以后会有单独的地方提交有关 CTM 系统的操作的公告。 点击上面的邮件列表名并按照指示订阅邮件列表。

A.5.3. 第一次使用 CTM

在您开始使用 CTM delta 之前,您需要获得一个起始点。

首先您应该确定您已经有了什么。每个人都可以从一个目录开始。 您必须用一个初始的 空的 delta 来开始您的 CTM 支持树。曾经为了您的便利这些 起始 deltas 被有意的通过 CD 来发行, 然而现在已经不这样做了。

因为代码树有数十兆字节,您应该更喜欢从手头上已经有的东西开始。如果您有一张 -RELEASE CD 光盘,您可以从里面复制或者解压缩一份初始代码出来。 这会节省非常多的数据传输量。

您会发现这些初始的 deltas 名字的数字后面都有个 X (比如 src-cur.3210XEmpty.gz)。 后面加一个 X 的设计符合您的初始 seed 的由来。 Empty 是一个空目录。通常一个基本的从 Empty 开始的转换由 100 个 deltas 构成。顺便说一下,他们都很大!70 到 80 兆字节的 gzip 压缩的数据对于 XEmpty deltas 是很平常的。

一旦您已经选定了一个基本的 delta 开始,您就需要比这个数高的所有的 delta。

A.5.4. 在您的日常生活中使用 CTM

要应用 deltas,简单的键入:

# cd /where/ever/you/want/the/stuff
# ctm -v -v /where/you/store/your/deltas/src-xxx.*

CTM 能够理解被 gzip 压缩的 deltas,所以您不需要先 gunzip 他们,这可以节省磁盘空间。

除非觉得整个过程非常可靠, CTM 不会涉及到您的代码树的。您也可以使用 -c 标记来校验 delta, 这样 CTM 就不会涉及代码树; 它会只校验 delta 的完整性看看是否可以安全的用于您的当前代码树。

CTM 还有其他的一些参数, 查看手册页或者源代码了解更多信息。

这真的就是全部的事情了。每次得到一个新的 delta,就通过 CTM 运行它来保证您的代码是最新的。

如果这些 deltas 很难重新下载的话不要删除它们。 有些东西坏掉的时候您会想到保留它们的。 即使您只有软盘,也请考虑使用 fdwrite 来做一份副本。

A.5.5. 维持您本地的变动

作为一名开发者喜欢实验,改动代码树中的文件。 CTM 用一种受限的方式支持本地修改:再检查文件 foo 存在之前,首先查找 foo.ctm。如果这个文件存在, CTM 会对它操作而不是 foo

这种行为给我们提供了一种简单的方式来维持本地的改动: 只要复制您计划修改的文件并用 .ctm 的后缀重新命名。 然后就可以自由的修改代码了,CTM 会更新 .ctm 文件到最新版本。

A.5.6. 其他有趣的 CTM 选项

A.5.6.1. 正确的找出哪些将被更新

您可以确定变动列表, CTM 可以做到,在您的代码库上使用 CTM-l 选项。

这很有用如果您想要保存改动的日志, pre- 或者 post- 用各种风格处理修改的文件的纪录, 或者仅仅是想感受一下孩子般的疯狂。

A.5.6.2. 在升级前制作备份

有时您可能想备份将要被 CTM 升级所改动的所有文件。

指定 -B backup-file 选项会导致 CTM 备份将要被给定的 CTM delta 改动的所有文件到 backup-file

A.5.6.3. 限定受升级影响的文件

有时您可能对限定一个给定的 CTM 升级的范围感兴趣,也有可能想知道怎样从一列 deltas 中解压缩一部分文件。

您可以通过使用 -e-x 选项指定过滤规则表达式来控制 CTM 即将对之操作的文件列表。

例如,要从您保存的CTM deltas 集里解压缩出一个最新的 lib/libc/Makefile 文件,运行这个命令:

# cd /where/ever/you/want/to/extract/it/
# ctm -e '^lib/libc/Makefile' ~ctm/src-xxx.*

对于每一个在 CTM delta 中指定的文件,-e-x 选项按照命令行给定的顺序应用。 文件只有在所有的 -e-x 被应用之后标记为合格之后 才能被 CTM 操作。

A.5.7. CTM 未来的计划

其中几项:

  • CTM 中使用一些认证方式, 这样来允许察觉冒充的 CTM 补丁。

  • 整理 CTM 的选项, 它们变得杂乱而违反直觉了。

A.5.8. 杂项

也有一系列的 ports collection 的 deltas,但是人们对它的兴致还没有那么高。

A.5.9. CTM 镜像

CTM/FreeBSD 可以在下面的镜像站点通过匿名 FTP 下载。如果您选择通过匿名 FTP 获取 CTM, 请试着使用一个离您较近的站点。

如果有问题,请联系 ctm-users 邮件列表。

如果您在您附近找不到镜像或者镜像不完整, 试着使用搜索引擎比如 alltheweb.

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

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

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