Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3253266
  • 博文数量: 515
  • 博客积分: 5116
  • 博客等级: 大校
  • 技术积分: 4137
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-30 11:24
个人简介

黑马王子就是我! 技术认证:系统分析师,网络规划设计师,网络工程师,信息系统监理师,系统集成项目管理师,初级程序员,MCSE,MCDBA,CCNA 目前主攻虚拟化技术,VPN,系统架构,集群和高可用性等。

文章分类

全部博文(515)

文章存档

2023年(11)

2022年(17)

2021年(19)

2020年(28)

2019年(42)

2018年(53)

2017年(41)

2016年(33)

2015年(43)

2014年(25)

2013年(13)

2011年(6)

2010年(28)

2009年(47)

2008年(55)

2007年(26)

2006年(28)

分类: BSD

2009-05-05 16:50:34

 
  为了充分发挥系统的性能,便需要对系统进行各种维护和配置工作。前面进行的管理和维护还是基于最初安装的FreeBSD系统,以及
FreeBSD安装介质中提供的二进制软件包。这样的系统适用于大多数情况,但不是最适合特定要求的系统设置。根据系统的具体情况来定制FreeBSD的
各种设置,就需要进一步的工作。主要是由于
FreeBSD是一个自由软件系统,它提供了软件的源代码可以供用户定制,可以来适应系统的具体环境。如果不能充分利用这些FreeBSD提供的源代码,
就不能真正发挥 FreeBSD的最大能力。
FreeBSD系统提供的源代码包括三个部分,内核源代码、应用程序源代码和软件
Ports的源代码。其中内核源代码用于定制内核、提高系统性能、维护硬件配置以及更新系统软件,根据需要升级硬件和保持系统不断升级以避免系统安全等方
面的漏洞等任务,因此最为重要,一个系统在初始安装之后都需要重新编译内核;应用程序源代码包括安装到/bin、/sbin、/usr/bin、
/usr/sbin目录中的各个应用程序的源代码;软件Ports的源代码并不是各个软件的源代码,而是各个软件的编译、安装方法的代码,这可以用来安装
和管理各种应用程序。
这些源代码均包括在FreeBSD的安装介质中,并能通过安装程序进行安装。除了在初始安装时安装这些组件之外,系统正常运行时也能通过sysinstall或手工运行相关目录下的安装脚本install.sh来添加他们。
编译应用软件
在Internet上有很多软件包,它们遵循GPL、BSD或相似的版权许可,允许用户编译运行这些软件。正常情况下,安装一个应用软件的过程是:
获 得源代码文件,这通常是一个使用tar打包,并使用compress或gzip压缩后的文件。一般通过ftp等网络下载工具从Internet上得到。 将文件解开,得到源代码文件,一般需要使用tar和gzip进行解包处理。 根据系统情况进行配置,通常这些软件提供了自动配置程序,能根据系统环境自动进行配置,或者可以手工更改设置文件。 然后就进行编译,创建可执行的程序。 接下来就需要将应用程序安装到系统的指定位置。 最后一步是配置应用程序的参数,使其能很好的执行。
虽然软件的作者通常已经将源代码编写相当完善,适合在多个平台上编译,但是将源代码编译成最终可执行的文件,仍然是一个花费时间且需要繁琐操作的过程。尤其是当用户对系统不是很了解的情况下,往往就可能在某一步遇到了问题,结果就会导致整个安装过程不能正常完成。
由于Ports
Collection是随着应用程序的发展而常常更新的,当某个软件升级造成软件的源代码文件的名字或位置改变,因此部分Port中有关下载软件源代码的
位置的设置,就很可能不再适用,从而造成某些Ports不能正常编译安装。因此当应用软件更新之后,就需要从ftp.freebsd.org更新对应这个
Port的源代码。可以下载某个Port的代码并放置到正确的位置上,就能完成该port的更新,而不必更新整个Ports
Collection。或者使用cvsup来同步源代码,更新Ports Collection。
由于Ports Collection中收集的软件相当多,因此要想了解每个软件的用途并找出有用的软件就有些困难。如果一个一个去看软件的文档,需要花费大量的时间。因此 FreeBSD提供了一些简单的索引和搜索能力。下面操作将产生所有port信息的索引文件。
# cd /usr/ports
# make print-index > index.txt
例如要搜寻pine相关的port信息,可使用:
# cd /usr/ports
# make search key=pine
也可以产生所有Ports的描述文件,在/usr/ports目录下产生一系列HTML超文本文件,然后通过netscape或lynx等浏览器查看各个软件的描述内容。
# cd /usr/ports
# make readmes

Ports Collection与系统版本息息相关,因此如果要使用新版本系统的Ports Collection
,不但要升级Ports,而且要升级系统中的有关程序。FreeBSD提供了一些Packages来提供在不升级系统的情况下支持高版本的Ports
Collection。例如从3.1Release升级到3.1stable就存在一个升级Package为:31Upgrade.tgz,可以查看

