[OpenBSD]

匿名 CVS 服务器


目录


什么是匿名 CVS?

匿名 CVS 是用来跟踪 OpenBSD 源代码,从而保证本地副本是最新的源代码的一种方法。 除了可以跟踪开发状态,还可以跟踪发行版本勘误的补丁。

匿名 CVS 与其它代码更新技术相比,主要的优势是直接与中心版本库或其镜像通信。 这意味着你可以使用全部的 CVS 命令来控制合并与更新,执行比较, 查询历史或其它针对中央版本库的操作。

OpenBSD 项目当前有 4 活跃的版本库,以及 2 个历史版本库:

简而言之,使用匿名 CVS 真正强大之处在于它是一个"宽容的"的版本控制系统 - 它尊重你的本地修改, 并且以"最好的效果"更新你的整个代码树, 不会给你留下一系列神秘的问题,让你必须解决后才能继续工作。

什么是 CVS?

CVS管理 OpenBSD 代码树的源代码控制系统。 它为所有官方发布源代码和修改实现了一个中央仓库, 允许开发者维护源代码的本地副本和他们的修改。有两个级别的源代码访问权限:

CVS 主要的强处是能对中心库的修改与本地副本的修改执行智能合并。它意味着, 如果你对某个模块作了修改,然后执行更新操 作,你的修改不会被风吹走,而且 CVS 还会对两者的修改做最佳的合并。

如果修改不能被完全合并,CVS 提供了"soft fallback", 它为你的本地副本提供带注解的修改,为你的版本保留一个未修改的副本, 然后继续更新你所请求的其它源代码模块。

开始使用匿名 CVS

当你从匿名 CVS 服务器下载全部源代码时,你可以从 OpenBSD CD 或 FTP 服务器"预加载",它会节约大量时间和带宽。尤其是当你运行 -stable 版本时,它更加有效,因为在 -release-stable 之间修改的文件很少。

将源代码从 CD 解压到 /usr/src(假设 CD 被挂接到 /mnt):

    # cd /usr/src
    # tar xzf /mnt/src.tar.gz
    # cd /usr
    # tar xzf /mnt/xenocara.tar.gz
    # tar xzf /mnt/ports.tar.gz
为了缩小那些只需要部分代码的用户的下载时间,从 FTP 服务器下载的源文件分为两部分。sys.tar.gz 包含了创建内核需要的文件, src.tar.gz 包含了其他"用户空间"工具。然而,你通常都需要全部安装它们。 假设下载的文件 src.tar.gzsys.tar.gzxenocara.tar.gz/usr 目录:
    # cd /usr/src
    # tar xzf ../sys.tar.gz
    # tar xzf ../src.tar.gz
    # cd /usr
    # tar xzf xenocara.tar.gz
    # tar xzf ports.tar.gz

并非所有人想要解压全部文件集,但是系统必须保持同步, 通常你需要配置全部代码树。

你也可以只用 cvs(1) "检出"源代码。 它在下节讨论。

此时,/usr/src 是良好的检出目录,全部的 cvs(1) 命令可以正确工作。

使用 CVS 获得和更新源码树

CVS 被设计为一种简便的方法来获得和更新你的源代码。首先, 你必须确定你要跟踪的是 -current,还是 patch branch。current 反映所有最新的修改,patch branch 包含正式的发行版本加上勘误发布的补丁,它更安全可靠。请参阅风味以了解关于 OpenBSD "风味"的更多信息。

一旦确定了要跟踪的代码树,你必须选择要使用的匿名 CVS 服务器。 下面是这些服务器的列表。

选择了使用哪个匿名 CVS 服务器之后,你就可以开始使用 cvs 了。对于拥有 CD 的人,可以用上述方法从 CD 获得源代码的检出副本。如果你手边没有 CD,使用下面的方法检出源代码。它将 OpenBSD 源代码树放到 /usr/src

        # cd /usr; cvs checkout -P src

上述命令将检出 current 源代码树。大多数人只需要补丁分支的源代码。 检出补丁分支的时候,必须在命令行指定标签。例如:

        # cd /usr; cvs checkout -P -rOPENBSD_4_3 src

或用 OPENBSD_4_2 检出 4.2 的补丁分支源代码,等等。

OPENBSD_4_3 标签包含了 4.3 发行版本源代码和已经应用的补丁。

可用的匿名 CVS 服务器

请察看下面对 ssh vs. rsh 的注解!

注意: 如果列在这里的你的服务器的信息不准确或者不清楚,请联系 beck@openbsd.org

你可能想用 traceroute(8) 来找出距离你最近的服务器。当发现服务器有问题请报告给我们的维护者

通过 cvs(1) 获取加密软件源代码

重要说明: 有一些与加密软件相关的问题每个人都应该注意:

cvs(1) 使用范例

注意: 如果你想更新某个分支(例如 patch branch)到 current,需要在 cvs 命令行增加 -A 标记,然而这个标记很少使用。一些 OpenBSD 的旧文档在许多例子中建议使用这个标记。除非绝对需要,我们不再建议使用这个标记。

一个使用匿名 CVS 服务器的例子:

$ cd /tmp
$ cvs -d anoncvs@anoncvs.ca.openbsd.org:/cvs co src/sys/arch/sparc
    [从版本库向你的机器复制文件]
$ cd src/sys/arch/sparc
$ cvs log locore.s
    [显示指定文家的提交信息]
$ cvs diff -bc -r1.1 -r1.5 locore.s
    [显示版本 1.1 与 版本 1.5 的差异]

