summaryrefslogtreecommitdiff
path: root/eclass
diff options
context:
space:
mode:
authorAndrew Ammerlaan <andrewammerlaan@gentoo.org>2024-05-08 08:02:53 +0200
committerAndrew Ammerlaan <andrewammerlaan@gentoo.org>2024-05-17 14:06:42 +0200
commitf439b4ec05b1982f06f67fbf39a46ae0db187a76 (patch)
tree6781a62920d874d7a686865e7cb7383a007bf381 /eclass
parentmedia-sound/cmus: fixed order of variables (diff)
downloadgentoo-f439b4ec05b1982f06f67fbf39a46ae0db187a76.tar.gz
gentoo-f439b4ec05b1982f06f67fbf39a46ae0db187a76.tar.bz2
gentoo-f439b4ec05b1982f06f67fbf39a46ae0db187a76.zip
linux-mod-r1.eclass: add USE=initramfs
Adds a new variable that adds the "initramfs" flag when set. This new flag controls whether or not the modules that were built should be included in the initramfs. If the modules should be included, then we also rebuild the initramfs/uki in post_install using installkernel. Bug: https://bugs.gentoo.org/923025 Bug: https://bugs.gentoo.org/928271 Signed-off-by: Andrew Ammerlaan <andrewammerlaan@gentoo.org>
Diffstat (limited to 'eclass')
-rw-r--r--eclass/linux-mod-r1.eclass54
1 files changed, 54 insertions, 0 deletions
diff --git a/eclass/linux-mod-r1.eclass b/eclass/linux-mod-r1.eclass
index 4b267aae4db1..d9651f962604 100644
--- a/eclass/linux-mod-r1.eclass
+++ b/eclass/linux-mod-r1.eclass
@@ -131,6 +131,15 @@ IDEPEND="
sys-apps/kmod[tools]
"
+if [[ ${MODULES_INITRAMFS_IUSE} ]]; then
+ IUSE+=" ${MODULES_INITRAMFS_IUSE}"
+ IDEPEND+="
+ ${MODULES_INITRAMFS_IUSE#+}? (
+ sys-kernel/installkernel
+ )
+ "
+fi
+
if [[ -n ${MODULES_OPTIONAL_IUSE} ]]; then
: "${MODULES_OPTIONAL_IUSE#+}? ( | )"
RDEPEND=${_/|/${RDEPEND}} DEPEND=${_/|/${DEPEND}} \
@@ -179,6 +188,22 @@ fi
#
# May want to look at KERNEL_CHOST before considering this.
+# @ECLASS_VARIABLE: MODULES_INITRAMFS_IUSE
+# @DEFAULT_UNSET
+# @PRE_INHERIT
+# @DESCRIPTION:
+# If set, adds the specified USE flag. When this flag is enabled the
+# installed kernel modules are registered for inclusion in the dracut
+# initramfs. Additionally, if distribution kernels are used
+# (USE="dist-kernel") then these kernels are re-installed.
+#
+# The typical recommended value is "initramfs" or "+initramfs" (global
+# IUSE).
+#
+# If MODULES_INITRAMFS_IUSE is not set, or the specified flag is not
+# enabled, then the installed kernel modules are omitted from the
+# dracut initramfs.
+
# @ECLASS_VARIABLE: MODULES_SIGN_HASH
# @USER_VARIABLE
# @DEFAULT_UNSET
@@ -471,6 +496,19 @@ linux-mod-r1_pkg_postinst() {
dist-kernel_compressed_module_cleanup "${EROOT}/lib/modules/${KV_FULL}"
_modules_update_depmod
+ if [[ -z ${ROOT} && ${MODULES_INITRAMFS_IUSE} ]] &&
+ use dist-kernel && use ${MODULES_INITRAMFS_IUSE#+}
+ then
+ dist-kernel_reinstall_initramfs "${KV_DIR}" "${KV_FULL}"
+ fi
+
+ if has_version virtual/dist-kernel && ! use dist-kernel; then
+ ewarn "virtual/dist-kernel is installed, but USE=\"dist-kernel\""
+ ewarn "is not enabled for ${CATEGORY}/${PN}."
+ ewarn "It's recommended to globally enable the dist-kernel USE flag"
+ ewarn "to automatically trigger initramfs rebuilds on kernel updates"
+ fi
+
# post_process ensures modules were installed and that the eclass' USE
# are likely not no-ops (unfortunately postinst itself may be missed)
[[ -v _MODULES_GLOBAL[ran:post_process] ]] ||
@@ -550,6 +588,7 @@ modules_post_process() {
# which can lead to unnecessarily increased size or stale modules)
# _modules_process_depmod.d "${mods[@]#"${path}/"}"
+ _modules_process_dracut.conf.d "${mods[@]##*/}"
_modules_process_strip "${mods[@]}"
_modules_process_sign "${mods[@]}"
_modules_sanity_modversion "${mods[@]}" # after strip/sign in case broke it
@@ -904,6 +943,21 @@ _modules_process_depmod.d() {
)
}
+# @FUNCTION: _modules_process_dracut.conf.d
+# @USAGE: <module>...
+# @INTERNAL
+# @DESCRIPTION:
+# Create dracut.conf.d snippet defining if module should be included in the
+# initramfs.
+_modules_process_dracut.conf.d() {
+ (
+ insinto /usr/lib/dracut/dracut.conf.d
+ [[ ${MODULES_INITRAMFS_IUSE} ]] && use ${MODULES_INITRAMFS_IUSE#+} &&
+ : add || : omit
+ newins - 10-${PN}.conf <<<"${_}_drivers+=\" ${*%.ko} \""
+ )
+}
+
# @FUNCTION: _modules_process_sign
# @USAGE: <module>...
# @INTERNAL