Solaris 9 9/04 安装指南

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

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


注意:

本章中的说明对于 SPARC 服务器或 x86 服务器都是有效的,这些服务器用于提供定制 JumpStart 文件,称为配置文件服务器。 配置文件服务器可以为不同类型的平台提供定制 JumpStart 文件。 例如,SPARC 服务器可以为 SPARC 系统和 x86 系统提供定制 JumpStart 文件。


创建开始脚本

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

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

关于开始脚本的重要信息

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

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

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

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

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


实例 27–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 指定为根路径。


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

  #!/bin/sh
 
  BASE=/a
  MNT=/a/mnt
  ADMIN_FILE=/a/tmp/admin
 
  mkdir ${MNT}
  mount -f nfs sherlock:/export/package ${MNT}
  cat >${ADMIN_FILE} <<DONT_ASK
  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} SUNWxyz 
  umount ${MNT}
  rmdir ${MNT}

以下说明用于此例的一些命令。



实例 27–3 使用结束脚本添加修补程序

 #!/bin/sh 

########
#
# USER-CONFIGURABLE OPTIONS
#
########

# The location of the patches to add to the system after it's installed.
# The OS rev (5.x) and the architecture (`mach`) will be added to the
# root.  For example, /foo on a 8 SPARC would turn into /foo/5.8/sparc
LUPATCHHOST=ins3525-svr
LUPATCHPATHROOT=/export/solaris/patchdb
#########
#
# NO USER-SERVICEABLE PARTS PAST THIS POINT
#
#########

BASEDIR=/a

# Figure out the source and target OS versions
echo Determining OS revisions...
SRCREV=`uname -r`
echo Source $SRCREV

LUPATCHPATH=$LUPATCHPATHROOT/$SRCREV/`mach`

#
# Add the patches needed
#
echo Adding OS patches
mount $LUPATCHHOST:$LUPATCHPATH /mnt >/dev/null 2>&1
if [ $? = 0 ] ; then
	for patch in `cat /mnt/*Recommended/patch_order` ; do
		(cd /mnt/*Recommended/$patch ; echo yes | patchadd -u -d -R $BASEDIR .)
	done
	cd /tmp
	umount /mnt
else
	echo "No patches found"
if


注意:

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

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

cp /etc/mnttab /a/etc/mnttab

使用结束脚本定制根环境

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


实例 27–4 使用结束脚本定制根环境

#!/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 显示在 实例 27–5 中。


注意:

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



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

	 #!/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 file
 cp /a/etc/shadow /a/etc/shadow.orig
 
	 mv /a/etc/shadow /a/etc/shadow.orig
 	nawk -F: '{
         if ( $1 == "root" )
           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.orig
 # set the flag so sysidroot won't prompt for the root password
 sed -e 's/0 # root/1 # root/' ${SI_SYS_STATE} > /tmp/state.$$
  mv /tmp/state.$$ ${SI_SYS_STATE}

以下说明此例中的一些命令。


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

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

表 27–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

    • rules.ok

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

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

压缩的配置文件实例

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


实例 27–6 创建压缩的配置文件


# cd /jumpstart
# tar -cvf config.tar *
a profile 1K
a rules 1K
a rules.ok 1K
a sysidcfg 1K

创建磁盘配置文件

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

SPARC: 创建磁盘配置文件

  1. 找到具有要测试的磁盘的 SPARC 系统。

  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

SPARC: 磁盘配置文件实例

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


实例 27–7 SPARC: 创建磁盘配置文件

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

您已为基于 SPARC 的系统创建了磁盘配置文件。 测试配置文件包含关于使用磁盘配置文件测试配置文件的信息。


x86: 创建磁盘配置文件

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

  2. 成为超级用户。

  3. 通过将 fdisk(1M) 命令的输出保存到文件中,来创建单磁盘配置文件的一部分。


    # fdisk -R -W disk_config_file -h /dev/rdsk/device_name
    
    disk_config_file

    磁盘配置文件的名称。

    /dev/rdsk/device_name

    整个磁盘的 fdisk 布局的设备名称。 device_name 的形式必须是 cwtxdyp0cxdyp0

  4. prtvtoc(1M) 命令的输出附加到磁盘配置文件:


    # prtvtoc /dev/rdsk/device_name >>disk_config
    
    /dev/rdsk/device_name

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

    disk_config

    磁盘配置文件的名称。

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

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

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


      # cat disk_file1 disk_file2 >multi_disk_config
      

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


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

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

    • 如果否,用文本编辑器打开该文件并使目标号码唯一。

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

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

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

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

x86: 磁盘配置文件实例

下面的实例显示如何在具有 500 MB 磁盘的 x86 系统中创建单磁盘配置文件 500_test


实例 27–8 x86: 创建磁盘配置文件

首先,将 fdisk 命令的输出保存到名为 500_test 的文件中:


# fdisk -R -W 500_test -h /dev/rdsk/c0t0d0p0

500_test 文件如下所示:

 * /dev/rdsk/c0t0d0p0 default fdisk table
* Dimensions:
*     512 bytes/sector
*      94 sectors/track
*      15 tracks/cylinder
*    1455 cylinders
*
*  HBA Dimensions:
*     512 bytes/sector
*      94 sectors/track
*      15 tracks/cylinder
*    1455 cylinders
*
* systid:
*  1:    DOSOS12
*  2:    PCIXOS
*  4:    DOSOS16
*  5:    EXTDOS
*  6:    DOSBIG
*  86:   DOSDATA
*  98:   OTHEROS
*  99:   UNIXOS
* 130:   SUNIXOS
*
* Id  Act Bhead Bsect   Bcyl  Ehead  Esect  Ecyl Rsect  Numsect
 130  128 44    3       0     46    30     1001 1410   2050140

第二步,将 prtvtoc 命令的输出附加到 500_test 文件:


# prtvtoc /dev/rdsk/c0t0d0s2 >>500_test

现在,500_test 文件是一个完整的磁盘配置文件:

* /dev/rdsk/c0t0d0p0 default fdisk table	
* Dimensions:
*     512 bytes/sector
*      94 sectors/track
*      15 tracks/cylinder
*    1455 cylinders
*
*  HBA Dimensions:
*     512 bytes/sector
*      94 sectors/track
*      15 tracks/cylinder
*    1455 cylinders
*
* systid:
*  1:    DOSOS12
*  2:    PCIXOS
*  4:    DOSOS16
*  5:    EXTDOS
*  6:    DOSBIG
*  86:   DOSDATA
*  98:   OTHEROS
*  99:   UNIXOS
*  130:  SUNIXOS
*
* Id  Act Bhead Bsect Bcyl  Ehead  Esec  Ecyl Rsect  Numsect
 130  128 44    3     0     46    30    1001 1410   2050140
* /dev/rdsk/c0t0d0s2 partition map
*
* Dimensions:
*      512 bytes/sector
*       94 sectors/track
*       15 tracks/cylinder
*     1110 sectors/cylinder
*     1454 cylinders
*     1452 accessible cylinders
*
* Flags:
*   1: unmountable
*  10: read-only
*                          First    Sector    Last
* Partition  Tag  Flags    Sector     Count    Sector  Mount Directory
       2      5    01       1410   2045910   2047319
       7      6    00       4230   2043090   2047319  /space
       8      1    01          0      1410     1409
       9      9    01       1410      2820     422987

您已为基于 x86 的系统创建了磁盘配置文件。 测试配置文件包含关于使用磁盘配置文件测试配置文件的信息。


使用站点特定的安装程序

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

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

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

hostname clover x_install.beg - x_install.fin