跳过导航链接 | |
退出打印视图 | |
创建定制 Oracle Solaris 11.1 安装映像 Oracle Solaris 11.1 Information Library (简体中文) |
分发构造器基于 XML 文件(称为“清单文件”)中指定的设置创建映像。清单文件包含使用分发构造器创建的 ISO 映像的内容和参数的规范。distribution-constructor 软件包提供可用于创建定制 x86 Live Media ISO、x86/SPARC 自动化安装 ISO 映像或 x86/SPARC 文本安装 ISO 映像的样例清单。
每个清单文件中的元素都提供预设的缺省值,这些值将创建您需要的 ISO 映像类型。可以手动编辑清单文件中的这些预设元素以定制所创建的映像。此外,还可以创建定制脚本以进一步修改映像。然后,引用清单文件中的新脚本。
distribution-constructor 软件包提供下表介绍的样例清单文件。
表 2-2 样例清单
|
此过程介绍了用于创建和构建定制映像的常规步骤。
您可以使用软件包管理器工具安装必需的软件包。在 Oracle Solaris 操作系统桌面的菜单栏中提供软件包管理器。在菜单栏上,转至 "System"(系统)>"Administration"(管理)>"Package Manager"(软件包管理器)。
或者,使用如下 IPS 命令安装该软件包:
# pkg install distribution-constructor
使用 distro_const 命令创建映像时,将按名称引用清单文件。
注 - 复制原始清单文件和缺省脚本之前,始终对其进行备份。
例如,您可以编辑清单中的目标元素,为可构造映像的构建区域指定其他位置。您还可以检查发布者以确保您的系统可与该发布者联系,以便下载构建映像所需的软件包。如有必要,可以编辑软件名称元素以指定其他发布者和系统信息库位置。
有关信息,请参见修改清单内容和 dc_manifest(4) 手册页。
如果创建了新脚本,请更新清单文件的执行部分中的脚本引用。
有关说明,请参见创建和使用定制脚本。
有关说明,请参见第 3 章。
每个清单文件中的所有字段都提供预设的缺省值,这些值将创建您需要的 ISO 映像类型。可以手动编辑清单文件中的这些预设字段,以进一步定制所创建的映像。
下表介绍了样例清单文件中的主要元素。
表 2-3 清单元素
|
使用以下元素可为要构建的映像提供定制或缺省名称:
<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"></origin> </publisher> <publisher name="publisher3.org"> <origin name="http://example3.com/dev"></origin> </publisher> </source>
有关使用发布者的详细信息,请参见《添加和更新 Oracle Solaris 11.1 软件包》。
带有 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.1 系统》中的第 9 章 "定制安装"。
示例 2-1 添加软件包和其他发布者
在该示例中,指定了另外一个发布者 mypublisher。指定了其他软件包 mypackage1 和 mypackage2。
在构建过程中,系统会按列出发布者的顺序检查这些发布者。如果在第一个发布者中没有找到软件包,将在下一个发布者中搜索指定的软件包。
<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 浏览器,则可以执行以下操作:
安装 solaris-desktop 组软件包,该组软件包包括常见 Live Media 桌面的所有软件。请参见列出要安装的软件包。
通过按照以下方式使用 uninstall 属性卸载 solaris-desktop 组软件包定义:
<software_data action="uninstall"> <name>pkg:/group/system/solaris-desktop</name> </software_data>
注 - 针对组软件包的卸载操作仅卸载组软件包定义。该组中的所有各个软件包仍将按照第一步进行安装。
现在各个软件包已不再与组定义绑定,您可以再次使用 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 属性。有关 IPS 属性信息,请参见 pkg(1) 手册页。
清单中的 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 目录中将根归档文件创建为一个文件。构造器还会对特定于要构建的系统类型的根归档文件应用任何优化。在此检查点之后,定制脚本对引导归档规范进行的更改不会集成到根归档文件中,因为根归档文件已压缩。
grub-setup-在此检查点处,构造器根据清单的 boot_entry 部分中指定的条目设置 GRUB2 菜单。此检查点仅适用于 x86 系统的映像。
pkg-img-mod-在此检查点处,构造器为要构建的映像创建主归档文件并优化 pkg_image 区域。构造器将文件移动到 pkg_image 目录中,以便为映像创建归档文件。pkg_image 目录中所包含的每一项均包含在映像中。在此检查点之后添加的任何项将不会包含在映像中。
create-iso-在此检查点处,构造器会构建 .iso 文件,这些文本包含 pkg_image 目录中的每一项。
查看每个检查点部分中包含的特定字段,每个检查点名称标记均包括 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> <dir path="/path/to/packages"/> </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_image 和 ZFS dataset/build_data/boot_archive。在本示例中,SVR4 软件包将被安装到 ZFS dataset/build_data/pkg_image 中。
最后,会在执行部分引用该新检查点。
<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"。
通过分发构造器,可以指定可用于基于要构建的映像类型在映像创建过程中进行定制的其他脚本。清单文件指向脚本,脚本会将通用映像转换为特定于介质的分发。这些脚本在清单文件的执行部分中引用。可以指定任意数量的定制脚本检查点。
注 - 脚本支持限于随应用程序软件包一起提供的任何未修改的缺省脚本。如果选择定制这些脚本,请先备份原始脚本。
此外,请注意清单文件的执行部分中指定的脚本会在映像创建过程中运行。执行部分不会引用预安装或安装后脚本。
创建您自己的定制脚本时,请注意以下内容:
脚本可以是 Python 程序、shell 脚本或二进制文件。
脚本以其在清单文件的执行部分中列出的顺序执行。
在脚本(shell 和 python 模块)内执行的命令的标准输出 (stdout) 和错误输出 (stderr) 记录在用于报告已完成构建或尝试构建的日志文件中。
确保承担 root 角色的用户可以执行这些脚本。
要确定新检查点的位置,请查看设置构建检查点中有关缺省检查点的说明。
确保为脚本指定完整路径。检查点以其在清单的执行部分中列出的顺序执行。
在清单文件的执行部分中为新脚本添加引用时,必须指定可用于在该脚本执行其任务之前或之后暂停映像构建的检查点名称。或者,可以包括与检查点名称关联的定制消息。如果忽略该消息,脚本的路径将用作缺省检查点消息。在构建过程中,检查点运行时将显示检查点消息。
以下示例检查点引用名为 "my-script" 的定制脚本。
<checkpoint name="my-script" desc="my new script" mod_path="solaris_install/distro_const/checkpoints/custom_script" checkpoint_class="CustomScript"> <args>/tmp/myscript.sh</args> </checkpoint>
此处,{PKG_IMAGE_PATH} 被指定为参数部分中的构建参数。
<checkpoint name="my-script" desc="my new script" mod_path="solaris_install/distro_const/checkpoints/my_script" checkpoint_class="CustomScript"> <args>/tmp/myscript.sh {PKG_IMAGE_PATH}</args> </checkpoint>
如果包括在检查点中,{PKG_IMAGE_PATH} 和 {BOOT_ARCHIVE} 的值将由 distro_const 实用程序分别替换为 ZFS dataset/build_data/pkg_image 和 ZFS dataset/build_data/boot_archive。
可以一步构建映像。或者,要检查构建状态,可以在各个检查点上停止然后重新启动构建。
有关说明,请参见第 3 章。
构建输出会显示日志文件的位置。