分类: BSD
2008-04-03 16:59:43
# 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。
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系统,不致造成不同的版本混乱。