跳过导航链接 | |
退出打印视图 | |
在 Oracle Solaris 11.1 中使用映像包管理系统打包和交付软件 Oracle Solaris 11.1 Information Library (简体中文) |
在调用 pkg 来修改计算机上安装的软件时,会执行以下步骤:
检查输入中的错误
确定系统结束状态
运行基本检查
运行解析器
优化解析器结果
评估操作
下载内容
执行操作
处理执行器
在全局区域中执行这些步骤时,pkg 还可以对系统上的任何非全局区域进行操作。例如,pkg 可以确保全局区域和非全局区域间的相关项是正确的,并且可以根据需要为非全局区域下载内容和执行操作。第 10 章详细讨论了区域。
将根据在命令行上提供的选项执行基本错误检查。
构造了对期望的系统结束状态的描述。对于更新映像中的所有软件包的情况,期望的结束状态可能为“当前已安装了所有软件包或其更新版本”之类的内容。对于删除软件包的情况,期望的结束状态可能为“除此软件包外,当前已安装了所有软件包”之类的内容。
IPS 尝试确定用户希望该结束状态是什么样的。在某些情况下,IPS 可能会确定一个不合用户期望的结束状态,尽管该结束状态确实与用户的要求相匹配。
在进行故障排除时,越具体越好。以下命令不够具体:
# pkg update
如果该命令失败,并显示了“该映像无更新可用”消息,则您可能希望尝试更具体的命令,如以下命令:
# pkg update "*@latest"
此命令更准确地定义了结束状态,并且可以生成更有指导性的错误消息。
检查期望的系统结束状态以确保解决方案可行。在此基本检查期间,pkg 检查是否存在所有相关项的一个可靠版本,且所需的软件包互不排斥。
如果存在明显错误,则 pkg 将输出相应的错误消息并退出。
pkg(5) 使用一个计算引擎根据映像中的约束和用于安装的任何新软件包引入的约束来确定可以安装、更新或删除的软件包,解析器构成了此计算引擎的核心。
此问题是布尔型可满足性问题的一个示例,可以通过 SAT 解析器解决。
针对所有软件包的各种可能选择均指定了布尔变量,并且在那些软件包、任何所需的软件包等之间的所有相关项均以合取范式强制转换为布尔表达式。
生成的表达式集将传递到 MiniSAT。如果 MiniSAT 找不出任何解决方案,则错误处理代码会尝试遍历已安装的软件包集和已尝试的操作,并输出每个可能的选择被排除的原因。
如果当前已安装的软件包集符合要求,而不是其他软件包集符合要求,则 pkg 会报告无需执行任何操作。
如前所述,错误消息生成和特征是通过 pkg 的输入确定的。在发出到 pkg 的命令中提供尽可能具体的信息可以生成最有用的错误消息。
如果 MiniSAT 找到了一个可能的解决方案,优化阶段将开始。
优化阶段很有必要,因为没有办法来描述某些解决方案比其他解决方案更适合 SAT 解析器。相反,一旦找到一个解决方案,IPS 将向问题添加约束来隔离不太合意的选择,并隔离当前解决方案。然后,IPS 重复调用 MiniSAT 并重复以上操作,直到无法确定更多的解决方案。将采用最后一个成功的解决方案作为最好的解决方案。
确定解决方案的难度和可能的解决方案的数目成比例。关于期望的结果的信息越具体,生成解决方案的速度越快。
找到最能满足所引起问题的软件包 FMRI 的集合后,评估阶段开始。
在评估阶段中,IPS 将比较系统上当前安装的软件包的结束状态,同时比较新旧软件包的软件包清单来确定三个列表:
要删除的操作。
要添加的操作。
要更新的操作。
然后,操作列表将通过以下方式进行更新:
对目录和链接操作进行引用计数,并执行中介链接处理。
对硬链接进行标记以便修复(如果其目标文件已更新)。如此操作是因为以对当前正在执行的进程安全的方式更新硬链接的目标会破坏硬链接。
正确处理可编辑文件在软件包间的移动以便不丢失任何用户编辑内容。
对操作列表进行排序,以便删除、添加和更新以正确的顺序发生。
反复核对所有当前已安装的软件包,以确保软件包没有冲突。示例冲突包括:将文件交付到相同位置的两个软件包、为同一目录提供了不同的目录属性的两个软件包。
如果存在冲突,则会报告冲突,且 pkg 退出并显示错误消息。
最后,对操作列表进行扫描以确定如果执行了该操作,是否有任何 SMF 服务需要重新启动;该更改是否可以应用于正在运行的系统;引导归档文件是否需要重新生成;是否存在所需的空间量。
如果 pkg 在未使用 -n 标志的情况下运行,则处理将前进到下载阶段。
对于需要内容的每个操作,IPS 通过散列下载任何必需的文件并将其高速缓存。如果要检索的内容量很大,则该步骤可能需要花费一些时间。
下载完成后,如果更改是要应用于实时系统(根目录为 / 的映像)的,且需要重新引导,则会克隆正在运行的系统,目标映像也将切换到克隆。
执行操作涉及在映像上实际执行特定于每个操作类型的安装或删除方法。
执行操作是从首先执行所有删除操作开始的。如果在要从系统中删除的目录中发现了任何意外内容,则会将该内容放置在 /var/pkg/lost+found 中。
然后,继续执行安装和更新操作。请注意,所有操作都是在所有软件包之间混合执行的。因此,单个软件包操作中的所有更改将一次性应用于系统,而不是逐个软件包进行应用。这允许软件包相互依赖,并安全地交换内容。有关文件更新方式的详细信息,请参见文件操作。
如果更改应用于实时系统,则此时会执行所有暂挂的执行器。这些执行器通常是 SMF 服务重新启动和刷新。一旦这些执行器启动,IPS 会立刻更新本地搜索索引。第 7 章中对执行器进行了详细论述。
如果必要,将更新引导归档文件。