本章提供创建自定义规则和探测关键字的信息和步骤。
如果您要安装 Solaris ZFS 根池,请参见第 9 章以了解限制和配置文件示例。
要理解什么是探测关键字,首先需要回顾一下什么是规则关键字。规则关键字是一个预定义的词法单元或单词,它说明一般的系统属性,如主机名 hostname 或内存大小 memsize。规则关键字及其关联值使您能够将一个具有相同属性的系统与一个配置文件匹配。这种系统属性的匹配定义了如何在组中的每个系统上安装 Solaris 软件。
自定义 JumpStart 环境变量用在开始脚本和结束脚本中,它们是根据需要进行设置的。例如,只有在使用了 installed 规则关键字之后,有关系统上安装了哪个操作系统的信息才会在 SI_INSTALLED 中提供。
在某些情况下,出于匹配系统和运行配置文件以外的其他目的,也可能需要在开始脚本或结束脚本中提取相同的信息。探测关键字提供了解决方法。探测关键字提取属性信息并消除了设置匹配条件和运行配置文件的需要。
有关探测关键字和值的列表,请参见探测关键字和值。
规则关键字和值和探测关键字和值描述的规则关键字和探测关键字可能无法完全满足您的需求。可以通过创建 custom_probes 文件,自定义规则关键字或探测关键字。
custom_probes 文件是一个 Bourne shell 脚本,它包含两种函数。您必须将 custom_probes 文件保存在保存了 rules 文件的同一 JumpStart 目录中。您可以在 custom_probes 文件中定义的两种函数如下:
探测函数-收集您需要的信息或进行实际的工作,并设置您定义的相应 SI_ 环境变量。探测函数成为探测关键字。
比较函数-调用相应的探测函数,比较探测函数的输出,如果关键字匹配则返回 0,如果关键字不匹配则返回 1。比较函数成为规则关键字。
custom_probes 文件可以包含任何有效的 Bourne shell 命令、变量或算法。
您可以在 custom_probes 文件中定义需要单个变量的探测函数和比较函数。当您在 rules 文件中使用相应的自定义探测关键字时,关键字后面的变量将被解释(为 $1)。
在 rules 文件中使用相应的自定义规则关键字时,将依次解释这些变量。该序列在关键字之后开始,并在下一个 && 或开始脚本(先出现的项)之前结束。
为提高明确性和改善结构,请首先在文件的顶部定义所有的探测函数,后跟所有的比较函数。
探测函数的名称必须以 probe_ 开头。比较函数的名称必须以 cmp_ 开头。
以 probe_ 开头的函数定义新的探测关键字。例如,函数 probe_tcx 定义新的探测关键字 tcx。以 cmp_ 开头的函数定义新的规则关键字。例如,cmp_tcx 定义新的规则关键字 tcx。
使用文本编辑器创建 Bourne shell 脚本文本文件。将该文件命名为 custom_probes。
在 custom_probes 文本文件中,定义您的探测函数和比较函数。
您可以在 custom_probes 文件中定义需要变量的探测函数和比较函数。当您在 rules 文件中使用相应的自定义探测关键字时,关键字后面的变量将依次被解释(为 $1、$2,依此类推)。
在 rules 文件中使用相应的自定义规则关键字时,将依次解释这些变量。该序列在关键字之后开始,并在下一个 && 或开始脚本(先出现的项)之前结束。
将 custom_probes 文件保存在 JumpStart 目录中的 rules 文件旁边。
确保 root 拥有 rules 文件,并且权限设置为 644。
在以下目录中可以找到探测函数和比较函数的其他示例:
/usr/sbin/install.d/chkprobe(在安装了 Solaris 软件的系统上)
Solaris Operating System DVD 或 Solaris Software - 1 CD 中的 /Solaris_10/Tools/Boot/usr/sbin/install.d/chkprobe
下面的 custom_probes 文件包含测试 TCX 图形卡是否存在的探测函数和比较函数。
#!/bin/sh # # custom_probe script to test for the presence of a TCX graphics card. # # # PROBE FUNCTIONS # probe_tcx() { SI_TCX=`modinfo | grep tcx | nawk '{print $6}'` export SI_TCX } # # COMPARISON FUNCTIONS # cmp_tcx() { probe_tcx if [ "X${SI_TCX}" = "X${1}" ]; then return 0 else return 1 if } |
下面的示例 rules 文件显示如何使用前面示例中定义的探测关键字 tcx。如果 TCX 图形卡已安装并在系统中被找到,则运行 profile_tcx。否则,运行 profile。
总是将探测关键字放置在 rules 文件的开头或开头附近。这样,可确保在其他可能依赖于这些探测关键字的规则关键字之前读取和运行这些关键字。
probe tcx tcx tcx - profile_tcx - any any - profile - |
在使用配置文件、rules 和 custom_probes 文件之前,必须运行 check 脚本来验证是否已正确设置这些文件。如果所有的配置文件、规则以及探测函数和比较函数均已正确设置,则创建 rules.ok 和 custom_probes.ok 文件。表 5–1 介绍了 check 脚本的作用。
表 5–1 使用 check 脚本时发生的情况
阶段 |
说明 |
---|---|
1 |
check 搜索 custom_probes 文件。 |
2 |
如果文件存在,check 将基于 custom_probes 文件创建 custom_probes.ok 文件,删除所有注释和空白行,并保留所有 Bourne shell 命令、变量和算法。然后,check 在结尾添加以下注释行: # version=2 checksum=num |
验证 check 脚本是否位于 JumpStart 目录中。
check 脚本位于 Solaris Operating System DVD 或 Solaris Software - 1 CD 上的 Solaris_10/Misc/jumpstart_sample 目录中。
运行 check 脚本可验证 rules 和 custom_probes 文件。
$ ./check -p path -r file_name |
使用来自平台的 Solaris 软件映像的 check 脚本代替您正在使用的系统中的 check 脚本来验证 custom_probes 文件。path 是本地磁盘或已挂载的 Solaris Operating System DVD 或 Solaris Software - 1 CD 上的映像。
指定一个文件名(名称 custom_probes 除外)。通过使用 -r 选项,可以在将一组函数集成到 custom_probes 文件中之前验证这些函数的有效性。
check 脚本运行时,它会报告 rules 文件和 custom_probes 文件以及每个配置文件的有效性。如果没有遇到任何错误,该脚本将报告: “自定义 JumpStart 配置正常”并在 JumpStart 目录中创建 rules.ok 和 custom_probes.ok 文件。
确定 custom_probes.ok 文件是否为可执行文件。
如果是,请转至步骤 5。
如果不是,请键入以下命令:
# chmod +x custom_probes |
确保 root 拥有 custom_probes.ok 文件,并且权限设置为 755。