创建定制 Oracle® Solaris 11.2 安装映像

退出打印视图

更新时间: 2014 年 7 月
 
 

修改清单内容

每个清单文件中的所有字段都提供预设的缺省值,这些值将创建您需要的 ISO 映像类型。可以手动编辑清单文件中的这些预设字段,以进一步定制所创建的映像。

下表介绍了样例清单文件中的主要元素。

表 2-3  清单元素
元素
说明
<distro name="Oracle_Solaris_Text_X86"
add_timestamp="false">
指定带有可选时间戳的映像名称
<boot_mods>
指定映像的 GRUB 菜单修改
<target>
定义构建映像的 ZFS 构建数据集
<software name="transfer-ips-install" type="IPS">
指定要安装的软件包的源
<software_data action="install">
列出要安装的软件包
<software_data action="uninstall">
列出要卸载的软件包
<software name="set-ips-attributes">
安装完成后为 IPS 设置不同属性
<software name="ba-init">
指定引导归档文件内容

注意  -  修改时请谨慎。如果引导归档文件不正确,则安装的系统将无法进行引导。

<execution stop_on_error="true">
<checkpoint name="transfer-ips-install"/>
列出构建检查点
<configuration name="pre-pkg-img-mod" type="sysconf"
 
source="/etc/svc/profile/generic_limited_net.xml">
指定构建期间要应用到介质的 SMF 服务

注意  -  很少进行修改。

提供映像标题

使用以下元素可为要构建的映像提供定制或缺省名称:

<distro name="Oracle_Solaris_Text_X86" add_timestamp="false">

如果您要构建一系列映像,并保留增量式映像,可以将时间戳变量更改为 "true",然后时间戳将自动附加到每个映像的名称中。

如果需要指定 HTTP 代理,请取消注释包含代理变量的 distro name 元素,然后提供代理位置。

修改引导菜单

该引导菜单元素指定要应用于映像的引导菜单修改。

在以下示例中,一个标题为 "boot1" 的专门的引导菜单将应用于映像。timeout 属性指定自动激活缺省引导条目之前的时间。

<boot_mods title="boot1" timeout="5">

在引导菜单元素中,您可以通过为每个新条目添加新的 boot_entry 元素来添加各个引导菜单条目。各条目按顺序添加到引导菜单,该顺序基于每个引导条目的 insert_at 属性值 "start" 或 "end"。


注 - 在现有 "with magnifier" 条目之前添加新条目。

请参见以下单个 boot_entry 元素的示例。

<boot_entry>
   <title_suffix>with screen reader</title_suffix>
   <kernel_args>-B assistive_tech=reader</kernel_args>
</boot_entry>

有关详细信息,请参见 dc_manifest(4) 手册页。

指定构建区域

可以定制 target 元素。该元素定义将用于该构建的 ZFS 构建数据集。该数据集是将创建映像的区域。您必须提供有效的数据集位置。应当检查缺省构建区域,以确保构建过程中不会销毁需要保留在系统上的内容。如有必要,请修改构建区域。


注 - 文件系统名称不应当包括 zpool 的名称。

以下示例显示了一个目标元素样例。

 <target>
   <logical>
     <zpool action="use_existing" name="rpool">
       <dataset>
         <filesystem name="dc/sample-dataset-location" 
         action="preserve"/>
       </dataset>
     </zpool>
   </logical>
 </target>

指定发布者

以下元素指定分发构造器可以从其中下载软件包来构建映像的发布者。

<software name="transfer-ips-install">

在此 software name 部分的源元素中,编辑发布者名称和源名称元素来指定要使用的发布者以及软件包系统信息库所处的位置。系统信息库位置可能是 NFS 路径或本地目录。可以列出多个发布者。当分发构造器尝试定位要安装的软件包时,按在此处列出的顺序搜索发布者。

如果需要指定发布者的镜像,请取消注释并编辑镜像名称元素。

以下示例显示了在 software name 元素中找到的样例源元素。

<source>
   <publisher name="publisher1">
      <origin name="http://example.oracle.com/primary-pub"/>
      <mirror name="mirror.example.com"/>
   </publisher>
   <publisher name="publisher2">
       <origin name="http://example2.com/dev/solaris"/>
   </publisher>
   <publisher name="publisher3.org">
       <origin name="http://example3.com/dev"/>
   </publisher>
   <publisher name="publisher4">
       <origin name="file:///net/myserver/publisher4/repo"/>
   </publisher>
