{"id":4019,"date":"2022-12-20T17:28:43","date_gmt":"2022-12-20T20:28:43","guid":{"rendered":"http:\/\/lode.uno\/linux-man\/index.php\/2022\/12\/20\/dnf-modularity-man7\/"},"modified":"2022-12-20T17:28:43","modified_gmt":"2022-12-20T20:28:43","slug":"dnf-modularity-man7","status":"publish","type":"post","link":"https:\/\/lode.uno\/linux-man\/2022\/12\/20\/dnf-modularity-man7\/","title":{"rendered":"DNF.MODULARITY (man7)"},"content":{"rendered":"<h1 align=\"center\">DNF.MODULARITY<\/h1>\n<p> <a href=\"#NAME\">NAME<\/a><br \/> <a href=\"#DEFINITIONS\">DEFINITIONS<\/a><br \/> <a href=\"#PACKAGE FILTERING\">PACKAGE FILTERING<\/a><br \/> <a href=\"#HOTFIX REPOSITORIES\">HOTFIX REPOSITORIES<\/a><br \/> <a href=\"#FAIL-SAFE MECHANISMS\">FAIL-SAFE MECHANISMS<\/a><br \/> <a href=\"#AUTHOR\">AUTHOR<\/a><br \/> <a href=\"#COPYRIGHT\">COPYRIGHT<\/a> <\/p>\n<hr>\n<h2>NAME <a name=\"NAME\"><\/a> <\/h2>\n<p style=\"margin-left:11%; margin-top: 1em\">dnf.modularity \u2212 Modularity in DNF<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">Modularity is new way of building, organizing and delivering packages. For more details see: <i>https:\/\/docs.pagure.org\/modularity\/<\/i><\/p>\n<h2>DEFINITIONS <a name=\"DEFINITIONS\"><\/a> <\/h2>\n<p style=\"margin-left:11%; margin-top: 1em\"><i><b>modulemd<\/b><\/i><\/p>\n<p style=\"margin-left:22%;\">Every repository can contain <b>modules<\/b> metadata with modulemd documents. These documents hold metadata about modules such as <b>Name<\/b>, <b>Stream<\/b> or list of packages.<\/p>\n<p style=\"margin-left:11%;\"><b>(non\u2212modular) package<\/b><\/p>\n<p style=\"margin-left:22%;\">Package that doesn&#8217;t belong to a module.<\/p>\n<p style=\"margin-left:11%;\"><b>modular package<\/b><\/p>\n<p style=\"margin-left:22%;\">Package that belongs to a module. It is listed in modulemd under the <b>artifacts<\/b> section. Modular packages can be also identified by having <b>%{modularitylabel}<\/b> RPM header set.<\/p>\n<p style=\"margin-left:11%;\"><b>(module) stream<\/b><\/p>\n<p style=\"margin-left:22%;\">Stream is a collection of packages, a virtual repository. It is identified with <b>Name<\/b> and <b>Stream<\/b> from modulemd separated with colon, for example &#8220;postgresql:9.6&#8221;.<\/p>\n<p style=\"margin-left:22%; margin-top: 1em\">Module streams can be <b>active<\/b> or <b>inactive<\/b>. <b>active<\/b> means the RPM packages from this stream are included in the set of available packages. Packages from <b>inactive<\/b> streams are filtered out. Streams are <b>active<\/b> either if marked as <b>default<\/b> or if they are explicitly <b>enabled<\/b> by a user action. Streams that satisfy dependencies of <b>default<\/b> or <b>enabled<\/b> streams are also considered <b>active<\/b>. Only one stream of a particular module can be <b>active<\/b> at a given point in time.<\/p>\n<h2>PACKAGE FILTERING <a name=\"PACKAGE FILTERING\"><\/a> <\/h2>\n<p style=\"margin-left:11%; margin-top: 1em\">Without modules, packages with the highest version are used by default.<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">Module streams can distribute packages with lower versions than available in the repositories available to the operating system. To make such packages available for installs and upgrades, the non\u2212modular packages are filtered out when their name or provide matches against a modular package name from any enabled, default, or dependent stream. Modular source packages will not cause non\u2212modular binary packages to be filtered out.<\/p>\n<h2>HOTFIX REPOSITORIES <a name=\"HOTFIX REPOSITORIES\"><\/a> <\/h2>\n<p style=\"margin-left:11%; margin-top: 1em\">In special cases, a user wants to cherry\u2212pick individual packages provided outside module streams and make them available on along with packages from the active streams. Under normal circumstances, such packages are filtered out. To make the system use packages from a repository regardless of their modularity, specify <b>module_hotfixes=true<\/b> in the .repo file. This protects the repository from package filtering.<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">Please note the hotfix packages do not override module packages, they only become part of available package set. It&#8217;s the package <b>Epoch<\/b>, <b>Version<\/b> and <b>Release<\/b> what determines if the package is the latest.<\/p>\n<h2>FAIL-SAFE MECHANISMS <a name=\"FAIL-SAFE MECHANISMS\"><\/a> <\/h2>\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Repositories with module metadata are unavailable<\/b> <br \/> When a repository with module metadata is unavailable, package filtering must keep working. Non\u2212modular RPMs must remain unavailable and must never get on the system.<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">This happens when:<\/p>\n<table width=\"100%\" border=\"0\" rules=\"none\" frame=\"void\" cellspacing=\"0\" cellpadding=\"0\">\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"2%\"><\/td>\n<td width=\"86%\">\n<p>user disables a repository via <b>\u2212\u2212disablerepo<\/b> or uses <b>\u2212\u2212repoid<\/b><\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"2%\"><\/td>\n<td width=\"86%\">\n<p>user removes a .repo file from disk<\/p>\n<\/td>\n<\/tr>\n<tr valign=\"top\" align=\"left\">\n<td width=\"11%\"><\/td>\n<td width=\"1%\">\n<p>\u2022<\/p>\n<\/td>\n<td width=\"2%\"><\/td>\n<td width=\"86%\">\n<p>repository is not available and has <b>skip_if_unavailable=true<\/b><\/p>\n<\/td>\n<\/tr>\n<\/table>\n<p style=\"margin-left:11%; margin-top: 1em\">DNF keeps copies of the latest modulemd for every active stream and uses them if there&#8217;s no modulemd available for the stream. This keeps package filtering working correctly.<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">The copies are made any time a transaction is resolved and started. That includes RPM transactions as well as any <b>dnf module <enable|disable|reset><\/b> operations.<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\">When the fail\u2212safe data is used, dnf show such modules as part of @modulefailsafe repository.<\/p>\n<p style=\"margin-left:11%; margin-top: 1em\"><b>Orphaned modular packages<\/b> <br \/> All packages that are built as a part of a module have <b>%{modularitylabel}<\/b> RPM header set. If such package becomes part of RPM transaction and cannot be associated with any available modulemd, DNF prevents from getting it on the system (package is available, but cannot be installed, upgraded, etc.)<\/p>\n<h2>AUTHOR <a name=\"AUTHOR\"><\/a> <\/h2>\n<p style=\"margin-left:11%; margin-top: 1em\">See AUTHORS in DNF source distribution.<\/p>\n<h2>COPYRIGHT <a name=\"COPYRIGHT\"><\/a> <\/h2>\n<p style=\"margin-left:11%; margin-top: 1em\">2012-2020, Red Hat, Licensed under GPLv2+<\/p>\n<hr>\n","protected":false},"excerpt":{"rendered":"<p>  dnf.modularity \u2212 Modularity in DNF Modularity is new way of building, organizing and delivering packages. For more details see: https:\/\/docs.pagure.org\/modularity\/ <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[971],"tags":[973,529,972],"class_list":["post-4019","post","type-post","status-publish","format-standard","hentry","category-7-miscelanea","tag-973","tag-dnf","tag-man7"],"gutentor_comment":0,"_links":{"self":[{"href":"https:\/\/lode.uno\/linux-man\/wp-json\/wp\/v2\/posts\/4019","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lode.uno\/linux-man\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lode.uno\/linux-man\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lode.uno\/linux-man\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lode.uno\/linux-man\/wp-json\/wp\/v2\/comments?post=4019"}],"version-history":[{"count":0,"href":"https:\/\/lode.uno\/linux-man\/wp-json\/wp\/v2\/posts\/4019\/revisions"}],"wp:attachment":[{"href":"https:\/\/lode.uno\/linux-man\/wp-json\/wp\/v2\/media?parent=4019"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lode.uno\/linux-man\/wp-json\/wp\/v2\/categories?post=4019"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lode.uno\/linux-man\/wp-json\/wp\/v2\/tags?post=4019"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}