要知道哪些源可以用于脚本,您需要知道首次引导时在客户机系统上安装了哪些工具。缺省情况下,将安装 solaris-large-server 软件包。如果安装了该组软件包,则在首次引导时您可以使用 Python、bash、ksh 和其他工具。要获取 solaris-large-server 组软件包中包含的软件包的完整列表,请使用在 Oracle Solaris 11.2 中添加和更新软件 中的列出组软件包中的所有可安装软件包中介绍的 pkg contents 命令。如果要将 solaris-large-server 软件包中未提供的源用于脚本,请标识所需的软件包并在 AI 清单中指定该软件包。有关如何查找您可能要安装的其他软件包的名称的信息,请参见在 Oracle Solaris 11.2 中添加和更新软件 。
本示例显示了在所有首次引导脚本中均应执行的操作。
首次引导脚本必须装入 /lib/svc/share/smf_include.sh 才能使用诸如 SMF 方法退出代码之类的定义。
脚本应该测试是否已在之前的引导过程中运行。如果 completed 属性已经设置为 true,则退出 start 方法并暂时禁用服务。
脚本中的以下行将获取 site/first-boot-script-svc:default 服务实例中 config 属性组内 completed 属性的值,并将该值分配给本地 completed 变量。
completed=`svcprop -p config/completed site/first-boot-script-svc:default`
脚本中的以下行将 SMF_EXIT_TEMP_DISABLE 退出代码发送给服务的 start 方法,其中,method_completed 是退出原因的简短描述,而 "Configuration completed" 是退出原因的详细描述。
smf_method_exit $SMF_EXIT_TEMP_DISABLE script_completed "Configuration completed"
首次引导脚本应保存刚由 AI 安装创建的引导环境 (boot environment, BE) 的副本。在首次引导脚本修改 BE 之前保存 BE 的副本,这使您可以通过引导到保存的 BE 中来轻松从脚本引入的任何问题中恢复。
当脚本完成其工作后,脚本必须将 completed 属性的值设置为 true,刷新服务以获取新的属性值,然后退出 start 方法并暂时禁用服务。使用 svccfg 命令可将 completed 属性设置为 true,使用 svcadm 命令可刷新服务。
请记住,在缺省情况下,sh 为 ksh93。
#!/bin/sh # Load SMF shell support definitions . /lib/svc/share/smf_include.sh # If nothing to do, exit with temporary disable completed= $(svcprop -p config/completed site/first-boot-script-svc:default ) [ "${completed}" = "true" ] && \ smf_method_exit $SMF_EXIT_TEMP_DISABLE completed "Configuration completed" # Obtain the active BE name from beadm: The active BE on reboot has an R in # the third column of 'beadm list' output. Its name is in column one. bename= $(beadm list -Hd|nawk -F ';' '$3 ~ /R/ {print $1}' ) beadm create ${bename}.orig echo "Original boot environment saved as ${bename}.orig" # Place your one-time configuration tasks here # Record that this script's work is done svccfg -s site/first-boot-script-svc:default setprop config/completed = true svcadm refresh site/first-boot-script-svc:default smf_method_exit $SMF_EXIT_TEMP_DISABLE method_completed "Configuration completed"
$ ksh -n first-boot-script.sh
本示例显示在两个 IP 接口上配置地址并添加一个缺省路由的首次引导脚本,该脚本名为 first-boot-script.sh。
#!/bin/sh # Load SMF shell support definitions . /lib/svc/share/smf_include.sh # If nothing to do, exit with temporary disable completed=`svcprop -p config/completed site/first-boot-script-svc:default` [ "${completed}" = "true" ] && \ smf_method_exit $SMF_EXIT_TEMP_DISABLE completed "Configuration completed" # Obtain the active BE name from beadm: The active BE on reboot has an R in # the third column of 'beadm list' output. Its name is in column one. bename=`beadm list -Hd|nawk -F ';' '$3 ~ /R/ {print $1}'` beadm create ${bename}.orig echo "Original boot environment saved as ${bename}.orig" # Create and configure addresses on two IP interfaces /usr/sbin/ipadm create-ip net0 /usr/sbin/ipadm create-ip net1 /usr/sbin/ipadm create-addr -a 10.153.125.222/24 net0 /usr/sbin/ipadm create-addr -a 169.254.182.77/24 net1 # Add a default route with net0 as the gateway /usr/sbin/route add default 10.153.125.1 -ifp net0 # Record that this script's work is done svccfg -s site/first-boot-script-svc:default setprop config/completed = true svcadm refresh site/first-boot-script-svc:default smf_method_exit $SMF_EXIT_TEMP_DISABLE method_completed "Configuration completed"
首次引导脚本的另一种很好的用法是使用 useradd 命令在系统上配置多个初始用户。