Solaris 9 安装指南

第 24 章 使用可选的定制 JumpStart 功能(任务)

本章描述可用于创建附加的定制 JumpStart 安装工具的可选功能。

创建开始脚本

开始脚本是您在 rules 文件中指定的用户定义 Bourne shell 脚本。开始脚本在 Solaris 软件被安装到系统之前执行任务。只有在使用定制 JumpStart 安装 Solaris 软件时才可以使用开始脚本。

使用开始脚本可以执行以下任务之一:

关于开始脚本的重要信息

用开始脚本创建派生配置文件

派生配置文件是一个由开始脚本在定制 JumpStart 安装期间动态创建的配置文件。当不能设置 rules 文件以使特定的系统与配置文件相匹配时,就需要派生配置文件。例如,可能需要将派生配置文件用于具有不同硬件组件的相同系统型号,如包含不同的帧缓存器的系统。

要设置使用派生配置文件的规则,必须执行以下任务:

当系统匹配一个配置文件字段为等号 (=) 的规则时,开始脚本创建用于在系统上安装 Solaris 软件的派生配置文件。

下面是一个开始脚本的示例,该脚本每次都创建相同的派生配置文件。您可以编写一个开始脚本,根据规则的评估创建不同的派生配置文件。


实例 24–1 创建派生配置文件的开始脚本

#!/bin/sh

echo "install_type        initial_install"> ${SI_PROFILE}

echo "system_type         standalone">> ${SI_PROFILE}

echo "partitioning        default">> ${SI_PROFILE}

echo "cluster             SUNWCprog">> ${SI_PROFILE}

echo "package       SUNWman     delete">> ${SI_PROFILE}

echo "package       SUNWolman   delete">> ${SI_PROFILE}

echo "package       SUNWxwman   delete">> ${SI_PROFILE}

在此示例中,开始脚本必须将 SI_PROFILE 环境变量用作派生配置文件的名称,该派生配置文件缺省情况下设为 /tmp/install.input



注意:

如果使用开始脚本来创建派生配置文件,则要确保该脚本没有任何错误。派生配置文件不由 check 脚本验证,这是因为派生配置文件直到开始脚本执行后才创建。


创建结束脚本

结束脚本是一个您在 rules 文件中指定的用户定义 Bourne shell 脚本。结束脚本在 Solaris 软件安装在系统上之后但在系统重新引导之前执行任务。只有在使用定制 JumpStart 安装 Solaris 时才可以使用结束脚本。

可以使用结束脚本执行的任务包括:

关于结束脚本的重要信息

使用结束脚本添加文件

通过结束脚本,可以将文件从 JumpStart 目录添加到已安装的系统。可以添加文件是因为 JumpStart 目录安装在 SI_CONFIG_DIR 变量指定的目录中。缺省情况下,该目录设置为 /tmp/install_config


注意:

也可以替换文件,方法是将文件从 JumpStart 目录复制到已安装系统中已存在的文件。


  1. 将添加到已安装系统的所有文件复制到 JumpStart 目录中。

  2. 对于希望复制到新安装的文件系统结构中的每个文件,在结束脚本中插入以下行:

    cp ${SI_CONFIG_DIR}/file_name /a/path_name
    

例如,假设您有一个为站点上所有用户开发的特殊应用程序 site_prog。如果您将 site_prog 的副本放到 JumpStart 目录中,则结束脚本中的以下行会将 site_prog 从 JumpStart 目录复制到系统的 /usr/bin 目录中:

cp ${SI_CONFIG_DIR}/site_prog/a/usr/bin

使用结束脚本添加软件包或修补程序

可以创建一个结束脚本在 Solaris 软件安装在系统上之后自动添加软件包或修补程序。通过使用结束脚本添加软件包,可减少时间并确保安装在站点上不同系统中的软件包和修补程序的一致性。

当使用结束脚本中的 pkgadd( 1M)patchadd( 1M) 命令时,使用 -R 选项将 /a 指定为根路径。

实例 24–2显示了添加软件包的结束脚本示例。


实例 24–2 使用结束脚本添加软件包

  #!/bin/sh

 

  BASE=/a

  MNT=/a/mnt

  ADMIN_FILE=/a/tmp/admin

 

  mkdir ${MNT}

  mount -f nfs sherlock:/export/package ${MNT}1

  cat>${ADMIN_FILE} <<DONT_ASK2

  mail=root

  instance=overwrite

  partial=nocheck

  runlevel=nocheck

  idepend=nocheck

  rdepend=nocheck

  space=ask

  setuid=nocheck

  conflict=nocheck

  action=nocheck

  basedir=default

  DONT_ASK

 

  /usr/sbin/pkgadd -a ${ADMIN_FILE} -d ${MNT} -R ${BASE} SUNWxyz3 

  umount ${MNT}

  rmdir ${MNT}
  1. 将目录安装在包含要安装的软件包的服务器上。

  2. 创建一个临时软件包管理文件 admin,强迫 pkgadd( 1M) 命令在安装软件包时不执行检查或提示问题。当添加软件包时,请使用临时软件包管理文件以便不用干预安装。

  3. 添加软件包,使用 -a 选项指定软件包管理文件,使用 -R 选项指定根路径。



