JavaScript is required to for searching.
跳过导航链接
退出打印视图
在 Oracle Solaris 11.1 中使用映像包管理系统打包和交付软件     Oracle Solaris 11.1 Information Library (简体中文)
为本文档评分
search filter icon
search icon

文档信息

前言

1.  IPS 设计目标、概念和术语

2.  使用 IPS 打包软件

3.  安装、删除和更新软件包

4.  指定软件包相关项

5.  允许变量

6.  以编程方式修改软件包清单

7.  在软件包安装过程中自动进行系统更改

在软件包操作中指定系统修改

交付 SMF 服务

交付新的 SMF 服务

交付运行一次的服务

在 SMF 方法中支持软件包自组装

测试是否需要重新编译配置文件

限制等待自组装完成的时间

8.  有关软件包更新的高级主题

9.  对 IPS 软件包进行签名

10.  处理非全局区域

11.  修改已发布的软件包

A.  对软件包进行分类

B.  如何使用 IPS 打包 Oracle Solaris OS

请告诉我们如何提高我们的文档:
过于简略
不易阅读或难以理解
重要信息缺失
错误的内容
需要翻译的版本
其他
Your rating has been updated
感谢您的反馈!

您的反馈将非常有助于我们提供更好的文档。 您是否愿意参与我们的内容改进并提供进一步的意见?

交付 SMF 服务

要交付新 SMF 服务,请创建一个交付 SMF 清单文件和方法脚本的软件包。

本节首先讨论交付任何新 SMF 服务的一般情况,然后讨论交付只运行一次的服务的特定情况。最后,本节提供了有关这些服务软件包的自组装的一些提示。

交付新的 SMF 服务

交付新 SMF 服务的软件包通常需要更改系统。

在 SVR4 包管理中,安装后脚本运行 SMF 命令来重新启动 svc:/system/manifest-import:default 服务。

在 IPS 中,将清单文件交付到 lib/svc/manifestvar/svc/manifest 的操作应该使用以下执行器进行标记:

restart_fmri=svc:/system/manifest-import:default

此执行器确保当添加、更新或删除清单时,manifest-import 服务将重新启动,从而添加、更新或删除通过该 SMF 清单交付的服务。

如果软件包添加到实时系统,一旦在打包操作期间将所有软件包都添加到了系统就会执行此操作。如果软件包添加到备用引导环境,则在引导环境的第一次引导期间执行该操作。

交付运行一次的服务

需要执行新软件环境的一次配置的软件包应交付 SMF 服务以执行此配置。

交付应用程序的软件包应包含以下操作:

file path=opt/myapplication/bin/run-once.sh owner=root group=sys mode=0755
file path=lib/svc/manifest/application/myapplication-run-once.xml owner=root group=sys \
mode=0644 restart_fmri=svc:/system/manifest-import:default

服务的 SMF 方法脚本可以包含进一步配置应用程序或修改系统使应用程序有效运行所需的任何内容。在此示例中,方法脚本写入简单的日志消息:

#!/usr/bin/sh
. /lib/svc/share/smf_include.sh
assembled=$(/usr/bin/svcprop -p config/assembled $SMF_FMRI)
if [ "$assembled" == "true" ] ; then
    exit $SMF_EXIT_OK
fi
svccfg -s $SMF_FMRI setprop config/assembled = true
svccfg -s $SMF_FMRI refresh
echo "This is output from our run-once method script"

通常,如果应用程序尚未配置,SMF 服务应仅执行工作。此示例方法脚本检查 config/assembled。备用方法是将服务和应用程序分开打包,然后使用方法脚本删除包含该服务的软件包。

当测试方法脚本时,在运行执行器的软件包安装前或安装后运行 pkg verify。比较每个运行的输出来确保脚本没有尝试修改任何未标记为可编辑的文件。

下面显示了此示例的 SMF 服务清单:

<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<service_bundle type='manifest' name='MyApplication:run-once'>
<service
    name='application/myapplication/run-once'
    type='service'
    version='1'>
    <single_instance />
    <dependency
        name='fs-local'
        grouping='require_all'
        restart_on='none'
        type='service'>
            <service_fmri value='svc:/system/filesystem/local:default' />
    </dependency>
    <dependent
        name='myapplication_self-assembly-complete'
        grouping='optional_all'
        restart_on='none'>
        <service_fmri value='svc:/milestone/self-assembly-complete' />
    </dependent>
    <instance enabled='true' name='default'>
        <exec_method
            type='method'
            name='start'
            exec='/opt/myapplication/bin/run-once.sh'
            timeout_seconds='0'/>
        <exec_method
            type='method'
            name='stop'
            exec=':true'
            timeout_seconds='0'/>
        <property_group name='startd' type='framework'>
            <propval name='duration' type='astring' value='transient' />
        </property_group>
        <property_group name='config' type='application'>
            <propval name='assembled' type='boolean' value='false' />
        </property_group>
    </instance>
</service>
</service_bundle>

请注意,SMF 服务的 startd/duration 属性设置为 transient,所以 svc.startd(1M) 不跟踪此服务的进程。还要注意服务将自身添加为 self-assembly-complete 系统里程碑的相关项。

在 SMF 方法中支持软件包自组装

本节提供了编写 SMF 方法时支持软件包自组装的一些附加提示。

测试是否需要重新编译配置文件

如果每次运行方法脚本时通过已打包配置文件片段编译配置文件的成本较高,请考虑在方法脚本中使用以下测试。

对已打包配置文件片段的目录运行 ls -t,然后使用 head -1 来选择最近更改的版本。将此文件的时间戳与通过那些片段编译的未打包配置文件的时间戳比较,确定服务是否需要重新编译配置文件。

限制等待自组装完成的时间

以上所示的示例 SMF 服务清单为 start 方法定义了 timeout_seconds='0'。这意味着 SMF 将会无限期地等待自组装完成。

为了有助于调试,您可能想要对自组装过程强加一个有限超时,从而使 SMF 在出现问题时将服务下降至维护状态。