- 硬碟空间
目前 -current source 的部分大约在 350MB 到 400MB,-stable source 的部分大约在 300MB 到 350MB。
ports 大约在 100MB,不过小档案很多,通常会吃掉 200MB 以上的空间。
所以我们建议腾出 1GB 以上的空间出来放,你总不会装了 source,结果不 make world 吧? 所以,再准备 obj 吧^^
如果你的 /usr 空间不够大,请把 /usr/src 跟 /usr/ports 用 ln link 到够大的地方。
- 安装 cvsup-16.1e
现在我们要利用 VCSup 的方式来升级 source,若还没有安装 CVSup 这套软体,可以利用下列方式来安装
# pkg_add ftp://freebsd.csie.nctu.edu.tw/pub/CVSup/cvsup-16.1e.tgz
- 设定
CVSup 的操作是靠设定一种叫做 "supfile" 的档案来达成的。supfile 档里有关 cvsup 的资讯包括了:
我们将会藉着回答这些问题来建立一个典型的 supfile。首先,我们先来看看 supfile 的整体架构。
supfile 是一个文字档。从 "#" 一直到该行末都会被视为是注解。空行或者是只有注解的那几行将会跳过。
剩下来的每一行都描述了一组使用者想得到的档案。这几行都是用 "collection" 为开头,是伺服器为一组逻辑上相关的档案所作的定义。collection 的名字就是告诉伺服器到底您要的是那些档案。在 collection 名之后可能会出现一个以上以空白隔开的栏位。这些栏位就回答了上面所述的问题。栏位可以分成两类:旗标栏位以及值栏位。旗标栏位的内容是一个独立存在的关键字,例如 "delete" 或是 "compress"。值栏位的内容是由一个关键字带头,后接不以空白隔开的 "=" 以及其值。例如 "release=cvs" 就是一个值栏位。
通常一个 supfile 会指定接收不止一个 collection。一个作法是明确地指出每个 collection 的相关栏位。但是这麽一来会让每一行变得太长,而且很不方便,因为所有 collection 相对应栏位的值都差不多。CVSup 因此提供了一个预设值的机制来避免这个问题。以特殊虚拟 collection 名 "*default" 为开头的每一行都会被视为是为后面的 collection 设定旗标和预设值。它也允许您为了某个 collection 来改变预设值,只要您在该 collection 中自行设定即可。您也可以靠着在 supfile 的中间设定 "*default" 来改变或增加预设值。
- 您想取得那些档案?
所有可以透过 CVSup 取得的档案都被分成几个有名字的 "collections"。 这里 描述了所有可以取得的 collections。在这个例子中,我们想要取得 FreeBSD 系统的主 source tree。有一个叫做 "src-all" 的巨大 collection 包含了除了有出口限制的编码程式以外的所有东西。在这个例子中我们假设我们处在美国或加拿大。因此,我们可以用 "cvs-crypto" 这个额外的 collection 来取得这些编码程式。建立这个 supfile 的第一步就是把我们想要的 collections 一行一行地列出来:
src-all
cvs-crypto
- 您想取得什麽版本?
基本上您可以藉着 CVSup 取得任何一个曾经存在过的版本的程式。这是因为 cvsupd 的伺服器是直接和 CVS repository 做沟通,而 CVS repository 又保存有所有版本的程式的关系。您可以藉由设定 "tag=" 以及 "date=" 这两个值栏位来指定您要的版本。
警告:您要仔细地检查 "tag=" 栏位是不是设对了。有的标签只对某些 collection 来说是正确的。如果您指定错标签或是拼错字了,CVSup 可能会把一些您不想删掉的档案给删除。特别注意的是,对於 "ports-*" collection 您只能使用 "tag=."。
"tag=" 栏位是在 repository 里建立一个符号标签。事实上有两种标签,版本标签以及分支标签。版本标签指的是某个特定的版本。它所代表的意义不管什麽时候都是相同的。在另一方面,分支标签不管在什麽时候指的都是某个发展线的最新版。因为分支标签并没有指定某个特定版本,它在明天所代表的意义和今天可能不同。
下面是一些使用者可能感兴趣的分支标签:
警告:在键入标签名的时候要特别小心一定要跟上面的一样。CVSup 无法分辨一个标签是合法或是不合法。如果您把标签名给拼错了,CVSup 会认为您指定了一个没有任何档案的标签。因此它就会把您所有已存在的 source 给删掉。
当您指定了一个分支标签后,通常您会收到该发展线最新版的档案。如果您想拿旧版的,可以藉由指定 "date=" 这个值栏位来达成。cvsup(1) 的使用手册里有提到该如何做。
对我们的范例而言,我们希望取得 FreeBSD-current。我们把下面这一行加在 supfile 的最前面:
*default tag=.
如果您又没指定 "tag=" 又没指定 "date=",则会产生一个很重要的特例。在这个情况之下,您将会从伺服器的 CVS repository 取得真正的 RCS 档而非某个特定版本。开发人员一般而言比较喜欢这种操作模式。藉由在他们自己的机器上维护一份 repository,他们可以浏览整个版本历史,也可以检视档案过去的版本。但是要做到这个所要付出的庞大代价就是磁碟空间。
- 您想从什麽地方取得这些东西?
我们用 "host=" 栏位来通知 cvsup 程式要去那里取得这些升级档。这个栏位可以填上任何一个 CVSup mirror 站台 的位址,您可以选一个离您最近的。在这个范例里,我们使用 FreeBSD 的主站台 "cvsup.FreeBSD.org":
*default host=cvsup.FreeBSD.org
您也可以在执行 cvsup 时用命令列叁数 "-h hostname" 来覆盖这个设定。
- 您想把这些东西放在您自己机器上的什麽地方?
"prefix=" 栏位告诉 cvsup 要把它收到的档案存放在那里。在这个范例里面,我们将会把 source 档直接放在我们的主 source tree "/usr/src" 下面。"src" 这个目录是在 collections 定义中隐含的,所以正确的宣告应该是:
*default prefix=/usr
- 您想把您的状态档放在那里?
cvsup 客户端程式会在 "base" 目录下维护一份状态档。这个档可以藉由记录到底您已经做了那些升级动作来加速 CVSup 的效率。我们使用标准 base 目录 "/usr/local/etc/cvsup":
*default base=/usr/local/etc/cvsup
如果没有在 supfile 中特别指定的话,这个设定是预设值,所以事实上我们并不需要写上面那行。
如果您的 base 目录不存在的话,现在就是建立的好时机。cvsup 程式在 base 目录不存在的情况下是不会动作的。
- supfile 杂项设定:
通常我们还会在 supfile 中多加一行:
*default release=cvs delete use-rel-suffix compress
"release=cvs" 命令伺服器从 FreeBSD 的主 CVS repository 取得资讯。通常的情况都是如此,但是除了我们讨论的这些范围之外还是有其他的选择。
"delete" 给了 CVSup 可以删档的权限。您最好每次都这麽指定,这样 CVSup 才能保证您的 source tree 能够完整升级。CVSup 会非常小心地只删除必要的档案。您自己加进的任何档案都不会被动到。
"use-rel-suffix" 是一个 ... 神秘的选项。如果您真的想要知道它是做什麽用的,请看 cvsup(1) 的使用手册。不然的话,就直接设定下去,不要管他。
"compress" 可以启动传输时的 gzip 压缩模式。如果您的网路连线是 T1 或是以上的高速,或许您不必用到压缩功能。它对传输的帮助是很大的。
- 把这些设定全放在一起:
下面就是我们这个范例的完整 supfile:
*default tag=.
*default host=cvsup.FreeBSD.org
*default prefix=/usr
*default base=/usr/local/etc/cvsup
*default release=cvs delete use-rel-suffix compress
src-all
cvs-crypto
- 先安装好 old source ports
因为 cvsup 时会吃掉 Server 许多的 resource,为了避开大量 checkout 的动作造成 Server 负荷过重,我们建议把旧的 source 以及 ports 先装好。
而且这样对於用数据机的 user 而言,会比较省时间。
你可以用 /stand/sysinstall 把 source 跟 ports 装好。
- 执行 CVSup
现在您可以试着开始升级了。执行的指令十分简单:
# cvsup -g -L 2 supfile
此处 "supfile" 指的当然就是您刚建立的 supfile。
因为在这个范例里面您必须升级您的 "/usr/src" 目录,所以您必须用 root 的身份来执行这个程式,不然 cvsup 就没有足够的权限。在您刚把设定档写好,而且之前又没有执行过这支程式的时候,第一次执行可能会让您有点紧张。
"-g" 选项是叫 cvsup 不要使用 GUI。如果您不是使用 X11 的话这个选项会自动执行,不然的话您必须指定它。
"-L 2" 叫 cvsup 详细地印出升级时更动到了那些档案。有三个层次可以选择,从 "-L 0" 到 "-L 2"。预设值是 0,表示除了错误讯息以外不印出任何东西。