匿名 CVS 服务器
目录
匿名 CVS 是用来跟踪 OpenBSD 源代码,从而保证本地副本是最新的源代码的一种方法。
除了可以跟踪开发状态,还可以跟踪发行版本勘误的补丁。
匿名 CVS 与其它代码更新技术相比,主要的优势是直接与中心版本库或其镜像通信。
这意味着你可以使用全部的 CVS 命令来控制合并与更新,执行比较,
查询历史或其它针对中央版本库的操作。
OpenBSD 项目当前有 4 活跃的版本库,以及 2 个历史版本库:
- src - 存放 OpenBSD 操作系统的全部代码。
- ports - 存放 OpenBSD Ports。
- www - 存放全部的 OpenBSD 网页(包括本页)。
- xenocara - 存放 OpenBSD 活跃开发的 X.org v7 代码树。
- X11 和 XF4 - 存放 OpenBSD 对
XFree86-3 和 XFree86-4
项目移植的源代码。
它们只是用来保留历史,大多数用户没有理由使用,也不再被使用。
简而言之,使用匿名 CVS 真正强大之处在于它是一个"宽容的"的版本控制系统 -
它尊重你的本地修改,
并且以"最好的效果"更新你的整个代码树,
不会给你留下一系列神秘的问题,让你必须解决后才能继续工作。
CVS 是管理
OpenBSD 代码树的源代码控制系统。
它为所有官方发布源代码和修改实现了一个中央仓库,
允许开发者维护源代码的本地副本和他们的修改。有两个级别的源代码访问权限:
- 开发者拥有读写权限: 需要提交修改到源代码树的开发者必须在 OpenBSD
主机上有账号。对于与其他 OpenBSD 开发人员协同开发的人来说,
拥有此权限是很正常的事情。如果有人作出了很好的成绩,
显示了他们可以与团队一起工作,那么将会获得账号。
- 所有人拥有只读权限: 任何人都可以访问只读的 CVS 版本库。
可读写的 CVS 版本库通常有许多只读的 CVS 版本库镜像。
CVS 主要的强处是能对中心库的修改与本地副本的修改执行智能合并。它意味着,
如果你对某个模块作了修改,然后执行更新操 作,你的修改不会被风吹走,而且 CVS
还会对两者的修改做最佳的合并。
如果修改不能被完全合并,CVS 提供了"soft fallback",
它为你的本地副本提供带注解的修改,为你的版本保留一个未修改的副本,
然后继续更新你所请求的其它源代码模块。
当你从匿名 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.gz,sys.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 被设计为一种简便的方法来获得和更新你的源代码。首先,
你必须确定你要跟踪的是 -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_6 src
或用 OPENBSD_4_5 检出 4.5 的补丁分支源代码,等等。
OPENBSD_4_6 标签包含了发行版本源代码和已经应用的补丁。
请察看下面对 ssh vs. rsh 的注解!
- CVSROOT=anoncvs@anoncvs.fr.openbsd.org:/cvs
位置: Paris, France.
维护者: Landry Breuil.
协议: ssh.
每 2 小时从 anoncvs1.ca.openbsd.org 更新一次。
SSH 指纹:
(RSA1) 2048 28:ce:6b:61:76:d9:0e:6d:65:a1:5c:dd:e8:d7:57:42
(RSA) 2048 89:2e:84:9e:0c:f9:8d:21:41:0e:c5:80:41:27:14:c1
(DSA) 1024 7f:fb:68:2f:0f:c8:63:6c:0f:32:2c:03:d4:cd:0c:47
- CVSROOT=anoncvs@anoncvs.eu.openbsd.org:/cvs
位置: Stockholm University, Stockholm, Sweden.
维护者: Janne Johansson.
协议: ssh.
每 2 小时更新一次。
SSH 指纹:
(RSA) 2048 98:e6:80:5d:95:bb:e2:15:5e:19:4d:a3:e4:d0:bc:2c
(DSA) 2048 4c:d2:0a:90:b8:95:5d:37:3b:32:7b:77:5a:c5:ef:26
- CVSROOT=anoncvs@anoncvs1.usa.openbsd.org:/cvs
主机别名: anoncvs.usa.openbsd.org,anoncvs4.usa.openbsd.org。
位置: Internet Software Consortium, Redwood City, CA, USA.
维护者: Todd C. Miller.
协议: rsh, ssh, ssh 端口 2022, pserver.
每 2 小时更新一次。
SSH 指纹:
(RSA1) 1024 64:de:26:16:c2:ff:1b:c7:24:ed:a4:4a:d7:2f:69:3e
(RSA) 1024 49:67:9a:46:62:8a:3f:4e:b3:63:ca:d6:41:29:2a:2f
(DSA) 1024 a7:75:49:77:f3:47:d1:3c:5e:65:84:84:3b:03:f1:33
- CVSROOT=anoncvs@anoncvs3.usa.openbsd.org:/cvs
位置: National Center for Atmospheric Research, Boulder, CO, USA.
维护者: Todd C. Miller.
协议: rsh, ssh, ssh 端口 2022, pserver.
每 2 小时更新一次。
SSH 指纹:
(RSA1) 2048 80:cd:f6:fc:4f:0e:cb:80:6a:d0:6a:5e:dd:9e:5d:0a
(RSA) 2048 49:6f:4a:be:02:63:0d:c0:54:b0:57:f0:48:7f:ce:16
(DSA) 1024 f9:ab:fc:60:a3:15:8f:9c:47:24:9e:92:15:78:0d:f3
- CVSROOT=anoncvs@obsd.cec.mtu.edu:/cvs
位置: Michigan Technological University, Houghton, Michigan, USA.
维护者: Chris Linn.
协议: ssh.
每 2 小时更新一次。
SSH 指纹:
(RSA1) 2048 d7:91:a2:f4:d2:8d:81:7f:3c:44:91:8f:b5:b9:46:48
(RSA) 2048 de:f1:09:85:a0:db:60:97:d4:95:0d:07:80:4e:ee:68
(DSA) 1024 78:05:5c:c7:ce:7e:6f:c8:6d:b7:e2:7e:ba:06:1c:40
- CVSROOT=anoncvs@anga.funkfeuer.at:/cvs
位置: Vienna, Austria.
维护者: Martin Reindl.
协议: ssh, ssh 端口 2022.
每 2 小时从 anoncvs1.usa.openbsd.org 更新一次。
SSH 指纹:
(RSA) 2048 e4:a7:3a:ab:e1:a7:c8:eb:5c:f4:ff:38:95:6f:81:f2
(DSA) 2048 66:03:a3:bc:46:85:f3:6c:4b:6b:e3:d4:f5:5f:a6:c4
- CVSROOT=anoncvs@anoncvs1.ca.openbsd.org:/cvs
主机别名: anoncvs.ca.openbsd.org, openbsd.sunsite.ualberta.ca.
位置: Edmonton, Canada.
维护者: Bob Beck.
协议: ssh, ssh 端口 2022.
每 2 小时更新一次。
- CVSROOT=anoncvs@anoncvs.comstyle.com:/cvs
位置: Toronto, Canada.
维护者: Brad Smith.
协议: ssh, ssh 端口 2022.
每小时更新一次。
- CVSROOT=anoncvs@anoncvs.estpak.ee:/OpenBSD
位置: Elion, Tallinn, Estonia.
维护者: Rivo Nurges.
协议: ssh.
每 2 小时从 cvsync.de.openbsd.org 更新一次。
SSH 指纹:
(RSA) 1024 e1:12:fb:6b:e5:c0:6a:b3:f8:ca:b1:4c:20:fb:5e:07
(DSA) 1024 bb:5c:44:f4:d9:12:3b:22:08:a9:12:c5:0c:e7:db:49
- CVSROOT=anoncvs@anoncvs.skyrock.com:/cvs/openbsd
位置: Paris, France.
维护者: Frank Denis.
协议: ssh, ssh 端口 2022.
每 2 小时从 anoncvs3.usa.openbsd.org 更新一次。
SSH 指纹:
(RSA1) 2048 4d:60:d8:ab:bc:c6:29:64:b4:45:1b:98:2b:fe:40:7e
(RSA) 2048 01:f1:c4:25:c8:e3:0d:0e:7a:33:94:14:f4:9d:98:5f
(DSA) 2048 73:36:41:46:fd:0a:67:df:e6:c1:4a:6b:02:61:f4:61
- CVSROOT=anoncvs@mirror.osn.de:/cvs
位置: Nürnberg, Germany.
维护者: Armin Wolfermann.
协议: ssh.
每 3 小时更新一次。
SSH 指纹:
(RSA) 1024 f2:73:d2:f6:e3:01:ef:ca:3b:e7:6c:80:b6:bd:bb:84
(DSA) 1024 fb:33:05:62:96:20:cf:88:7e:10:cb:8d:91:72:57:32
- CVSROOT=anoncvs@anoncvs.silihost.hu:/cvs
位置: Budapest, Hungary.
维护者: Robert Nagy.
协议: ssh.
每 3 小时从 anoncvs.de.openbsd.org 更新一次。
- CVSROOT=anoncvs@anoncvs.jp.openbsd.org:/cvs
主机别名: kankoromochi.econ.nagasaki-u.ac.jp.
位置: Nagasaki University, Faculty of Economics, Nagasaki, Japan.
维护者: Suzuki Itoshi.
协议: ssh, pserver.
每 3 小时更新一次。
- CVSROOT=anoncvs@anoncvs.openbsd.lt:/cvs
位置: TVK, Cable TV and Internet Services, Taurage, Lithuania.
维护者: Donatas Budvytis.
协议: ssh.
每 3 小时从 cvsup.no.openbsd.org 更新一次。
- CVSROOT=anoncvs@anoncvs.no.openbsd.org:/cvs
主机别名: cvs.inet.no.
位置: Oslo, Norway.
维护者: Karl-Andre' Skevik.
协议: ssh 端口 2022.
每 4 小时更新一次。
- CVSROOT=anoncvs@openbsd.chem.uw.edu.pl:/cvs
位置: Warsaw, Poland.
维护者: Piotr Klein.
协议: ssh.
每 3 小时更新一次。
- CVSROOT=anoncvs@anoncvs.obsd.si:/cvs
主机别名: nina.kerberos.si.
位置: Ljubljana, Slovenia.
维护者: Mitja Muzenic.
协议: ssh.
每 2 小时更新一次。
- CVSROOT=anoncvs@anoncvs.netbsd.se:/cvs
位置: Stockholm, Sweden.
维护者: Viktor Holmlund.
协议: ssh.
每 3 小时从 rsync.de.openbsd.org 更新一次。
- CVSROOT=anoncvs@anoncvs.ini.uzh.ch:/cvs
位置: Institute of Neuroinformatics, University of Zurich, Zurich, Switzerland.
维护者: Stephan A. Rickauer.
协议: ssh, ssh port 2022.
每 2 小时更新一次。
SSH 指纹:
(RSA) 2048 d4:4e:3c:ed:9a:ba:5d:60:17:f8:46:32:a3:ef:3c:16
(DSA) 1024 05:0b:6d:a2:6e:69:d8:a5:33:7d:19:a6:f6:a7:8b:c5
- CVSROOT=anoncvs@anoncvs.spacehopper.org:/cvs
位置: London, United Kingdom.
维护者: Stuart Henderson.
协议: ssh, ssh port 2022.
每小时从 anoncvs.ca.openbsd.org 更新一次。
SSH 指纹:
(RSA1) 2048 31:fc:3d:e0:f7:6c:47:7e:48:f0:52:17:e6:19:74:f5
(RSA) 2048 e2:19:16:3f:a3:2e:eb:94:14:cd:5c:92:9a:6c:9a:8f
(DSA) 1024 ff:47:13:22:83:d1:6e:df:a0:f0:4f:18:31:cb:f2:28
- CVSROOT=anoncvs@mirror.sg.depaul.edu:/cvs
位置: DePaul University, Chicago, IL, USA.
维护者: Eric Pancer.
协议: ssh, ssh 端口 2022, pserver.
每 2 小时更新一次。
SSH 指纹:
(RSA1) 1024 5b:1c:cb:b7:5f:82:82:cc:af:13:21:a4:2c:c2:55:6b
(RSA) 1024 18:0f:97:2a:cf:6c:7f:d4:ca:2b:bc:c8:b9:56:2b:86
(DSA) 1024 65:cb:ce:7c:3e:29:5c:82:0b:9d:fa:b7:bb:e0:4b:47
- CVSROOT=anoncvs@mirror.planetunix.net:/cvs
位置: Chicago, IL, USA.
维护者: Brian Brombacher.
协议: ssh, ssh 端口 2022, pserver.
每 3 小时更新一次。
SSH 指纹:
(RSA1) 2048 e4:22:93:81:84:e0:68:8c:0b:d5:1f:78:cd:6f:fa:c3
(RSA) 2048 8f:42:bd:b0:a2:94:df:6b:af:1e:96:03:ea:68:03:d9
(DSA) 1024 26:51:e8:b3:38:88:dc:a8:2a:98:59:86:ab:40:bb:a4
- CVSROOT=anoncvs@openbsd.mirror.frontiernet.net:/cvs
位置: Frontier Communications, Rochester, NY, USA.
维护者: jared r r spiegel.
协议: ssh.
每 4 小时从 anoncvs.ca.openbsd.org 更新一次。
注意: 如果列在这里的你的服务器的信息不准确或者不清楚,请联系 beck@openbsd.org。
你可能想用
traceroute(8)
来找出距离你最近的服务器。当发现服务器有问题请报告给我们的维护者。
重要说明: 有一些与加密软件相关的问题每个人都应该注意:
- OpenBSD 源代码出自加拿大。根据加拿大个人研究和加拿大输出控制列表的描述,
从加拿大向世界各地输出加密软件是合法的。
- 然而,如果你不在美国或加拿大,你不应该从位于美国的匿名 CVS 服务器上获取
OpenBSD 源代码的加密软件部分。可能有问题的文件是...
- src/kerberosIV/*
- src/kerberosV/*
- src/lib/libdes/*
- src/lib/libc/crypt/crypt.c
- src/lib/libc/crypt/morecrypt.c
- src/sys/crypto
- src/sys/netinet
- src/usr.sbin/afs/src/rxkad/*
- XF4/xc-mit/lib/Xdmcp/Wraphelp.c
- XF4/xc-old/lib/Xdmcp/Wraphelp.c
- XF4/xc/lib/Xdmcp/Wraphelp.c
由于美国商业部门的的政策,加密软件只能从美国输出到加拿大。
注意: 如果你想更新某个分支(例如 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 服务器定期更新他的源代码的例子:
- 首先,开始获得初始化源代码树:
(如果你正在跟踪 current):
# cd /usr
# cvs -qd anoncvs@anoncvs.ca.openbsd.org:/cvs get -P src
(如果你正在跟踪 4.6 的补丁分支):
# cd /usr
# cvs -qd anoncvs@anoncvs.ca.openbsd.org:/cvs get -rOPENBSD_4_6 -P src
- 然后在任何时间,更新源代码树:
(如果你正在跟踪 current):
# cd /usr/src
# cvs -q up -Pd
(如果你正在跟踪 4.6 的补丁分支):
# cd /usr/src
# cvs -q up -rOPENBSD_4_6 -Pd
每次你运行此命令都会同步你的 /usr/src 树。它不会破坏你的任何本地修改,
相反会尝试合并修改。
- 说明: 如果你使用与最初检出源代码时不同的服务器,或者是从 CD
获得的源代码,你必须增加
-d anoncvs@anoncvs.ca.openbsd.org:/cvs 选项到 cvs 命令行。
# cd /usr/src
# cvs -d anoncvs@anoncvs.ca.openbsd.org:/cvs -q up -Pd
使用 ports与 src 类似:
-
(如果你正在跟踪 current):
# cd /usr
# cvs -qd anoncvs@anoncvs.ca.openbsd.org:/cvs get -P ports
(如果你正在跟踪 4.6 的补丁分支):
# cd /usr
# cvs -qd anoncvs@anoncvs.ca.openbsd.org:/cvs get -rOPENBSD_4_6 -P ports
- 然后在任何时间,更新此代码树:
(如果你正在跟踪 current):
# cd /usr/ports
# cvs -q up -Pd
(如果你正在跟踪 4.6 的补丁分支):
# cd /usr/ports
# cvs -q up -rOPENBSD_4_6 -Pd
在上述例子中,-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 树的"差异"补丁,
它很容易集成。
CVS 支持客户端使用三种方式访问服务器:
- ssh: 它可以用来访问匿名 CVS 服务器。由于它是加密的,
所以是被推荐的方式。
- rsh: 对于不能访问 ssh
的用户,rsh 可以用来访问某些服务器。
- pserver: pserver 主要供在阻塞其它两种访问方式的防火墙后面的用户使用。
注意: 对于希望使用 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
希望镜像 OpenBSD CVS 的用户可以使用 anoncvs.usa.openbsd.org 或
anoncvs3.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 镜像当前需要大约 3.5GB
磁盘空间(将会持续增长!),每个匿名 CVS 用户使用 32MB 的 swap
空间(假定用户执行大操作;当然小操作需要的资源也少,但是仍旧比 ftp 或 sup
消耗的多)。这些匿名 CVS 主机应当对于所服务器的地区具有极好的网络性能。有文档 描述了配置匿名 CVS 服务器的方法。
最后说明
更新源代码树之后,你应当在构建之前阅读文件 /usr/src/Makefile
中的注解。而且,如果可能,你应该先构建新内核,然后再
make build。某些情况下,你需要在构建新内核之前,
重构和安装 config 工具,尤其是在 config GENERIC
失败的时候。
由于经常有不明显的依赖关系,
使用重新构建从发行版本升级到当前开发版本可能相当困难。因此,
建议你在尝试从源代码构建之前先安装最新的快照。
www@openbsd.org
$OpenBSD: anoncvs.html,v 1.18 2010/05/11 06:30:58 ajacoutot Exp $