</source>

有关使用发布者的详细信息,请参见在 Oracle Solaris 11.2 中添加和更新软件

列出要安装的软件包

带有 install 属性的 software_data 元素根据您使用的清单,列出为了构建特定类型的映像而需安装的一组软件包。例如,dc_livecd.xml 清单列出构建 Live Media 映像所需的软件包。每个名称标记列出一个软件包名称或包含许多软件包的软件包组的名称。

<software_data action="install">
   <name>pkg:/group/system/solaris-desktop</name>
   <name>pkg:/system/install/gui-install</name>
   <name>pkg:/system/install/media/internal</name>
</software_data>

如果您有要添加到映像的软件包,通过为每个软件包添加名称标记来附加软件包名称。

缺省情况下,将安装指定系统信息库中可用的最新软件包版本。如果需要其他版本,请使用以下格式将版本号附加到软件包引用中:

<name>pkg:/group/system/solaris-desktop@0.5.11-0.build#</name>

注 - 您系统上的 Oracle Solaris 发行版版本必须与要使用分发构造器创建的映像发行版版本相同。

此外,如果按照自动化安装服务的清单文件指定的情况安装了其他冲突版本的软件包,则可能不会安装所指定的特定版本的软件包。请参见安装 Oracle Solaris 11.2 系统 中的第 9  章 定制安装


示例 2-1  添加软件包和其他发布者

在该示例中,指定了另外一个发布者 mypublisher。指定了其他软件包 mypackage1mypackage2

在构建过程中,系统会按列出发布者的顺序检查这些发布者。如果在第一个发布者中没有找到软件包,将在下一个发布者中搜索指定的软件包。

<software name="transfer-ips-install" type="IPS">
   <destination>
      <xi:include xmlns:xi="http://www.w3.org/2003/XInclude"
            href="/usr/share/distro_const/lang_facets.xml"/>
   </destination>
   <source>
      <publisher name="solaris">
          <origin name="http://pkg.oracle.com/solaris/release"/>
      </publisher>
      <publisher name="mypublisher">
         <origin name="http://mypublisher.company.com"/>
      </publisher>
   </source>
   <software_data action="install">
        <name>pkg:/group/system/solaris-large-server</name>
        <name>pkg:/system/install/text-install</name>
        <name>pkg:/system/install/media/internal</name>
        <name>pkg:/mypackage1</name>
        <name>pkg:/mypackage2</name>
   </software_data>
</software>

列出要卸载的软件包

带有 uninstall 属性的 software_data 元素可用于卸载单个软件包或卸载软件包组定义。


注 - 组软件包定义将该组中各个软件包一起绑定到一个仅可用作一个组的单元。

如果要安装整个组软件包但又希望省略该组中一个或多个单独的软件包,则 uninstall 属性特别有用。您可以首先使用 uninstall 属性删除组软件包定义。然后,可以卸载作为组软件包一部分的各个软件包。

例如,您可以选择构建 Live Media 安装映像。缺省 Live Media 安装映像在桌面组软件包中包括 Firefox 浏览器。

    如果希望在要构建的映像中省略 Firefox 浏览器,则可以执行以下操作:

  1. 安装 solaris-desktop 组软件包,该组软件包包括常见 Live Media 桌面的所有软件。请参见列出要安装的软件包

  2. 通过按照以下方式使用 uninstall 属性卸载 solaris-desktop 组软件包定义:

    <software_data action="uninstall">
       <name>pkg:/group/system/solaris-desktop</name>
    </software_data>

    注 - 针对组软件包的卸载操作仅卸载组软件包定义。该组中的所有各个软件包仍将按照第一步进行安装。
  3. 现在各个软件包已不再与组定义绑定,您可以再次使用 uninstall 属性卸载 Firefox 软件包。

    <software_data action="uninstall">
       <name>pkg:/web/browser/firefox</name>
    </software_data>

    或者,可以按照以下方式将步骤 2 和 3 合并为一个条目:

    <software_data action="uninstall">
    		<name>pkg:/group/system/solaris-desktop</name>
    		<name>pkg:/web/browser/firefox</name>
    </software_data>

在卸载部分的末尾附加将卸载的其他软件包。

指定已安装系统的发布者

当使用通过分发构造器创建的映像安装系统后,software name 元素将影响该系统。

<software name="set-ips-attributes">