每个Port单独占据一个子目录,在这个目录中就是Port的代码,包括使用make编译、安装这个软件所必须的Makefile文件,软件的描述文件
README.html、用于版本维护的CVS目录、保存软件包安装信息的files目录,以及保存软件源代码的补丁文件的pkg目录等。
$ ls -al /usr/ports/security/ssh
total 13
drwxr-xr-x  7 root wheel  512 Apr 19 01:18 .
drwxr-xr-x 53 root wheel 1024 Apr 19 01:18 ..
drwxr-xr-x  2 root wheel  512 Apr 14 16:36 CVS
-rw-r--r--  1 root wheel 4974 Apr 19 01:18 Makefile
-rw-r--r--  1 root wheel  715 Feb 15 17:06 README.html
drwxr-xr-x  3 root wheel  512 Apr 14 16:36 files
drwxr-xr-x  3 root wheel  512 Apr 19 01:18 patches
drwxr-xr-x  3 root wheel  512 Apr 19 01:18 pkg
由于Ports Collection就是用来简化应用软件的安装过程的,因此安装起来非常简单,例如要安装一个播放mp3的软件mpg123,则可以首先进入这个Port对应的目录,然后使用make 命令进行处理。
通常FreeBSD将应用软件安装到/usr/local目录下(X Window应用软件安装到/usr/X11R6
目录下),其执行程序位于/usr/local/bin中,配置文件位于/usr/local/etc中,而应用软件如果需要在系统启动时自动启动,相应
的启动文件被放置到/usr/local/etc/rc.d目录中。
每个Port的Patch是一些补丁程序,它包括这个软件本身存在问题,用于修正或升级的补丁,或者是维护这个Port的FreeBSD开发者用于修正系统差异而制作的Patch。所有的补丁程序被放置在该Port目录下的patches目录中。
要对这个软件进行定制时候,应该首先使用make命令,保证源代码展开到正确的目录下并编译完毕。这样能保证make应用了所有的补丁程序对源代码进行
修正,然后才能在此目录中修改相应配置,并删除work子目录中的相应标记文件.build_done,使得可以重新开始编译过程,重新编译软件。
make install: 如果使用的是make
install命令,那么make先完成编译过程,然后还将自动安装这个Port,此时不但将软件的各个部分安装到正确的位置之外,还将执行Port
中附带的shell脚本进行软件的基本配置。当然这个配置过程是不完整的,完整的配置属于这个应用程序本身的功能。
安装完毕之后,还可以针对自己定制的Port生成对应的软件包,使用make package命令将自动完成这个过程。
安装每个Port的同时也就等同于安装相应的Package,安装过程同时也将在/var/db/pkg
目录下记载下相应Package的安装记录。由于软件包之间存在相互依赖关系,Ports Collection
中也使用同样的原则来处理软件之间的依赖关系,必须使用预先安装这个Port依赖的所有其他
Packages之后,才能安装(不影响编译)这个Port。这个过程也将在make
install中自动完成的,系统就会检查依赖关系,自动使用Ports Collection安装它所依赖的Port,最后才能继续这个
Port的安装过程。
由于安装过程依赖于软件包之间的依赖关系,因此可能会出现比较复杂的情况。例如 Ports
Collection的源代码不完整,缺乏它所依赖的软件包的信息,这样安装就不能正常完成。还有就是Ports
Collection之间不一致,由于软件的版本不同,就可能造成依赖关系不完整,安装过程不能继续进行。这就需要使用者检查依赖关系,更新整个
Ports Collection来纠正问题。
有的软件,本来就是提供的二进制形式的软件,例如Netscape
Communicator,因此并不需要编译过程。所需要的仅仅是将它们下载并安装。即便如此,使用Ports
Collection仍然能够帮助使用者更方便的完成这项工作。因为Ports
Collection仍然维护着一些有用的信息,例如要下载的应用软件版本号和应用软件的下载位置,应用软件的安装目录和配置文件所在的目录等非常有用的
信息。使用包的方式进行安装和管理,将保证应用软件之间的依赖关系的完整性,方便在不用的时候将包卸载,此外Ports
Collection还将按照FreeBSD的习惯来组织文件和目录,便于将要安装的文件放置到合适的位置中。
在这台计算机连接到Internet上的条件下,在这个过程中系统将顺序完成下载、编译、安装几个步骤。
make fetch:
每个Port中并没有保存应用软件的原始源代码文件,它保存的是如何获得软件的源代码,并产生可执行文件的操作过程。每种软件的源文件通常保存在其他介质
上(一般位于Internet上),那么当通过Ports
Collection来安装一个软件时,第一步就是要获得相关的文件。这个下载文件的功能是Ports
Collection的一部分功能,如果这台计算机联接到Internet上了,它能够到网络上找到该文件并使用fetch命令将文件下载到本机内,所有
的步骤都是完全自动完成的,需要使用者操作的仅仅是使用make命令来启动这个过程。
如果使用的是make fetch命令,fetch参数将使得make仅仅完成下载任务,而不进行编译和安装处理过程。
即使计算机没有联接到Internet上,也不必担心,因为Ports
Collection将所有下载的文件都保存在/usr/ports/distfiles目录中,而make命令将首先检查该目录中是否已经存在了要下载
的源文件,当发现存在这个文件之后,就不再重新下载。因而可以手工将这个应用软件的源代码文件拷贝到这个目录下,make时就不会再重复下载过程了。如果
不能确定源文件的位置,可以从Makefile文件中获得源文件的位置,Makefile中将给出该源文件存在几个不同的网络地址,供fetch命令连续
尝试下载,一般最新Ports Collection对应的软件的源文件都能从ftp.freebsd.org中下载得到。
make:
不带任何参数的make命令在完成上述下载工作之后,就开始编译软件了。make程序首先在这个Port目录下建立一个工作子目录,命名为work,此后
将源代码展开到这个目录下,再应用这个软件的各个补丁文件,并启动自动配置和编译过程。在这里,每进行一步操作,就在work目录下生成一个空文件,这些
文件用于标记编译、安装port的工作进行到哪一步了。
$ ls -al /usr/ports/security/ssh
total 8
drwxr-xr-x 3 root wheel  512 Apr 14 16:57 .
drwxr-xr-x 7 root wheel  512 Apr 19 01:18 ..
-rw-r--r-- 1 root wheel  768 Apr 14 16:57 .PLIST.mktmp
-rw-r--r-- 1 root wheel   0 Apr 14 15:56 .build_done
-rw-r--r-- 1 root wheel   0 Apr 14 15:56 .configure_done
-rw-r--r-- 1 root wheel   0 Apr 14 15:55 .extract_done
-rw-r--r-- 1 root wheel   0 Apr 14 16:57 .install_done
-rw-r--r-- 1 root wheel   0 Apr 14 15:55 .patch_done
drwxr-xr-x 4 root wheel 4608 Apr 14 15:56 ssh-1.2.26
make展开应用软件包时会检查下载软件包的完整性,这是通过验证下载文件产生的MD5 数据是否与记载在Port中的数据相一致,来保证了下载软件的正确性。
因此FreeBSD提供了Ports
Collection机制来管理、安装软件。每种要被移植到FreeBSD上软件被称为一个Port,由某个FreeBSD的开发者维护。这个Port的
维护者首先将软件移植到FreeBSD上,并将他所完成的这些移植工作按照Ports Collection
的要求进行设置,编写相关的脚本,使下载软件、配置、编译、安装的全过程能够自动完成,不需人工干预。每个Port中并没有保存软件包的源代码或者二进制
代码,而只是提供了搜索它的源代码或者二进制软件包的方法。有了Ports Collection,编译、安装应用程序的过程就相当容易了。
Ports Collection和Packages
Collection是紧密相关的,大部分Port都会有对应的二进制软件包,除非这个软件的许可权对以二进制格式分发有所限制。通常每个源代码形式的
Port使用tar.gz结尾,而相应的软件包使用.tgz结尾。因此可以使用后缀来区分Port和软件包。可以从Port中直接生成对应的二进制软件
包。
Ports Collection
对于一般的使用者,有了FreeBSD
提供的众多预编译好的软件包,就可以直接安装这些应用软件的二进制版本,而不需要使用Ports
Collection重新编译软件。然而安装介质上附带的软件包是按照缺省配置生成的,适合大多数用户的需要,但并不一定最适合特定用户的特定需求。如果
需要对某个软件进行定制安装,就需要使用 Ports Collection,进行修改后重新编译安装。
在启动这个软件的安装与管理机
制之前,必须安装 ── Ports
Collection的源代码ports.tgz,它在安装介质中提供,系统的初始安装过程中,安装程序将提示使用者安装Ports
Collection,系统安装之后也能直接从安装介质上重新安装或更新。
Ports
Collection的源代码被安装到/usr/ports目录中,这个目录称为Ports
树,以树状结构保存了各个应用程序的Ports。与Packages
Collection的目录结构相同,Ports中也按类别进行相关分类,/usr/ports下的每个子目录都包含某一类软件,在下一级的每个子目录下
就放置各个Port。
$ cd /usr/ports
$ ls
CVS       archivers    devel      math      textproc
INDEX      astro      distfiles    mbone      vietnamese
LEGAL      audio      editors     misc      www
Makefile    benchmarks   emulators    net       x11
Mk       biology     games      news      x11-clocks
README     cad       german     palm      x11-fm
README.html   chinese     graphics    print      x11-fonts
Templates    comms      japanese    russian     x11-toolkits
Tools      converters   korean     security    x11-wm
WWW_SITE    databases    lang      shells
YEAR2000    deskutils    mail      sysutils
因为每个Port的代码位于自己的目录中,如果仅仅只想安装某个软件包的port,在解压缩中只解某个具体的软件就可以了。
阅读(1298) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~