我有一个没有(目前)支持合同的Solaris 11.3系统。 因此,我使用http://pkg.oracle.com/solaris/release/上的IPS存储库,我现在使用pkgrecv在本地镜像。
我正在使用pkg change-facet在大量的软件包上将version-lock更改为false,以便我可以将这些软件包更新为最新版本。 这工作正常。
“问题”是这些改变的方面没有被我的非全局区域inheritance。 因此,在全局区域中,我可以看到已更改的方面,并且可以升级受影响的软件包,但在以后创build的任何非全局区域中都不是这样:它显示原始的,不变的方面,并且无法升级受影响的软件包。
pkg(5)指示对facet的更改由子图像inheritance,例如从全局区域inheritance的非全局区域。 但是这不是为我发生的。
起初,我认为这是一个问题,但经过进一步的思考,我已经意识到,事实上,我可能不希望在全局方面的变化总是inheritance到非全局variables。 不久之后,我发现我想用基础软件安装testing区,而不改变这些方面。
尽pipe如此,我还是被文档指出他们inheritance了,我相信理想情况下,应该有一种方法来configuration某些方面inheritance。
所以我的问题是:
这就是我正在做的事情:
我一直在研究使用Oracle提供的新的FOSS软件包。 我一直在这里遵循指南: 如何访问Oracle Solaris 11.3选定的FOSS评估软件包 。
本指南解释说,必须在更新包之前将方面version-lock更改为false,并且可以在版本库中批量查找已更新的FOSS包,版本号string匹配\*@\*-5.12.0.0.0.122 。 文档build议操纵pkg list的输出以创buildpkg change-facet命令来解锁所有版本。
我已经在我的全局区域中完成了这个工作,随后执行pkg update --accept成功导致大量升级的软件包。
但是,如果我然后安装一个新的非全局区域,它将默认为这些包的基本版本。 如果在该全局区域中运行pkg facet ,我将会看到区域中的方面不变。 例如,在这里一个区域显示不变的版本 – locking为真的Bash:
root@goldenzone:~# pkg facet -a | grep version-lock.shell/bash version-lock.shell/bash True system
而它的全局显示正确的,新改变的版本锁=假:
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> 。
这工作正常(尽pipe解锁所有版本的锁,而不是只有那些有FOSS更新),但它仍然是很好的知道是否有办法让全局和非全局之间inheritance面,作为文件似乎表明他们应该。
提前致谢。
我是图像包装系统的主要作者和devise者之一。
我想你的困惑是由于误解了文档所说的。 尤其要特别注意pkg(5)这句话是什么意思:
…非全局区域可以inheritance全局区域的一个方面。 inheritance面将在之前进行评估,并优先于本地设置的面。
注意它说可以 ,不会。 所以文档描述了当facet被inheritance时会发生什么,但是故意(我相信)并没有说明它们何时被inheritance。 也就是说,它告诉你如何确定它们是否被inheritance(通过在“pkg facet”的SRC列中查找“parent”),而不是在哪些条件下它们将被inheritance:
https://docs.oracle.com/cd/E53394_01/html/E54739/glmke.html
现在对于缺less的部分 – 通常,inheritance的方面通常仅适用于包中使用的facet.version-lock。*方面,因为一些相关的包对它们本身具有父类依赖关系,如下所示:
取决于type = parent fmri = feature / package / dependency / self
如上所述,父依赖性只是声明要在非全局区域中安装此程序包,同一个程序包必须首先在全局区域中以相同版本存在。 这用于必须在全局和非全局区域之间同步的软件包。
总之,inheritance通常不适用于大多数方面。 确定哪些方面将被inheritance的逻辑可以在这里find:
https://github.com/oracle/solaris-ips/blob/master/src/modules/client/linkedimage/common.py#L3462
这是故意的,因为区域是一种容器技术,旨在允许pipe理员可以设置与全局区域不同的configuration的孤立环境。
现在说,如果你想对全局区域和所有非全局区域应用change-facet操作,你可以通过使用'-r'(recursion)选项来实现change-facet:
pkg change-facet -r …
(见pkg(1),显然我不能发布两个以上的链接。)
您甚至可以使用-z将其应用于特定区域。
哦,最后,你真的不想为所有的版本锁设置方面为False。 这不仅会使系统更新速度慢得令人难以置信,而且会使所有安全设备失去作用,确保您实际上使用了经过testing的组件组合。