Chapter 17. 经由 CVS 获得原始码

Table of Contents
17.1. 取回系统和公用程序的原始码
17.2. 取回 pkgsrc

这一章(经由 CVS 获得原始码)是由 Reinoud Koornstra 所提供的

CVS (Concurrent Versions System) 可以被用来取回 NetBSD 的原始码或是保持 NetBSD 的原始码和官方网站同步更新。被维护的 有三大分支:the current source tree,奋战不懈的发展者所跟从或测试用 的,the 1.5 release source tree,整合了许多 patches 以修正许多问题 并填补被发现的安全漏洞(例如,ipf 中不连续的问题被修正了)而且增加 了某些东西或更新了版本,使得系统更安全,更稳定。举例来说,现在已经 可以使用 arp 指令完整地移除 arp table,这是一个新增的功能而不是一 个修正。而 1.4 release tree 只能利用额外的 patches 来修正。这一分支 将不再被发展。

17.1. 取回系统和公用程序的原始码

在 NetBSD 1.4.x 和 1.5.x 中,CVS 并不是基本系统的一部分。它将是 1.6 的一部分而且它已经被包含在 current 分支中。要安装 CVS (如 果你还没有拥有它),只要做以下的步骤:

% pkg_add ftp://ftp.netbsd.org/pub/NetBSD/packages/<OS Ver>/<arch>/All/cvs-1.11nb2.tgz
    

要获得 <OS Ver> 和 <arch>,可以执行

% sysctl kern.osrelease hw.machine_arch
    

为了保持原始码的清洁,请确定 /usr/src 是空的。

% setenv CVSROOT :pserver:anoncvs@anoncvs.netbsd.org:/cvsroot
% cd /usr
% cvs login
password: anoncvs
% cvs checkout -rnetbsd-1-5 -PA src
    

或是经由 ssh,使得数据是编码过的:

% setenv CVS_RSH ssh
% setenv CVSROOT anoncvs@anoncvs.netbsd.org:/cvsroot
% cd /usr
% cvs checkout -rnetbsd-1-5 -PA src
    

这将从 1.5 release 分支取得原始码。 若要获得 current 分支忽略此行 "-rnetbsd-1-5" in the last line. 若要获得 1.4 release 分支,使用 "-rnetbsd-1-4" in the last line.

若要更新你先前取得的 1.5 release 分支:

% setenv CVSROOT :pserver:anoncvs@anoncvs.netbsd.org:/cvsroot
% cd /usr
% cvs login 
password: anoncvs
% cvs -d $CVSROOT update -rnetbsd-1-5 -PAd src
    

或是经由 ssh:

% setenv CVS_RSH ssh
% setenv CVSROOT anoncvs@anoncvs.netbsd.org:/cvsroot
% cd /usr
% cvs -d $CVSROOT update -rnetbsd-1-5 -PAd src
    

若要更新 1.5 current 分支,忽略此行 "-rnetbsd-1-5" 若要更新 1.4 release 分支,使用 "-rnetbsd-1-4"

当你想要从不干净的分支进行更新,例如,当你重新建立了某一部份, 甚至从整个原始码分支或核心的原始码分支中重建,而又没有执行 make cleandir,你必须在原始码分支建立 obj 文件。

为了在不干净的分支中进行 "cvs update",obj 目录 是必须的。不干净的分支是表示你在其中建立了某一部份,例如,你 编译了分支的一部分或是全部,而没有在这一部份执行 "make clean",或是在整个分支中执行 "make" cleandir。 此外,cvs 会建立和某些可执行文件相同名称的目录,而将导致错误。 (好比有一个目录名称名为 "groff",你已经编译了 "groff"档案, 而 "cvs" 引进原始码之前,必须建立空目录。

所以在 /usr/src 中:

% makedir /usr/obj
% make obj
    

现在你已经可以进行 cvs update 了,或者在使用 cvs 之前,执行 make cleandir/usr/src 中。这是较为简单的工作用以取代 为了更新不干净的分之而建立 obj 目录。CVS 远比 sup 来得快。我 并不清楚取回全部原始码在实际上所需要的时间。我只有体验过 T1 专线和更快的联机,它大概需要一个小时多的时间来取得完整的原始 码。与你的联机品质有关。在使用调制解调器的情况,我没有实验过它要 花多久时间。无论如何,在使用调制解调器的情况中,你可以在数据传输 的过程中,进行压缩与解压缩。在这个例子你可以执行

% cvs -z5 checkout .........
    

or

% cvs -z5 -d $CVSROOT update ......
    

5 代表压缩的等级,你可以使用从 1 到 9 的数字,1 表示最快的 压缩方法,而 9 表示最好但最慢的压缩方法。请留意这将会使 cvs 服务器增加额外的负载。

Note: 在进行 cvs update 之前,你必须到: /usr/src/sys/arch/$arch/compile/$kernel_conf_name 执行 make clean 并移除目录,不然这也将 视为不干净的。请注意核心的原始码在 cvs update 的过程中的 完整性。

17.2. 取回 pkgsrc

Pkgsrc (package source),是已经移植到 NetBSD 上的软件工具 和链接库的集合。藉由这个简单的方法,你可以在 NetBSD 系统上 安装和反安装程序软件:它取来所需的原始码,做适当的 patch, configure 和 build,然后安装可执行档和在线手册。它保留了 纪录所有已安装的 packages 的数据库,纪录档案是属于那一个 package 和被存放在那里。

想要取得所有的 pkgsrc 可执行以下命令:

% setenv CVSROOT :pserver:anoncvs@anoncvs.netbsd.org:/cvsroot
% cd /usr
% cvs login 
(the password is: "anoncvs")
% cvs checkout -PA pkgsrc 
    

或经由 ssh:

% setenv CVS_RSH ssh
% setenv CVSROOT anoncvs@anoncvs.netbsd.org:/cvsroot
% cd /usr
% cvs checkout -PA pkgsrc
    

这将会建立 pkgsrc 目录在 /usr 中,且所有的 package 原始码将会被 储存在 /usr/pkgsrc

想要更新 pkgsrc 可以执行:

% setenv CVSROOT :pserver:anoncvs@anoncvs.netbsd.org:/cvsroot
% cd /usr
% cvs login
(the password is: "anoncvs")
% cvs -d $CVSROOT update -PAd pkgsrc
    

或经由 ssh:

% setenv CVS_RSH ssh
% setenv CVSROOT anoncvs@anoncvs.netbsd.org:/cvsroot
% cd /usr
% cvs -d $CVSROOT update -PAd pkgsrc
    

当你开始更新时,无论如何,请确定 pkgsrc 目录是干净的。 如果你无法确定,可以在 /usr/pkgsrc 中 执行 make clean