安装 Oracle® Solaris 11.2 系统

退出打印视图

更新时间: 2014 年 7 月
 
 

创建在首次引导时运行的脚本

要知道哪些源可以用于脚本,您需要知道首次引导时在客户机系统上安装了哪些工具。缺省情况下,将安装 solaris-large-server 软件包。如果安装了该组软件包,则在首次引导时您可以使用 Python、bashksh 和其他工具。要获取 solaris-large-server 组软件包中包含的软件包的完整列表,请使用在 Oracle Solaris 11.2 中添加和更新软件 中的列出组软件包中的所有可安装软件包中介绍的 pkg contents 命令。如果要将 solaris-large-server 软件包中未提供的源用于脚本,请标识所需的软件包并在 AI 清单中指定该软件包。有关如何查找您可能要安装的其他软件包的名称的信息,请参见在 Oracle Solaris 11.2 中添加和更新软件


提示  - 
  • 仅使用一个首次引导脚本,以避免不同脚本中包含不同命令导致相互冲突。
  • 请勿在首次引导脚本中重新引导。

示例 13-1  首次引导脚本模板

    本示例显示了在所有首次引导脚本中均应执行的操作。

  • 首次引导脚本必须装入 /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 命令可刷新服务。

请记住,在缺省情况下,shksh93

#!/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"

提示  - 可使用 –n 选项检查脚本中是否存在语法错误:
$ ksh -n first-boot-script.sh

示例 13-2  配置多个 IP 接口的首次引导脚本

本示例显示在两个 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 命令在系统上配置多个初始用户。