提供发布者名称和可选镜像名称标记以指定已安装系统可从何处访问其他软件包并进行下载和安装。

也可以在该元素中设置 IPS 属性。请参见 pkg(1) 手册页中的 IPS 属性信息。

设置构建检查点

清单中的 execution 元素列出在映像构建过程中执行的一系列检查点。按此部分中的排列顺序执行检查点。构建缺省安装映像所需的缺省检查点包含在每个清单中。

在映像构建过程中,检查点将修改在清单中指定的构建区域的内容。

    构建区域包含以下目录:

  • ZFS dataset/build_data/pkg_image

  • ZFS dataset/build_data/boot_archive

其中 ZFS dataset 变量由清单中目标元素指定。

在构建过程中,要包含在最终映像中的所有项均将添加到 pkg_image 目录中。独立 boot_archive 目录中的文件在构建过程中用于创建引导归档文件,该文件也会添加到 pkg_image 目录中。

    以下列表按照检查点在大多数清单中执行的顺序对每个缺省检查点进行了简要说明。

  • transfer-ips-install-在此检查点处,分发构造器联系 IPS 发布者并将清单的 software_data 元素中列出的软件包添加到映像中。

  • set-ips-attributes-在此检查点处,构造器将发布者设置为由已安装的系统使用。如果构建自动化安装映像,则与此检查点设置的值无关。

  • pre-pkg-img-mod-在此检查点处,构造器将清单的 configuration 元素中指定的 SMF 服务文件导入到映像中。此外,该构造器还修改一些文件以优化该映像。

    通过此检查点进行的所有更改均包含在要构建的映像和根归档文件中。如果要确保将定制脚本中的更改并入到根归档文件和映像中,应在此 pre-pkg-img-mod 检查点之前或紧接其后添加定制脚本的新检查点。

  • ba-init-在此检查点处,构造器使用清单的 ba-init 部分中列出的文件填充根归档文件。这些文件从 pkg_image 区域复制到 root_archive 区域。

  • ba-config-在此检查点处,构造器对复制到根归档文件的文件执行进一步修改。构造器会创建指向那些直到引导过程的最后才需要的文件的符号链接,以便将根归档文件的大小减至最小。

  • ba-arch-在此检查点处,构造器会压缩根归档文件并在 pkg_image 目录中将根归档文件创建为一个文件。构造器还会对特定于要构建的系统类型的根归档文件应用任何优化。在此检查点之后,定制脚本对引导归档规范进行的更改不会集成到根归档文件中,因为根归档文件已压缩。

  • boot-setup-在此检查点处,构造器根据清单的 boot_entry 部分中指定的条目设置 GRUB2 菜单。此检查点仅适用于 x86 系统的映像。

  • pkg-img-mod-在此检查点处,构造器为要构建的映像创建主归档文件并优化 pkg_image 区域。构造器将文件移到 pkg_image 目录中,以便为映像创建归档文件。pkg_image 目录中所包含的每一项均包含在映像中。在此检查点之后添加的任何项将不会包含在映像中。

  • create-iso-在此检查点处,构造器会构建 .iso 文件,这些文本包含 pkg_image 目录中的每一项。

  • create-usb- 在此检查点处,构造器会从生成的 .iso 文件构建 .usb 文件。

查看每个检查点部分中包含的特定字段,每个检查点名称标记均包括 mod-path 属性,该属性指定检查点脚本所在的位置。

某些缺省检查点标记包括提供了缺省值的参数。dc_ai_sparc.xml 样例清单的以下检查点示例会创建用于构建映像的引导归档文件,并指向将完成该任务的脚本。示例检查点还包括为每个参数提供了特定值的参数字段。

<checkpoint name="ba-arch"
    desc="Boot Archive Archival"
    mod_path="solaris_install/distro_const/checkpoints/
    boot_archive_archive"
    checkpoint_class="BootArchiveArchive">
    <kwargs>
        <arg name="size_pad">0</arg>
        <arg name="bytes_per_inode">0</arg>
        <arglist name="uncompressed_files">
             <argitem>etc/svc/repository.db</argitem>
             <argitem>etc/name_to_major</argitem>
             <argitem>etc/minor_perm</argitem>
             <argitem>etc/driver_aliases</argitem>
             <argitem>etc/driver_classes</argitem>
             <argitem>etc/path_to_inst</argitem>
             <argitem>etc/default/init</argitem>
             <argitem>etc/nsswitch.conf</argitem>
             <argitem>etc/passwd</argitem>
             <argitem>etc/shadow</argitem>
             <argitem>etc/inet/hosts</argitem>
        </arglist>
    </kwargs>
