我有一个没有(目前)支持合同的 Solaris 11.3 系统。因此,我使用位于http://pkg.oracle.com/solaris/release/的 IPS 存储库,我现在已在本地使用pkgrecv
.
我习惯于在大量软件包上pkg change-facet
更改为 false,这样我就可以将这些软件包更新到最新版本。version-lock
这工作正常。
“问题”是我的非全局区域没有继承这些更改的方面。因此,虽然在全局区域中我看到了更改的方面,并且可以升级受影响的包,但在我后来创建的任何非全局区域中都不是这样:它显示原始的、未更改的方面,并且无法升级受影响的包。
pkg(5)
表示对构面的更改由子映像继承,例如从全局区域继承的非全局区域。但这对我来说并没有发生。
最初我认为这是一个问题,但经过进一步思考,我意识到实际上我可能不希望全局中的方面更改总是继承到非全局中。不久之后,我发现我想用基础软件安装测试区,而不改变这些方面,这向我证明了这一点。
尽管如此,我仍然对表明它们确实继承的文档感到困惑,并且我相信理想情况下应该有一种方法来配置某些方面以进行继承。
因此,我的问题是:
- 有没有办法让某些方面继承到所有非全局对象中——也许是通过创建一个新的 IPS 映像?
- 为什么 IPS 文档表明 facets确实继承 - 它只谈论某些类型的 facets 吗?
这就是我正在做的全部:
我一直在调查 Oracle 提供的新 FOSS 软件包的使用情况。我一直在遵循此处的指南:如何访问选定的 FOSS 评估包以供 Oracle Solaris 11.3 使用。
本指南说明version-lock
在更新包之前必须将 facet 更改为 false,并且更新的 FOSS 包可以在版本号字符串匹配的版本号字符串中批量找到\*@\*-5.12.0.0.0.122
。该文档建议操纵 的输出pkg list
以创建pkg change-facet
命令来解锁所有版本。
我已经在我的全局区域中完成了这项工作,随后pkg update --accept
成功完成了大量升级包。
但是,如果我随后安装一个新的非全局区域,它将默认为这些包的基本版本。如果在我运行的那个全局区域中pkg facet
,我将看到该区域中的方面没有变化。例如,这里的区域显示 Bash 未更改的 version-lock=True:
root@goldenzone:~# pkg facet -a | grep version-lock.shell/bash
version-lock.shell/bash True system
而其全局显示正确的、新更改的 version-lock=False:
root@magrathea:/system/zones# pkg facet -a | grep version-lock.shell/bash
version-lock.shell/bash False local
解决方法:
根据我下面的评论,我现在通过使用自定义 auto_install 清单安装我的黄金区域来解决这个问题,其中包括<facet set="false">facet.version-lock.*</facet>
.
这可以正常工作(尽管以解锁所有版本锁为代价,而不仅仅是那些具有 FOSS 更新的版本锁),但如果有办法让方面在全局和非全局之间继承仍然会很好,因为文件似乎表明他们应该这样做。
提前致谢。
我是 Image Packaging System 的主要作者和设计者之一。
我想您的困惑是由于对文档所述内容的误解。特别要注意 pkg(5) 中的这句话是怎么说的:
注意它说可以,不是会。因此,文档描述了当切面被继承时会发生什么,但故意(我相信)没有说明它们何时被继承。也就是说,它告诉您如何确定它们是否被继承(通过在“pkg facet”的 SRC 列中查找“parent”),而不是在什么条件下它们将被继承:
https://docs.oracle.com/cd/E53394_01/html/E54739/glmke.html
现在对于缺少的部分 - 通常,继承的方面通常只适用于包中使用的 facet.version-lock.* 方面,因为一些相关的包对自己有父依赖项,如下所示:
父依赖项,如上所示,简单说明要在非全局区域中安装此包,必须首先在全局区域中以相同版本存在相同的包。这用于必须在全局和非全局区域之间同步的包。
简而言之,继承通常不适用于大多数方面。可以在此处找到确定哪些方面将被继承的逻辑:
https://github.com/oracle/solaris-ips/blob/master/src/modules/client/linkedimage/common.py#L3462
这是故意的,因为区域是一种容器技术,旨在允许管理员可以设置与全局区域不同的配置的隔离环境。
话虽如此,如果您想对全局区域和所有非全局区域应用 change-facet 操作,可以通过使用“-r”(递归)选项来更改-facet:
(参见 pkg(1),显然我不能发布超过两个链接。)
您甚至可以使用 -z 将其应用于特定区域。
哦,最后,您真的不想将所有版本锁的构面设置为 False。这不仅会使系统的更新速度非常慢,而且您会失去所有确保您实际使用经过测试的组件组合的安全措施。