[OpenBSD]

匿名CVS


目录


什么是匿名CVS?

匿名CVS是一种保持本地OpenBSD代码树与当前OpenBSD代码树同步的方法。 除了可以获得目前OpenBSD最尖端的新技术, 它还可以用来获取发行版勘误表中的补丁。

与其它源代码更新技术相比, 匿名CVS的主要优势是可以直接通过核心源代码库或其镜像站点进行更新, 这意味着你可以使用全套的CVS命令来控制系统的整合、更新及执行比较。可在中心源代码库上针对不同历史版本的数据库进行查询。

目前的OpenBSD项目有四个不断更新的源代码库以及两个历史代码库:

总而言之, 匿名CVS的真正魅力在于它是一个"宽容的"源代码控制系统 - 它尊重你对本地代码的修改并“尽可能”更新你的代码树, 而不是丢给你一个晦涩的错误清单, 让你不得不在继续前解决它们。

什么是CVS?

CVS 是一个源代码控制系统, 用来管理OpenBSD的源代码树。它保存着所有官方发行版及其变更的源代码资料库,同时允许开发人员可在其本地对资料库进行修正。 有两种访问源代码树的级别:

CVS的强悍之处在于它可以智能地将中央代码仓库的变更与用户在本地所做的变更整合到一起, 这意味着你当你修改了一个系统组件后再进行升级或更新时, 你的修改不会被"覆盖", CVS会尽最大的可能整合代码树变化和用户自定义变化。

当源代码上的变化和用户自定义变化无法完全整合时, CVS提供一个"软着陆", 向本地拷贝提供注释的变化, 不修改你本地的变化而继续更新其它你请求的模块。

开始使用匿名CVS

尽管你能从一个AnonCVS(CVS匿名服务器)下载整个代码树, 但是你通常可以通过"预装"FTP或OpenBSD发行版CD上的源文件建立原始的本地代码树来节省你大量的时间和带宽, 特别是在你要运行 -稳定版 时, 因为稳定版相对于发行版来说仅有少量文件进行了修改。

提取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.gz和xenocara.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是方便地重新获取或更新的本地源代码的一种方法。 你首先需要确定你是想将本地版本跟进为当前版或更新成稳定版。 当前版包含了所有代码最新的变动(甚至一分钟前刚更新的源代码), 相反稳定版仅包含了常规发行版加上勘误表上公布的补丁, 版本仅进行了少量的修正。想更深入的了解各种"风格"的OpenBSD, 看这里

一旦你决定跟进为哪种版本, 你必须确定使用哪个匿名CVS服务器, 下面提供了一个CVS服务器清单。

一旦你选择好了匿名CVS服务器, 你就可以开始使用它了。购买了CD的用户可以用上述方法从CD上的文件获得本地代码树。 如果你没有CD, 请使用下面的方法获取你的代码树, 这个方法将OpenBSD源代码树导入 /usr/src

	# cd /usr; cvs checkout -P src

上面的命令将会获取当前版的源代码树。 读者当中的很多人可能想获得稳定版的源代码树。获取稳定版的分支你必须在命令后面加上一个版本描述标签, 例如:

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

或者用 OPENBSD_4_3 表示想获得OpenBSD 4.3的稳定版代码树。

这里的 OPENBSD_4_4 标签是指包含了发行版源代码树及其应用补丁的源代码。

可用的匿名CVS服务器

请先看下面关于 ssh 和 rsh 的说明!

注意: 如果你的服务器信息有误, 请联系 beck@openbsd.org

你可能希望运行 traceroute(8) 来寻找理你最近的服务器。 如果一台服务器有问题, 你可以咨询他的维护者

通过cvs(1)获取源代码中加密代码的一些问题

重要说明: 这里有一些每个人应该知道的有关加密软件的一些问题:

使用cvs(1)的例子

注意: 如果你想从一个分支(例如稳定版)更新到当前版, 你需要使用cvs时添加 -A 标签, 除此以外这个标签很少用到。 一些以往的OpenBSD文档在很多例子中使用了这个标签, 但是除非确实需要, 我们不再推荐使用此标签。

一个例子:

$ cd /tmp
$ cvs -d anoncvs@anoncvs.ca.openbsd.org:/cvs get src/sys/arch/sparc
    [将CVS仓库上的文件拷贝到本地]
$ cd src/sys/arch/sparc
$ cvs log locore.s
    [显示文件的提交信息]
$ cvs diff -bc -r1.1 -r1.5 locore.s
    [显示版本1.1和1.5之间的变化]

为了使用一台cvs ``pserver'' (不使用ssh或rsh, 采用TCP直接连接) 你必须登录:

$ cvs -d :pserver:anoncvs@anoncvs.ca.openbsd.org:/cvs login
(Logging in to anoncvs@anoncvs1.ca.openbsd.org)
CVS password: anoncvs
    [This writes a line to ~/.cvspass (filename over-ridden by CVS_PASSFILE).]
    [An example line from my ~/.cvspass after typing 'blah' for the above    ]
    [password is:                                                            ]
    [:pserver:anoncvs@anoncvs5.usa.openbsd.org:/cvs Au'yc                    ]
    [After logging in ONCE every other use of the above CVSROOT will work.   ]
$ cvs -d :pserver:anoncvs@anoncvs.ca.openbsd.org:/cvs get ksrc-i386 ksrc-common
    [Allows you to retrieve ONLY that necessary to rebuild an i386 kernel.   ]

这里是用户怎样通过匿名cvs服务器有规律地更新源代码树:

更新ports, 和src类似:

上面的例子中, -q 标签是可选项, 目的仅是最小化cvs输出。 如果你希望欣赏满屏的输出,可以保留这个选项。

应用一个本地补丁模式的变化(这里用cd.c) 包含一个错误报告:

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

cvs(1)用户手册 (包含了CVS原始资料) 包含了更详尽的信息。

警告: 使用cvs时你应该仔细选择你的当前目录,无论是你指定的代码树根目录或是一个单独的空间(例如/tmp).一些命令例如"get"可以在当前目录下建立任意的子目录, 以后的升级会递归地充实这些子目录。

匿名cvs服务给经验不足的开发人员提供了一个学习CVS操作的机会并且在获得"委托"访问前完全涉及程序的开发 -- 因为显示有用的技能和高质量的成果后他们自然会获得开发者访问权限。同时, 程序员提供的补丁相对于CVS树会产生它们的"diff", 这将方便整合。

使用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的访问。 还有就是, 多数anoncvs服务器不再支持没有密码的访问, 因为在最近的ssh版本中因为安全原因已经禁用了此功能。 另外, 不要总想着开启ssh的压缩功能: CVS 已经压缩了。

用户可以在自己的目录 $HOME/.ssh/config 内进行下列配置文件的指定以避免上面提到的限制和缺陷:

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

CVS启动时有些杂乱; 要使它安静一些你可以这样:

	$ export CVS_CLIENT_PORT=-1

通过sup(1)镜像CVS仓库

那些想自己镜像CVS树的用户现在可以通过 anoncvs.usa.openbsd.org 或者 anoncvs3.usa.openbsd.org (它们是不同的机器)来实现。 注意这是cvs树, 不是用来获取源代码的代码树。 这仅在你想快速完成cvs操作(diff, annotate, 等) 或者你有多台计算机你想只从cvs服务器仅下载一次新数据时(你的其它计算机可以从本地的cvs镜像上获取代码树)。

一个supfile文件的简单例子:

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

这会将cvs树镜像到 /home/cvs 目录内,同时sup数据文件镜像到 /home/sup。 OpenBSD完整的cvs树大约3.5GB左右,自然它还在不断增加中。

建立一个匿名镜像

如果你想建立一个匿名的镜像站点并向公众提供服务, 请联络anoncvs 维护人员。 匿名镜像需要大约3.5GB的磁盘空间(但还在增加中!), 并且要为每个用户提供32MB的交换空间(这里假设用户进行的是大型的操作; 尽管一般操作占用的资源会少一些, 但是anoncvs仍会比ftp或sup消耗更多的资源). 这样的anoncvs服务器应该对附近区域的用户来说有极好的网络带宽。 这个文档对如何建立anoncvs服务器进行了描述。

最终注意事项

升级完你的代码树, 你应该在尝试构建前先阅读 /usr/src/Makefile 文件头部的注释内容, 同时, 如果可能你应该在 make build 先构建一个新的内核, 在某些情况下可能必须先rebuild和安装config工具你才能构建你的新内核, 如果 config GENERIC 这个步骤失败就极有可能属于这种情况。

强调一个重要的注意事项:通过rebuild源代码从发行版升级到当前版的代码树是很困难的, 因为各种软件的依赖包经常不明确, 因此, 我们建议你先安装一个最新的snapshot版后再从源码进行构建。


[back] www@openbsd.org
$OpenBSD: anoncvs.html,v 1.295 2009/02/20 18:17:06 beck Exp $