电脑技术学习

FreeBSD连载(62):升级系统

dn001

升级系统

  通过CD-Rom或Internet能够很方便的获得FreeBSD的新版本,由于每一次版本升级都修正了原 有版本中存在的问题,并增加了一些新特性。因此保持系统与最新版本相一致是十分有益的事情。

  升级内核的最直接想法是直接编译新内核,可以将新版本的内核展开到系统中的目录中,然后按照前面的步骤编译安 装新内核。这个方法在同一版本分支中作子版本的升级十分方便,例如从FreeBSD 2.2.7release升级到 2.2.8release。如果要从2.2.x版本升级到3.x版本,由于升级了主版本号,基本系统有了较大改动,因 此不仅要升级内核,还需要升级系统中的应用程序。此时一般应使用sysinstall中的Upgrade选项进行升级 。

  • 使用源码升级系统

  除了使用sysinstall直接升级之外,另一种升级方法是从系统的源代码中升级系统。这要安装要 升级版本的全部源码,从而能重新编译整个系统,包括系统内核和各个应用程序。可以通过下面的办法 手工安装系统源码。

# cd /cdrom/src
# ./install.sh

  重新编译整个系统是一个漫长的时间,根据使用的系统硬件不同,将需要几个小时的时间或更长 时间来完成这个任务。这个编译命令被称为 “make world” ,表示重新编译构建整个FreeBSD系统。

# cd /usr/src
# make world

  如果是从2.2版本或3.0-release升级到3.1-stable,那么直接这样make world会遇到问题。主要 原因是3.0-stable之后,系统的执行文件格式从原有的a.out转向了ELF(3.0-release的执行文件虽然是 ELF格式的,但其内核还保持a.out格式)。make world就提示用户使用make upgrade进行升级,因此使 用者就应该按照make world的提示进行操作:

# make upgrade

  其他的make目标有:

  buildworld:编译所有的源代码;

  installworld:安装buildworld编译产生的结果;

  world:执行buildworld和installworld,重新编译安装整个系统;

  aout-to-elf-build:编译从aout到elf升级系统所需的源代码;

  aout-to-elf-install:在aout-to-elf-build的基础上升级系统;

  aout-to-elf:依赖于aout-to-elf-build和aout-to-elf-install,进行a.out系统到elf系统的升级转换;

  update:进行系统升级,对于3.1-stable来讲即包括aout-to-elf;

  reinstall:在以前已经编译好的基础上,不重新编译而再次安装编译产生的结果;

  当使用源代码的方式重新编译系统时,由于需要使用编译工具和这些工具的缺省设置,这些工具就需要预先更新。编 译工具一般不需要升级,但编译工具的设置常常需要更新。当更新所有的源代码时,就不存在这个问题,但如果只是更新部分 源代码,就会出现这个问题。如果不打算更新所有的源代码,可以通过预安装的一个很小的系统升级软件包来解决编译工具设 置更新问题。例如需要更新Ports Collectin,但不打算更新全部源代码(从3.1-release升级到 3.1-stable),就需要安装31Upgrade.tgz。

  • 使用CVSup维护系统源码

  FreeBSD的源代码可以从安装介质上或从网络上下载得到。然而FreeBSD的开发是非常活跃的,系统更 新速度相当迅速,只有通过网络更新,才能保持源代码和其他FreeBSD使用者和开发者一致。但如果每次系统更新都从 网络下载全部源代码,不仅浪费了网络带宽,而且也没有必要,因为系统中的绝大部分代码并不会更新,每次系统升级更新的 只是其中很小的一部分。FreeBSD的全部源代码相当大,尤其对于慢速Internet连接的使用者,下载一次并不 是一件简单的任务。所以需要一种方法,使用户每次都只需要下载源代码的更改部分。

  软件开发中的版本维护工具是一种维护同一个软件的不同版本的方法,程序员可以通过这个工具同时维护不同的软件 版本。但虽然版本维护工具同时维护多个版本,但并不是将这些版本都独立保存一份,而只是保存一个基本版本及其他版本与 它的差异。因此,基于这种版本维护工具的方式,FreeBSD就提供了更新部分源代码的方法,使得用户每次只需要下载 更改过数据,这样使用者就能通过Internet与FreeBSD源代码树保持一致,保持最新版本的源代码,并节约了 网络带宽。

  为了维护FreeBSD的源代码树,需要一个版本控制软件包CVSup和用于维护源代码的300M硬盘空间。

  FreeBSD的所有源代码本来就是通过CVS(Concurrent Versions System)版 本维护系统进行维护的,所有的使用者都能读取同样的源代码,但只有FreeBSD的开发者能够更改这些源代码,这样就 保持了FreeBSD源代码的一致性。

  为了使用CVSup,首先要安装这个应用软件。这个软件被收录在Packages Collection中, 因此安装非常容易。可以使用pkg_add来完成这个任务:

# pkg_add cvsup-bin-16.0.tar.gz

  安装好CVSup软件之后,下一步就是配置一个配置文件,告诉cvsup从哪个服务器上同步源代码树, 以及同步哪些源代码。在安装CVSup的时候,还将安装cvsup的配置文件例子到/usr/share/examples/cvsup 目录下。

$ ls /usr/share/examples/cvsup
README           ports-supfile           secure-supfile
cvs-supfile      secure-cvs-supfile      stable-supfile
gnats-supfile    secure-stable-supfile   standard-supfile

  这个目录下的每个文件都用于一个特定目的,用来同步某个源代码树。其中standard-supfile用于 同步FreeBSD -current分支的源代码树,stable-supfile用于同步FreeBSD -stable分支的源代码树, ports-supfile用于同步Ports Collection的源代码,等等。通常这些例子文件中需要修改的只是需要连接 的cvsup服务器的名字,例如一个用于同步3.1-stable的配置文件supfile如下,这个文件是根据stable-supfile 生成的,仅仅修改了host的设置,以指向正确的主机。

*tag=RELENG_3_1
*default host=cvsup.FreeBSD.org
*default prefix=/usr
*default base=/usr/src/cvsup
*default release=cvs delete use-rel-suffix compress
src-all

  配置文件中使用tag的值用来标识要同步的不同源代码树。FreeBSD有多个版本,可以根据使用者的选择来 获得不同的版本的源代码。最常用的源代码是 -current分支的源代码和-stable分支的源代码,通常对于- current分支的源代码,需要设定 “tag=.” ,而stable分支就要指定版本号,这里为RELENG_ 3_1(或者使用RELENG_3表示3.x分支中的最新版本)。

  host的值用于指明用于同步源代码的服务器的名字,出于速度的考虑,最好使用离用户最近的CVSup服务器 。

  base指明用于放置cvsup的状态文件的目录,prefix指明用于放最终的源代码文件的目录。由于最终 的源代码和cvsup均要占用大量的磁盘空间,因此需要注意为其留下足够的空间。

  release指明源代码树是使用cvs进行版本维护的,后面为从服务器上传输源代码及处理本地文件时使用的 参数。

  src-all用于同步所有的源代码,为了节约磁盘空间和同步时间,可以只同步部分源代码。配置文件中给出了 同步部分源代码的配置情况,但被注释了。需要使用#符号将src-all注释掉,指明其他要同步的源代码,如port s-all。

  如果这个配置文件名为stable-supfile,那么就能使用下列命令启动cvsup:

# cvsup -L2 stable-supfile

  参数-L2标识使用第2级记录方式在屏幕上打印出cvsup同步源代码的同步过程,如果系统位于防火墙内, 会需要-P m参数以使用被动方式越过防火墙。

# cvsup -P m stable-supfile

  cvsup可以在X Window下运行,此时它使用图形界面。

  通常对于不太经常更新系统的管理员来讲,手工启动cvsup来更新系统源代码就够用了,如果要经常更新 源代码,就需要将cvsup命令放入crontab中执行。

  除了cvsup,FreeBSD也可以通过Email来提供源代码同步,这种方式称为CTM,与cvsup不同在于,cvsup 必须由本地系统启动以从远端下载,CTM是由远端服务器发送回来的。CTM对于网络连接比较慢,或只能通过Email 访问Internet的系统最方便,对于与Internet直接相连的系统,一般不需要使用CTM。

  由于使用了cvsup,所有的FreeBSD用户和开发者都能访问同一个源代码树,这样就维护了系统的一致性, 就使得只存在一个单一的FreeBSD系统,不致造成不同的版本混乱。

未完,待续。。。  

标签: