如果您以前使用过 UNIX® 系统,那典型的第三方软件安装的步骤是像下面描述的:
下载这个软件,软件的发行版可能是源代码格式,或是一个二进制包。
解开软件(其中代表性的是用 compress(1), gzip(1), 或 bzip2(1) 压缩过的tar包)。
阅读相关文档,了解如何安装。 (多半一个文件名是INSTALL或README, 或在doc/ 目录下的一些文档)
如果软件是以源代码形式发布的,那就需要编译它。可能需要编辑一个 Makefile文件, 或运行 configure脚本,和其他的一些工作。
测试和安装软件。
如果一切顺利的话,就这么简单。如果您在安装一个软件包时发生一些错误, 您可能需要编辑一下它的代码,以使它能正常工作。
您可以继续使用 “传统的”方式安装软件。 然而, FreeBSD 提供了两种技术: packages 和 ports。 就在写这篇文章的时候, 已经有超过 11,800 个第三方的应用程序可以使用了。
对于任意一个应用程序包,是一个可以下载的FreeBSD package文件。这个 FreeBSD package包含了编译好的的副本, 还有一些配置文件或文档。 一个下载的包文件可以用 FreeBSD 的包管理命令来操作, 例如 pkg_add(1),pkg_delete(1), pkg_info(1) 等等。 可以使用一个简单的命令安装一个新的应用程序。
一个FreeBSD的port是一个可以自动从源代码编译成应用程序的文件集合。
记住,如果您自己来编译的话,需要执行很多步的操作 (解压, 补丁, 编译, 安装)。 这些整理 port 的文件集合包含了系统需要完成这个工作的必需信息。 您可以运行一些简单的命令, 那些源代码就可以自动地下载, 解开, 打补丁, 编译, 直至安装完成。
实际上,ports 系统也能做出被 pkg_add 的程序包和不久就要讲到的其他包管理命令来安装的软件包。
Packages 和 ports 是互相 依赖 的。 假设您想安装一个依赖于已经安装的特定库的应用程序。 应用程序和那个库都已经应用于 FreeBSD ports 和 packages。 如果您使用 命令或 ports 系统来添加应用程序, 两个都必须注意库是否被安装, 如果没有, 它会自动先安装库。
这里给出的两种技术是很相似的,您可能会奇怪为什么 FreeBSD 会弄出这两种技术。 其实, packages 和 ports 都有它们自己的长处, 使用哪一种完全取决于您自己的喜好。
Package的优点
一个压缩的 package 通常要比一个压缩的包含源代码的应用程序小得多。
package 不需要进行额外的编译。 对于大型应用程序如 Mozilla, KDE 或 GNOME 来说这显得尤为重要, 特别是在您的系统资源比较差的情况下。
package不需要您知道如何在FreeBSD上编译软件的详细过程。
Ports 的优点
package 在编译时通常使用比较保守的选项, 这是为了保证它们能够运行在大多数的系统上。 通过从 port 安装, 您可以细微调整编译选项来产生适合于处理器的代码 (针对于 Pentium IV 或 AMD 的 Athlon CPU)。
一些软件包已经把与它们相关的能做和不能做的事情的选项都编译进去了。 例如, Apache 可能就配置了很多的选项。 从 port 中安装时, 您不一定要接受默认的选项, 可以自己来设置。
在一些例子中,一个软件有不同的配置存在多个package。 例如, Ghostscript存在 ghostscript package 和 ghostscript-nox11 package两个配置package, 这取决于您是否安装了X11服务器。 这样的调整对package是可能的, 但如果一个应用程序有超过一个或两个不同的编译时间选项时, 就不行了。
一些软件的许可条件禁止采用二进制形式发行。 它们必须带上源代码。
一些人不信任二进制发行形式。 至少有了源代码, (理论上) 可以亲自阅读它,寻找潜在的问题。
如果您要自己对软件打补丁,您就需要有源代码。
一些人喜欢整天围着源代码转, 所以他们喜欢亲自阅读源代码, 修改源代码等等。
保持更新 ports, 订阅邮件列表 FreeBSD ports 邮件列表 和递交错误报告 FreeBSD ports bugs 邮件列表。
Warning在安装任何应用程序之前,应该首先检查 http://vuxml.freebsd.org/ 上是否有与所安装的应用程序有关的安全问题报告。
另外,也可以安装 security/portaudit。 除了可以自动地检测所有已经安装的软件中是否有已知的安全漏洞之外, 在开始编译新的 port 之前它也会检查是否存在已知的问题。 另外,在安装了一些软件包之后,也可以使用 portaudit -F -a 来强制系统作一下检查。
这章的其余部分将介绍如何使用packages和ports来安装和管理第三方软件。