注意:

以前,chroot( 1M) 命令和结束脚本环境中的pkgaddpatchadd 命令一起使用。在极少情况下,一些软件包或修补程序无法与 -R 选项一起工作。在发出 chroot 命令前,必须在 /a 根路径中创建一个伪 /etc/mnttab 文件。

要创建伪 /etc/mnttab 文件,将以下行添加到结束脚本中:

cp /etc/mnttab /a/etc/mnttab

使用结束脚本定制根环境

也可以使用结束脚本定制已安装在系统上的文件。例如,实例 24–3中的结束脚本通过将信息附加到根 (/) 目录中的.cshrc 文件来定制根环境。


实例 24–3 使用结束脚本定制根环境

#!/bin/sh

#

# Customize root's environment

#

echo "***adding customizations in /.cshrc"

test -f a/.cshrc || {

cat>> a/.cshrc <<EOF

set history=100 savehist=200 filec ignoreeof prompt="\$user@`uname -n`> "

alias cp cp -i

alias mv mv -i

alias rm rm -i

alias ls ls -FC

alias h history

alias c clear

unset autologout

EOF

}

使用结束脚本设置系统的超级用户口令

Solaris 软件安装在系统上之后,系统重新引导。在引导过程完成前,系统提示输入超级用户口令。除非有人键入口令,否则系统无法完成引导。

名为 set_root_pw 的结束脚本保存在 auto_install_sample 目录中。结束脚本显示如何自动设置超级用户口令,而无需提示。set_root_pw 显示在 实例 24–4 中。


实例 24–4 使用结束脚本设置系统的超级用户口令

	 #!/bin/sh

	 #

	 #       @(#)set_root_pw 1.4 93/12/23 SMI

	 #

	 # This is an example Bourne shell script to be run after installation.

	 # It sets the system's root password to the entry defined in PASSWD.

	 # The encrypted password is obtained from an existing root password entry

	 # in /etc/shadow from an installed machine.

 

	 echo "setting password for root"

 

	 # set the root password

 PASSWD=dKO5IBkSF42lw

	 #create a temporary input file1

 cp /a/etc/shadow /a/etc/shadow.orig2

 

	 mv /a/etc/shadow /a/etc/shadow.orig

 	nawk -F: '{

         if ( $1 == "root" )3

           printf"%s:%s:%s:%s:%s:%s:%s:%s:%s\n",$1,passwd,$3,$4,$5,$6,$7,$8,$9

      else

		        printf"%s:%s:%s:%s:%s:%s:%s:%s:%s\n",$1,$2,$3,$4,$5,$6,$7,$8,$9

      }' passwd="$PASSWD" /a/etc/shadow.orig> /a/etc/shadow

 #remove the temporary file

 rm -f /a/etc/shadow.orig4

 # set the flag so sysidroot won't prompt for the root password

 sed -e 's/0 # root/1 # root/' ${SI_SYS_STATE}> /tmp/state.$$5

  mv /tmp/state.$$ ${SI_SYS_STATE}
  1. 将变量 PASSWD 设置为从系统 /etc/shadow 文件中的现有项获取的加密超级用户口令。

  2. 创建 /a/etc/shadow 的临时输入文件。

  3. /etc/shadow 文件中更改新安装的系统的超级用户项,使用 $PASSWD 作为口令字段。

  4. 删除临时 /a/etc/shadow 文件。

  5. 在状态文件中将项从 0 更改为 1,这样将不提示用户输入超级用户口令。状态文件通过变量 SI_SYS_STATE 访问,该变量的当前值为 /a/etc/.sysIDtool.state。为了避免在此值更改时脚本出现问题,请使用 $SI_SYS_STATE 以便始终引用此文件。此处显示的 sed 命令在 0 之后和 1 之后包含一个制表符。



注意:

如果使用结束脚本设置系统的超级用户口令,则用户可能会尝试通过结束脚本中的加密口令来发现超级用户口令。确保有相应的措施防止用户试图确定超级用户口令。


使用结束脚本与 Web Start 安装程序一起安装软件

安装了 Solaris 操作环境后,可以使用结束脚本来安装附加软件。有些软件程序由 Solaris Web Start 程序安装,在安装期间它会提示您输入信息。要使安装不受干扰,可以使用 -nodisplay-noconsole 选项运行 Solaris Web Start 程序。

表 24–1 Solaris Web Start 选项

选项 

说明 

-nodisplay

运行安装程序,但没有图形用户界面。使用缺省产品安装,除非安装已被 -locales 选项修改。

-noconsole

运行安装,但没有任何交互式文本控制台设备。当与 -nodisplay 一起用于 UNIX 脚本时很有用。

有关更多信息,请参见手册页 installer (1M)