</checkpoint>

如本示例所示,kwargs 元素包含在构建期间需要传递到检查点的关键字参数。kwargs 元素内部包含 arg name 元素,这些元素可用于指定要传递到检查点的各个关键字。而 arglist 元素包含要传递到检查点的多个 argitem 值的列表。本示例的 arglist 元素中包含未压缩文件的列表。

每个 kargs 列表项均用双引号括起来。如果未使用双引号,或者使用一组双引号括住整个字符串,则包括空格和换行符在内的整个字符串将被视为一个参数。请勿在参数之间使用逗号。

如果创建构建映像期间要使用的定制脚本,必须添加指向该脚本位置的检查点元素。定制脚本的检查点只需要一个指向定制脚本位置的 args 元素。有关详细信息和示例,请参见创建和使用定制脚本

使用 distro_const 命令选项可控制在特定的检查点停止和重新启动构建过程。请参见如何分阶段构建映像

示例 2-2  添加 SVR4 软件包

在此示例中,一个新检查点将被添加到清单中。该新检查点会列出要添加到映像的 SVR4 软件包及其位置。然后,会在执行部分引用该新检查点。

首先,通过添加新的 software 元素创建新检查点。该检查点指定 SVR4 作为软件类型,并指定查找软件包以及安装软件包的位置。

此外,要安装的特定 SVR4 软件包会列在 software_data 元素中。

<software name="transfer-svr4-install" type="SVR4">
   <destination>
       <dir path="{PKG_IMAGE_PATH}"/>
   </destination>
   <source>
    <publisher/>
      <origin name="/path/to/packages"/>
    </publisher>
   </source>
   <software_data action="install">
      <name>SUNWpackage1</name>
      <name>SUNWpackage2</name>
   </software_data>
</software>

如果包括在检查点中,{PKG_IMAGE_PATH}{BOOT_ARCHIVE} 的值将由 distro_const 实用程序分别替换为 ZFS dataset/build_data/pkg_imageZFS dataset/build_data/boot_archive。在本示例中,SVR4 软件包将安装到 ZFS dataset/build_data/pkg_image 中。

最后,会在执行部分引用该新检查点。检查点名称可以是任何字符串,但是对于此示例,checkpoint_class 必须是 TransferSVR4

<execution stop_on_error="true">
   <checkpoint name="transfer-ips-install"
       desc="Transfer pkg contents from IPS"
       mod_path="solaris_install/transfer/ips"
       checkpoint_class="TransferIPS"/>
   <checkpoint name="set-ips-attributes"
       desc="Set post-install IPS attributes"
       mod_path="solaris_install/transfer/ips"
       checkpoint_class="TransferIPS"/>
   <checkpoint name="transfer-svr4-install"
      desc="Transfer pkg contents from SVR4 packages"
      mod_path="solaris_install/transfer/svr4"
      checkpoint_class="TransferSVR4"/>

请注意,软件名称必须与检查点名称匹配。在该示例中,这两个名称均为 "transfer-svr4–install"。

示例 2-3  创建介质的散列

在此检查点处,用户可以通过使用 DC 清单中的校验和检查点来自动生成由 distro_const 生成的介质的散列。

    <checkpoint name="checksums" 
      desc="Checksum calculation for media" 
      mod_path="solaris_install/distro_const/checkpoints/checksums"
      checkpoint_class="Checksums"> 
      <kwargs> 
        <arglist name="algorithms"> 
          <argitem file_path="/tmp/md5sums.txt">md5</argitem> 
          <argitem>sha1</argitem> 
          <argitem>sha224</argitem> 
          <argitem>sha256</argitem> 
          <argitem>sha384</argitem> 
          <argitem>sha512</argitem> 
        </arglist> 
      </kwargs> 
    </checkpoint>
  

arglist 包括用于为生成的介质生成散列的所有算法。每个 argitem 指定一个算法。可以通过运行 /usr/bindigest -l 确定有效算法。每个 argitem 可以有一个 path 属性,指定某个其他文件的绝对路径,附加在相应算法生成的散列前。如果未指定算法,则缺省为 md5

构建映像时,对于每个算法都将生成包含每个介质的校验和的文件。