清单 5. 直接版本应用程序目录
./perl/
./perl/perl-5.8.2
./perl/perl-5.8.3
./perl/perl-5.8.5
./perl/perl-5.9.0
这些目录都准备就绪后,您就可以开始为想要支持的每种操作系统和配置进行每个应用程序的一次构建了。对每个应用程序/配置进行一次构建后,将其部署到多个操作系统中应该是相对简单和直观的。实际上,您也可以简化这一过程,只是需要进行一些深入的考虑。
配置单独的构建
支持多种不同应用程序和不同配置的另一个问题在于,容易忘记用于给定应用程序和情形的具体配置。例如,构建 Apache 时,我指定了另一个部署目录,以及我想要支持的模块和组件的一个显式列表。在第一次完成我所期望的任务时,记住这些配置没什么问题,但是,当三个月之后,我要再进行这个过程,并决定对最新修订版本进行新一次构建时,让我再回忆起该配置的某些方面无异于一个梦魇。
为了解决这一问题,我使用了只结合了一些简单的、单行的脚本而创建的目录结构,我通常将这些脚本中的行用于配置方面。例如,我为 Apache 阶段测试服务器(staging servers)使用了如清单 6 所示的脚本:
清单 6. Apache 阶段测试服务器的脚本
./configure --enable-so --enable-mods-shared=most --prefix=/export/httpd2/staging
您可以将这个行放入到一个脚本中,赋予其合适的名称,并将其存放于应用程序的目录中。此外,您既可以基于每版本使用此方法(对那些配置系统发生了变化的应用程序来说至关重要,比如从 Apache 1.3.x 到 Apache 2.x),也可将此方法用于普通的应用程序目录。例如,我可以将这个文件命名为 apache/staging-config,以指明我可以在任何版本和构建目录中使用它来配置 Apache 阶段测试服务器。
需要根据给定的操作系统、应用程序和配置实际执行配置时,我可以如下进行:
清单 7. 执行配置和构建
$ cd redhat-linux-9.0/apache/httpd-2.0.46/staging-build
$ ../../staging-config
$ make
自动化安装
一旦有了针对某个操作系统的应用程序的首次编译版和准备安装版(ready-to-install version),在网络中的不同机器上实际发布和安装这个应用程序就会变得非常容易。您不必再在每台机器上单独运行配置/构建过程 —— 倘若机器是相同的。所有您需要运行的只是 make install 。
通过在每个操作系统目录中创建了一个文件,其中包含我想要在每台机器上安装的应用程序列表,我逐个系统(system-by-system)地自动化了这一过程。对于其中一些操作系统,我甚至创建了大量不同的文件,来处理我必须进行的所有不同类型的安装。该文件只是应用程序构建目录的一个列表,如清单 8 所示:
清单 8. 操作系统应用程序选择
perl/perl-5.9.0
python/Python-2.3
ccache/ccache-2.3
distcc/distcc-2.13
这个文件由清单 9 中所示的脚本处理。这里没有任何技巧;只需遍历列出的每一个目录并在其中运行 make install 命令即可。