原文:
https://dnf.readthedocs.io/en/latest/modularity.html
模块化是构建,组织和交付软件包的新方法。有关更多详细信息,请参见:https://docs.pagure.org/modularity/
modulemd
每个存储库都可以包含modules带有modulemd文档的元数据。这些文件存储元数据有关的模块,例如Name,Stream或者包的列表。
(非模块化)封装
不属于模块的软件包。
模块化包装
属于模块的软件包。它在该artifacts部分下的modulemd中列出。还可以通过设置%{modularitylabel}RPM标头来标识模块化软件包。
(模块)流
流是软件包(虚拟存储库)的集合。它是确定与 Name和Stream从modulemd用冒号分开,例如,“的PostgreSQL:9.6”。
模块流可以是active或inactive。active表示该流中的RPM软件包包含在可用软件包的集合中。来自inactive流的包被过滤掉。流是 active标记为default还是enabled由用户操作显式 标识。还考虑满足default或的依赖关系的 enabled流active。active在给定的时间点只能有一个特定模块的流。
如果没有模块,则默认使用版本最高的软件包。
模块流可以分发版本低于操作系统可用存储库中可用版本的软件包。为了使此类软件包可用于安装和升级,当非模块化软件包的名称与任何现有流中的模块化软件包匹配时,这些非模块化软件包将被滤除。
在特殊情况下,用户希望挑选模块流外部提供的各个软件包,并使其与活动流中的软件包一起使用。通常情况下,此类软件包会被过滤掉。要使系统使用存储库中的程序包而不考虑其模块性,请module_hotfixes=true在.repo文件中指定。这样可以保护存储库免受程序包过滤。
请注意,此修补程序包不会覆盖模块程序包,它们仅成为可用程序包集的一部分。它的包装Epoch,Version和Release 什么决定,如果包是最新的。
带有模块元数据的存储库不可用
当带有模块元数据的存储库不可用时,程序包筛选必须继续工作。非模块化RPM必须保持不可用,并且永远不能进入系统。
在以下情况下会发生这种情况:
用户通过--disablerepo或使用禁用存储库--repoid
用户从磁盘上删除一个.repo文件
存储库不可用,并且具有 skip_if_unavailable=true
DNF会为每个活动流保留最新modulemd的副本,如果没有可用于该流的modulemd,则使用它们。这样可以使包过滤正常工作。
在解决并开始交易时就可以制作副本。这包括RPM事务以及任何操作。dnf module <enable|disable|reset>
使用故障安全数据时,dnf将此类模块显示为@modulefailsafe存储库的一部分。
孤立的模块化软件包
所有作为模块一部分构建的软件包都具有%{modularitylabel}RPM标头集。如果此类软件包成为RPM事务的一部分,并且无法与任何可用的模块md关联,则DNF会阻止将其获取到系统中(该软件包可用,但无法安装,升级等)。