跳过导航链接 | |
退出打印视图 | |
创建定制 Oracle Solaris 11 安装映像 Oracle Solaris 11 Information Library (简体中文) |
分发构造器基于 XML 文件(称为“清单文件”)中指定的设置创建映像。清单文件包含使用分发构造器创建的 ISO 映像的内容和参数的规范。distribution-constructor 软件包提供可用于创建定制 LiveCD、x86/SPARC AI ISO 映像或 x86/SPARC 文本安装映像的样例清单。
每个清单文件中的元素都提供预设的缺省值,这些值将创建您需要的 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" 的专门的引导菜单将应用于映像。超时属性指定自动激活缺省引导条目之前的时间。
<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">
在本部分的源元素中,编辑发布者名称和源名称元素来指定要使用的发布者以及软件包系统信息库所处的位置。可以列出多个发布者。当分发构造器尝试定位要安装的软件包时,按在此处列出的顺序搜索发布者。
如果需要指定发布者的镜像,请取消注释并编辑镜像名称元素。
请参见以下示例。
<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 软件包》。
带有 install 属性的 software_data 元素根据您使用的清单,列出为了构建特定类型的映像而需安装的一组软件包。例如,dc_livecd.xml 清单列出构建 LiveCD 映像所需的软件包。每个名称标记列出一个软件包名称或包含许多软件包的软件包组的名称。
<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>
注 - 如果安装了其他冲突版本的软件包,则可能不会安装所指定的特定版本的软件包。有关详细信息,请参见 pkg(5) 手册页。
示例 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 元素可用于卸载单个软件包或卸载软件包组定义。
在以下示例中,solaris-desktop 是包含许多单个软件包的软件包组的名称。
<software_data action="uninstall"> <name>pkg:/group/system/solaris-desktop</name> </software_data>
可以卸载软件包组。卸载软件包组实际只卸载了组定义。不会卸载之前作为该组的一部分安装的单个软件包。但是,可以在不卸载软件包组的情况下卸载这些单独的软件包。保留软件包组可用于正在进行的引用。还可以使用名称标记来卸载单个软件包。在卸载部分的末尾附加将卸载的其他软件包。
当使用映像(该映像是使用分发构造器创建的)安装系统后,以下元素将影响该系统。
<software name="set-ips-attributes">
提供发布者名称和可选镜像名称标记以指定已安装系统可从何处访问其他软件包并进行下载和安装。
也可以在该元素中设置 IPS 属性。有关 IPS 属性信息,请参见 pkg(1) 手册页。
清单中的执行元素列出在映像构建过程中执行的一系列检查点。按此部分中的排列顺序执行检查点。构建缺省安装映像所需的缺省检查点包含在每个清单中。
每个检查点名称标记都包括用于指定检查点脚本所在位置的 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 章。
构建输出会显示日志文件的位置。