62 FreeBSD连载:升级系统

升级系统通过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源代码树保持一致 , 保持最新版本的源代码 , 并节约了网络带宽 。

推荐阅读