为了使用 cvs "pserver"(用直接 TCP 连接代替使用 ssh 或 rsh),你必须登录一次:

$ cvs -d :pserver:anoncvs@anoncvs.ca.openbsd.org:/cvs login
(Logging in to anoncvs@anoncvs1.ca.openbsd.org)
CVS password: anoncvs
    [它向 ~/.cvspass (可以用 CVS_PASSFILE修改文件名称)增加一行。]
    [如上输入密码"blah"之后,我的 ~/.cvspass 文件样例行:      ]
    [:pserver:anoncvs@anoncvs5.usa.openbsd.org:/cvs Au'yc       ]
    [在输入一次后,每次使用这个 CVSROOT 都不需要再次登录。      ]
$ cvs -d :pserver:anoncvs@anoncvs.ca.openbsd.org:/cvs get ksrc-i386 ksrc-common
    [只获得重建 i386 内核的文件。                               ]

下面是某人使用匿名 CVS 服务器定期更新他的源代码的例子:

使用 ports与 src 类似:

在上述例子中,-q 是选项,只是用来减少 cvs 的输出信息。 对于喜欢看屏幕输出的人而言,可以省略。

创建补丁(此处是 cd.c),包含到问题报告中:

        # cd /usr
        # cvs diff -u src/sys/scsi/cd.c > /tmp/patch

cvs(1) 手册页 (包含于 CVS 源代码)有许多如何使用 CVS 的信息。

警告: 当使用 cvs 时要注意当前目录, 一般使用源代码树的根目录或者 /tmp。象“get” 这些命令会在当前目录创建任意深度的子目录,后续的更新也会递归的更新这些子目录树。

在获得"提交"权限之前,匿名 CVS 服务给新开发人员一个学习 CVS 操作的机会, 相当彻底的了解开发流程。-- 作为显示了有用的技能和高质量的工作结果, 他们之后会自然的获得开发权限。此外,大家可以提供相对于 CVS 树的"差异"补丁, 它很容易集成。

使用 rsh(1) 还是 ssh(1)?

CVS 支持客户端使用三种方式访问服务器:

注意: 对于希望使用 rsh 的用户,必须先设置环境变量 CVS_RSH 指向 rsh(1) 程序:

OpenBSD 的 CVS 客户端默认使用 ssh ("secure shell": OpenSSH) 与 CVS 服务器通信。

由于安全原因,许多 CVS 站点不再支持 rsh 或 pserver。 本地问题,例如防火墙,或者象 slirp 等有缺陷的协议仿真器也可能阻碍使用 rsh。 然而,如果希望使用 rsh,必须设置环境变量 CVS_RSH 指向 rsh(典型位置是 /usr/bin/rsh)。

如果本地策略阻塞 ssh 默认端口 22 的向外连接,某些服务器可以使用端口 2022。 注意,不是所有的匿名 CVS 服务器在端口 2022 接受 ssh 连接。此外,由于安全原因, 最近的 ssh 版本已经禁用了 none 加密算法,因此大多数匿名 CVS 服务器也不再支持此算法了。而且,不要试图打开压缩,因为 CVS 已经压缩了。

某些人可能需要修改配置文件 $HOME/.ssh/config 来避免上述缺陷和约束带来的麻烦:

        Host anoncvs.ca.openbsd.org
            Compression no
            Port 2022

CVS 启动有些吵闹;你可能想让它安静一些:

        $ export CVS_CLIENT_PORT=-1

使用 sup(1) 镜像 CVS 版本库

希望镜像 OpenBSD CVS 的用户可以使用 anoncvs.usa.openbsd.organoncvs3.usa.openbsd.org (它们是不同的主机)。注意这是 cvs 版本库, 不是 检出的代码树。它只对以下情况有用:执行快速 cvs 操作(diff, annotate,等),或者你有多个源代码树,并且只想传输一次数据(然后你可以从本地 cvs 镜像检出)。

一个 supfile 的例子:

        cvs host=anoncvs.usa.openbsd.org hostbase=/ base=/home delete

它会将 cvs 版本库镜像到 /home/cvs,保存 sup 数据文件到 /home/sup。全部的 OpenBSD cvs 版本库当前有 3.5 GB,当然将会持续增长。

配置匿名 CVS 镜像

如果你配置了新的公开服务匿名 CVS 镜像站点,请与匿名 CVS 的维护者联系。匿名 CVS 镜像当前需要大约 3.5GB 磁盘空间(将会持续增长!),每个匿名 CVS 用户使用 32MB 的 swap 空间(假定用户执行大操作;当然小操作需要的资源也少,但是仍旧比 ftp 或 sup 消耗的多)。这些匿名 CVS 主机应当对于所服务器的地区具有极好的网络性能。有文档 描述了配置匿名 CVS 服务器的方法。

最后说明

更新源代码树之后,你应当在构建之前阅读文件 /usr/src/Makefile 中的注解。而且,如果可能,你应该构建新内核,然后再 make build。某些情况下,你需要在构建新内核之前, 重构和安装 config 工具,尤其是在 config GENERIC 失败的时候。

由于经常有不明显的依赖关系, 使用重新构建从发行版本升级到当前开发版本可能相当困难。因此, 建议你在尝试从源代码构建之前先安装最新的快照。


OpenBSD www@openbsd.org
$OpenBSD: anoncvs.html,v 1.8 2008/10/24 19:56:03 tobias Exp $