跳过导航链接 | |
退出打印视图 | |
![]() |
在 Oracle Solaris 11.1 中使用映像包管理系统打包和交付软件 Oracle Solaris 11.1 Information Library (简体中文) |
根据上述目标和理念,IPS 引入了软件自组装的一般概念:系统上安装的软件的任何集合都应该能够在该系统引导时、打包操作完成时或软件运行时将自己构建到工作配置中。
有了软件自组装功能,IPS 中消除了在安装时编写脚本的需求。软件将负责其自己的配置,而不是依赖于包管理系统来代表软件执行该配置。软件自组装还能使包管理系统在备用映像(如当前未引导的引导环境或处于脱机状态的区域根目录)上安全运行。此外,由于自组装仅在正在运行的映像上执行,所以软件包开发者不需要应对跨版本或跨体系结构的运行时上下文。
在引导之前,必须做一些操作系统映像准备工作,IPS 以透明方式管理此过程。映像准备工作包括更新引导块、准备引导归档文件 (ramdisk) 以及在某些体系结构中管理引导选择菜单。
以下 IPS 功能和特性有助于实施软件自组装。
在 IPS 中,操作是用于交付软件的原子单位。每个操作交付一个软件对象。该软件对象可以是文件系统对象,例如文件、目录或链接,也可以是更为复杂的软件结构,例如用户、组或驱动程序。在 SVR4 包管理系统中,这些更为复杂的操作类型通过使用类操作脚本进行处理。在 IPS 中,不需要编写脚本。
操作组合到一起成为软件包,并可以在活动映像和脱机映像中安装、更新和删除。
软件包内容:操作中对操作进行了更详细的论述。
由于配置文件在打包操作期间需要开销巨大的脚本编写来更新每个配置文件,IPS 提倡交付配置文件的片段,而不是维护复杂的配置文件。打包后的应用程序在读取其配置时可以直接访问这些片段,也可以将这些片段组合成一个完整的配置文件,然后读取该文件。
Oracle Solaris 11 用户属性数据库就是一个典型的片段式配置文件。/etc/user_attr 配置文件用来为系统上的角色和用户配置扩展属性。在 Oracle Solaris 11 中,/etc/user_attr 文件仅用于本地更改。完整配置是从交付到 /etc/user_attr.d 目录中的各个文件中读取的。多个软件包交付了完整配置的各个片段。安装、删除或更新片段时不需要编写脚本。
这种用来组合配置文件的方法要求在编写软件时始终牢记组合这一理念,但这并不是始终可行。
用来支持组合的另一种方式是使服务将配置文件视为可变的,然后在安装、删除或更新配置的片段时重新组装该配置文件。通常,此组装由 SMF 服务执行。在接下来的章节中将进一步讨论 SMF 服务执行的组装。
执行器是一个标记,应用于包管理系统提供的所有操作,在安装、删除或更新相应操作时该标记会导致系统发生更改。这些更改通常以 SMF 服务的方式实现。
SMF 服务可以直接配置软件,也可以使用 SMF 清单中提供的数据或来自系统上所安装文件的数据来构造配置文件。
SMF 具有丰富的语法来表达相关项。每个服务只有在其所有相关项都得到满足时才能运行。
任何服务都可以将其自身作为一个相关项添加到 svc:/milestone/self-assembly-complete:default SMF 里程碑中。当正在引导的操作系统到达该里程碑后,所有自组装操作也应当完成了。
一种特殊类型的区域称为不变区域,该区域可以配置为对其文件系统的各部分具有受限制的写入权限。请参见 zonecfg(1M) 手册页中有关 file-mac-profile 的论述。要在此类型的区域中完成自组装,请引导区域进行读/写。在到达 self-assembly-complete SMF 里程碑后,区域将自动引导至所需的 file-mac-profile 设置。
以下示例介绍了作为 Oracle Solaris 的一部分交付的软件包。
Oracle Solaris 软件包中的 Apache Web Server 是一个典型的自组装示例:pkg:/web/server/apache-22。该软件包附带了一个缺省的 httpd.conf 文件,该文件中包含一个引用 /etc/apache2/2.2/conf.d 文件的 Include 指令。
Include /etc/apache2/2.2/conf.d/*.conf
其他软件包可以将新的 .conf 文件交付到该目录,并且每当安装、更新或删除交付此新 .conf 文件的软件包时,都将使用 refresh_fmri 执行器自动刷新 Apache 实例。刷新 Apache 实例会导致 Web 服务器重新生成其配置。
file etc/apache2/2.2/conf.d/custom.conf path=etc/apache2/2.2/conf.d/custom.conf \ owner=root group=bin mode=0644 refresh_fmri=svc:/network/http:apache22
有关如何使用 refresh_fmri 执行器的信息,请参见添加需要的任何侧面或执行器和第 7 章。
Oracle Solaris OS 中的另一个自组装示例是多个软件包将内容交付到 /etc/security/exec_attr.d/ 目录中。
在早期 Oracle Solaris 发行版中,某个 SMF 服务会将在 exec_attr.d 中交付的文件合并到一个数据库 /etc/security/exec_attr 中。在 Oracle Solaris 11 OS 中,libsecdb 直接读取 exec_attr.d 中的片段,无需通过单独的服务来执行此合并。
其他包含 /etc/security 中配置的片段的目录会以类似方式进行处理。