要在此案例研究中设置选择性安装,您必须完成以下任务:
为每种可安装对象的类型定义一个类。
在此案例研究中,三种对象类型是:软件包可执行文件、手册页和 emacs 可执行文件。每种类型都有其自己的类: 分别是 bin、man 和 emacs。请注意在 prototype 文件中,所有对象文件均属于这三个类之一。
在 pkginfo 文件中将 CLASSES 参数初始化为 null。
通常在定义类时,应该在 pkginfo 文件的 CLASSES 参数中列出该类。否则,不会安装属于该类的任何对象。对于此案例研究,参数最初设置为 null,意味着不会安装任何对象。 CLASSES 参数将由 request 脚本根据管理员的选择进行更改。这样,CLASSES 参数会仅设置为管理员希望安装的那些对象类型。
通常可取的方法是将参数设置为缺省值。如果此软件包有对所有三种对象类型通用的组件,可以将其指定给 none 类,然后将 CLASSES 参数设置为等于 none。
将参数化路径名插入到 prototype 文件。
request 脚本会将这些环境变量设置为管理员提供的值。然后,pkgadd 命令在安装时解析这些环境变量,从而知道软件包的安装位置。
此示例中使用的三个环境变量在 pkginfo 文件中设置为其缺省值,作用如下:
$NCMPBIN 定义对象可执行文件的位置
$NCMPMAN 定义手册页的位置
$EMACS 定义 emacs 可执行文件的位置
prototype 示例文件显示了如何定义含变量的对象路径名。
创建 request 脚本,用于询问管理员应该安装软件包的哪些部分及其放置位置。
此软件包的 request 脚本会询问管理员两个问题:
是否应该安装软件包的此部分?
当答复为是时,相应的类名被添加到 CLASSES 参数。例如,当管理员选择安装与此软件包关联的手册页时,类 man 将会添加到 CLASSES 参数。
如果是,应该将软件包的此部分放置在什么位置?
此时将设置相应的环境变量来响应此问题。在手册页示例中,变量 $NCMPMAN 设置为响应值。
对于三种对象类型的每种类型都会重复这两个问题。
在 request 脚本的末尾,参数将设置为对 pkgadd 命令和所有其他打包脚本的安装变量可用。request 脚本通过将这些定义写入调用实用程序提供的文件来实现这一点。对于此案例研究,没有提供其他脚本。
当查看此案例研究的 request 脚本时,请注意,上述问题由数据验证工具 ckyorn 和 ckpath 生成。有关这些工具的更多信息,请参见 ckyorn(1) 和 ckpath(1)。