创建压缩的配置文件

可以在引导系统时指定定制 JumpStart 配置文件的位置,而不是使用 add_install_client 命令来指定其位置。但是,在发出 boot 命令时只能指定一个文件的名称。因此,必须将所有的定制 JumpStart 配置文件压缩为一个文件。压缩的配置文件可以是以下类型之一:

创建压缩的配置文件

  1. 将目录更改到配置文件服务器上的 JumpStart 目录。


    # cd jumpstart_dir_path
    
  2. 使用压缩工具将定制 JumpStart 配置文件压缩为一个文件。


    注意:

    压缩的配置文件不能包含相对路径。定制 JumpStart 配置文件必须与压缩文件位于同一目录中。


    压缩的配置文件必须包含以下文件:

    • 配置文件

    • 规则

    • rules.ok

    也可以将 sysidcfg 文件包含在压缩的配置文件中。

  3. 将压缩的配置文件保存在 NFS 服务器、HTTP 服务器或本地硬盘中。

压缩的配置文件示例

下面的示例说明如何使用 tar 命令创建一个名为 config.tar 的压缩配置文件。定制 JumpStart 配置文件位于 /jumpstart 目录中。


实例 24–5 创建压缩的配置文件


# cd /jumpstart

# tar -cvf config.tar *

a profile 1K

a rules 1K

a rules.ok 1K

a sysidcfg 1K

创建磁盘配置文件

本节描述如何创建单磁盘和多磁盘配置文件。磁盘配置文件使您能够从单个系统中使用 pfinstall (1M) 针对不同的磁盘配置测试配置文件。

创建磁盘配置文件

  1. 找到包含要测试的磁盘的系统。

  2. 成为超级用户。

  3. prtvtoc(1M) 命令的输出重定向到一个文件以创建单磁盘配置文件。


    # prtvtoc /dev/rdsk/device_name>disk_config_file
    

    /dev/rdsk/device_name

    系统磁盘的设备名称。device_name 的形式必须是 cwtxdy s2cxd ys2

    disk_config_file

    磁盘配置文件的名称。 

  4. 确定是否在多个磁盘上测试 Solaris 软件的安装。

    • 如果不是,则停止。操作完成。

    • 如果是,并置单磁盘配置文件并将输出保存到一个新文件中。


      # cat disk_file1 disk_file2>multi_disk_config
      

      此新文件即成为多磁盘配置文件,如下面的示例所示:


      # cat 104_disk2 104_disk3 104_disk5>multi_disk_test
      
  5. 确定磁盘设备名称中的目标号码在前一个步骤中创建的多磁盘配置文件中是否唯一。

    • 如果是,则停止。操作完成。

    • 如果不是,使用文本编辑器打开此文件并使目标号码在磁盘设备名称中是唯一的。

      例如,假设对于不同的磁盘设备名称,此文件包含同一目标号码 t0,如下所示:

      * /dev/rdsk/c0t0d0s2 partition map
      
      ...
      
      * /dev/rdsk/c0t0d0s2 partition map

      将第二个目标号码更改为 t2,如下所示:

      * /dev/rdsk/c0t0d0s2 partition map
      
      ...
      
      * /dev/rdsk/c0t2d0s2 partition map

磁盘配置文件示例

下面的示例显示如何在具有 104 兆字节磁盘的系统中创建单磁盘配置文件 104_test


实例 24–6 创建磁盘配置文件

prtvtoc 命令的输出重定向到名为 104_test 的单磁盘配置文件:


# prtvtoc /dev/rdsk/c0t3d0s2>104_test

104_test 文件的内容与下面的内容相似:

* /dev/rdsk/c0t3d0s2 partition map

*

* Dimensions:

*     512 bytes/sector

*      72 sectors/track

*      14 tracks/cylinder

*    1008 sectors/cylinder

*    2038 cylinders*    2036 accessible cylinders

* Flags:

*   1: unmountable

*  10: read-only

*

*                          First     Sector    Last

* Partition  Tag  Flags    Sector     Count    Sector  Mount Directory

       1      2    00          0     164304   164303   /

       2      5    00          0    2052288  2052287  

       3      0    00     164304     823536   987839   /disk2/b298

       5      0    00     987840     614880  1602719   /install/298/sparc/work

       7      0    00    1602720     449568  2052287   /space

您创建了磁盘配置文件。 “测试配置文件”包含关于使用磁盘配置文件测试配置文件的信息。


使用站点特定的安装程序

您也可以使用开始脚本和结束脚本创建自己的安装程序来安装 Solaris 软件。

当您在配置文件字段中使用减号 (-) 时,开始脚本和结束脚本(而不是配置文件和 Solaris suninstall 程序)控制 Solaris 软件在系统上的安装方式。

例如,如果下面的规则匹配系统,则 x_install.beg 开始脚本和 x_install.fin 结束脚本将 Solaris 软件安装在名为 clover 的系统上:

hostname clover x_install.beg - x_install.fin