public inbox for gentoo-dev@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-dev] [PATCH 1/4] dist-kernel-utils.eclass: pass on extra args to installkernel v56
@ 2025-03-03 17:41 Nowa Ammerlaan
  2025-03-03 17:41 ` [gentoo-dev] [PATCH 2/4] kernel-install.eclass: cleanup dead symlinks after removal Nowa Ammerlaan
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Nowa Ammerlaan @ 2025-03-03 17:41 UTC (permalink / raw
  To: gentoo-dev; +Cc: Nowa Ammerlaan

Installkernel v56 has gained the capability of parsing optional
arguments. Adjust the helper functions here so ebuilds can pass on
these extra arguments directly to installkernel.

Signed-off-by: Nowa Ammerlaan <nowa@gentoo.org>
---
 eclass/dist-kernel-utils.eclass | 72 +++++++++++++++++++++++----------
 1 file changed, 50 insertions(+), 22 deletions(-)

diff --git a/eclass/dist-kernel-utils.eclass b/eclass/dist-kernel-utils.eclass
index 3d7315e9e94e..49977c18795a 100644
--- a/eclass/dist-kernel-utils.eclass
+++ b/eclass/dist-kernel-utils.eclass
@@ -66,18 +66,37 @@ dist-kernel_get_image_path() {
 }
 
 # @FUNCTION: dist-kernel_install_kernel
-# @USAGE: <version> <image> <system.map>
+# @USAGE: [<version>] [<image>] [<system.map>] [<dir>] [<installkernel-args>...]
 # @DESCRIPTION:
-# Install kernel using installkernel tool.  <version> specifies
-# the kernel version, <image> full path to the image, <system.map>
-# full path to System.map.
+# Install kernel using installkernel. Takes the following arguments:
+#
+# <version> -- the target kernel version (default: ${KV_FULL})
+#
+# <image> -- the full path to the kernel image (default: the image
+# 	 	as reported by dist-kernel_get_image_path() in the ${KV_DIR})
+#
+# <system.map> -- the full path to the System.map
+# 		(default: ${KV_DIR}/System.map})
+#
+# <dir> -- the target directory to install to (default: ${EROOT}/boot)
+#
+# <installkernel-args> -- extra optional arguments for installkernel
+# 		see man kernel-install and man installkernel. Requires at
+# 		least version 56 of sys-kernel/installkernel.
 dist-kernel_install_kernel() {
 	debug-print-function ${FUNCNAME} "$@"
 
-	[[ ${#} -eq 3 ]] || die "${FUNCNAME}: invalid arguments"
-	local version=${1}
-	local image=${2}
-	local map=${3}
+	local version=${1:-${KV_FULL}}
+	local image=${2:-${KV_DIR}/$(dist-kernel_get_image_path)}
+	local map=${3:-${KV_DIR}/System.map}
+	local dir=${4:-${EROOT}/boot}
+
+	local installkernel_args=(
+		"${version}" "${image}" "${map}" "${dir}"
+	)
+	if has_version ">=sys-kernel/installkernel-56"; then
+		installkernel_args+=( "${@:5}" --verbose )
+	fi
 
 	local success=
 	# not an actual loop but allows error handling with 'break'
@@ -107,8 +126,7 @@ dist-kernel_install_kernel() {
 		ebegin "Installing the kernel via installkernel"
 		# note: .config is taken relatively to System.map;
 		# initrd relatively to bzImage
-		ARCH=$(tc-arch-kernel) installkernel "${version}" "${image}" "${map}" \
-			"${EROOT}/boot" || break
+		ARCH=$(tc-arch-kernel) installkernel "${installkernel_args[@]}" || break
 		eend ${?} || die -n "Installing the kernel failed"
 
 		success=1
@@ -129,39 +147,49 @@ dist-kernel_install_kernel() {
 		eerror "in the logs above and once you resolve the problems please"
 		eerror "run the equivalent of the following command to try again:"
 		eerror
-		eerror "    emerge --config ${kernel}"
+		if has --all "${installkernel_args[@]}"; then
+			eerror "    installkernel ${installkernel_args[*]}"
+		else
+			eerror "    emerge --config ${kernel}"
+		fi
 		die "Kernel install failed, please fix the problems and run emerge --config"
 	fi
 }
 
 # @FUNCTION: dist-kernel_reinstall_initramfs
-# @USAGE: <kv-dir> <kv-full>
+# @USAGE: [<kv-dir>] [<kv-full>] [<installkernel-args>...]
 # @DESCRIPTION:
 # Rebuild and install initramfs for the specified dist-kernel.
-# <kv-dir> is the kernel source directory (${KV_DIR} from linux-info),
-# while <kv-full> is the full kernel version (${KV_FULL}).
-# The function will determine whether <kernel-dir> is actually
-# a dist-kernel, and whether initramfs was used.
+# Takes the following arguments:
+#
+# <kv-dir> -- the full path to the target kernel (default: ${KV_DIR})
+#
+# <kv-full> -- the target kernel version (default: ${KV_FULL})
+#
+# <installkernel-args> -- extra optional arguments for installkernel
+# 		see man kernel-install and man installkernel. Requires at
+# 		least version 56 of sys-kernel/installkernel.
 #
 # This function is to be used in pkg_postinst() of ebuilds installing
-# kernel modules that are included in the initramfs.
+# kernel modules that are included in the initramfs. In order to
+# reinstall *all* distribution kernels currently installed on the
+# system add the --all argument (requires installkernel-56 or newer).
 dist-kernel_reinstall_initramfs() {
 	debug-print-function ${FUNCNAME} "$@"
 
-	[[ ${#} -eq 2 ]] || die "${FUNCNAME}: invalid arguments"
-	local kernel_dir=${1}
-	local ver=${2}
+	local kernel_dir=${1:-${KV_DIR}}
+	local ver=${2:-${KV_FULL}}
 
 	local image_path=${kernel_dir}/$(dist-kernel_get_image_path)
 	if [[ ! -f ${image_path} ]]; then
 		eerror "Kernel install missing, image not found:"
 		eerror "  ${image_path}"
-		eerror "Initramfs will not be updated.  Please reinstall your kernel."
+		eerror "Initramfs will not be updated.  Please reinstall kernel ${ver}."
 		return
 	fi
 
 	dist-kernel_install_kernel "${ver}" "${image_path}" \
-		"${kernel_dir}/System.map"
+		"${kernel_dir}/System.map" "${EROOT}/boot" "${@:3}"
 }
 
 # @FUNCTION: dist-kernel_PV_to_KV
-- 
2.48.1



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [gentoo-dev] [PATCH 2/4] kernel-install.eclass: cleanup dead symlinks after removal
  2025-03-03 17:41 [gentoo-dev] [PATCH 1/4] dist-kernel-utils.eclass: pass on extra args to installkernel v56 Nowa Ammerlaan
@ 2025-03-03 17:41 ` Nowa Ammerlaan
  2025-03-03 17:41 ` [gentoo-dev] [PATCH 3/4] sys-kernel/linux-firmware: use --all to reinstall dist-kernel initrd Nowa Ammerlaan
  2025-03-03 17:41 ` [gentoo-dev] [PATCH 4/4] sys-firmware/intel-microcode: " Nowa Ammerlaan
  2 siblings, 0 replies; 4+ messages in thread
From: Nowa Ammerlaan @ 2025-03-03 17:41 UTC (permalink / raw
  To: gentoo-dev; +Cc: Nowa Ammerlaan

Since we remove /usr/src/linux-KV_FULL but by design keep the
/lib/modules/KV_FULL, we end up with some dead symlinks after
depcleaning a dist-kernel. This has the unfortunate side effect of
tricking systemd's kernel-install into thinking that a kernel image
for this kernel still exists. Which leads to some ugliness further
down the line. We can easily resolve the problem by cleaning up these
dead symlinks.

Signed-off-by: Nowa Ammerlaan <nowa@gentoo.org>
---
 eclass/kernel-install.eclass | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/eclass/kernel-install.eclass b/eclass/kernel-install.eclass
index cf34007844a8..67143278f368 100644
--- a/eclass/kernel-install.eclass
+++ b/eclass/kernel-install.eclass
@@ -808,6 +808,9 @@ kernel-install_pkg_postrm() {
 			find "${kernel_dir}" -depth -type d -empty -delete
 		eend ${?}
 	fi
+
+	# Clean up dead symlinks
+	find -L "${EROOT}/lib/modules/${KV_FULL}" -type l -delete
 }
 
 # @FUNCTION: kernel-install_pkg_config
-- 
2.48.1



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [gentoo-dev] [PATCH 3/4] sys-kernel/linux-firmware: use --all to reinstall dist-kernel initrd
  2025-03-03 17:41 [gentoo-dev] [PATCH 1/4] dist-kernel-utils.eclass: pass on extra args to installkernel v56 Nowa Ammerlaan
  2025-03-03 17:41 ` [gentoo-dev] [PATCH 2/4] kernel-install.eclass: cleanup dead symlinks after removal Nowa Ammerlaan
@ 2025-03-03 17:41 ` Nowa Ammerlaan
  2025-03-03 17:41 ` [gentoo-dev] [PATCH 4/4] sys-firmware/intel-microcode: " Nowa Ammerlaan
  2 siblings, 0 replies; 4+ messages in thread
From: Nowa Ammerlaan @ 2025-03-03 17:41 UTC (permalink / raw
  To: gentoo-dev; +Cc: Nowa Ammerlaan

Signed-off-by: Nowa Ammerlaan <nowa@gentoo.org>
---
 sys-kernel/linux-firmware/linux-firmware-20241210-r1.ebuild | 2 +-
 sys-kernel/linux-firmware/linux-firmware-20250109-r1.ebuild | 2 +-
 sys-kernel/linux-firmware/linux-firmware-20250211.ebuild    | 2 +-
 sys-kernel/linux-firmware/linux-firmware-99999999.ebuild    | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/sys-kernel/linux-firmware/linux-firmware-20241210-r1.ebuild b/sys-kernel/linux-firmware/linux-firmware-20241210-r1.ebuild
index ec4a3c1f8df9..ef45dde25fce 100644
--- a/sys-kernel/linux-firmware/linux-firmware-20241210-r1.ebuild
+++ b/sys-kernel/linux-firmware/linux-firmware-20241210-r1.ebuild
@@ -387,7 +387,7 @@ pkg_postinst() {
 
 	if use initramfs; then
 		if use dist-kernel; then
-			dist-kernel_reinstall_initramfs "${KV_DIR}" "${KV_FULL}"
+			dist-kernel_reinstall_initramfs "${KV_DIR}" "${KV_FULL}" --all
 		else
 			# Don't forget to umount /boot if it was previously mounted by us.
 			mount-boot_pkg_postinst
diff --git a/sys-kernel/linux-firmware/linux-firmware-20250109-r1.ebuild b/sys-kernel/linux-firmware/linux-firmware-20250109-r1.ebuild
index e3634c283c9f..70fe12ed9f56 100644
--- a/sys-kernel/linux-firmware/linux-firmware-20250109-r1.ebuild
+++ b/sys-kernel/linux-firmware/linux-firmware-20250109-r1.ebuild
@@ -387,7 +387,7 @@ pkg_postinst() {
 
 	if use initramfs; then
 		if use dist-kernel; then
-			dist-kernel_reinstall_initramfs "${KV_DIR}" "${KV_FULL}"
+			dist-kernel_reinstall_initramfs "${KV_DIR}" "${KV_FULL}" --all
 		else
 			# Don't forget to umount /boot if it was previously mounted by us.
 			mount-boot_pkg_postinst
diff --git a/sys-kernel/linux-firmware/linux-firmware-20250211.ebuild b/sys-kernel/linux-firmware/linux-firmware-20250211.ebuild
index a7ce2722ff9f..3dcfee47af39 100644
--- a/sys-kernel/linux-firmware/linux-firmware-20250211.ebuild
+++ b/sys-kernel/linux-firmware/linux-firmware-20250211.ebuild
@@ -383,7 +383,7 @@ pkg_postinst() {
 
 	if use initramfs; then
 		if use dist-kernel; then
-			dist-kernel_reinstall_initramfs "${KV_DIR}" "${KV_FULL}"
+			dist-kernel_reinstall_initramfs "${KV_DIR}" "${KV_FULL}" --all
 		else
 			# Don't forget to umount /boot if it was previously mounted by us.
 			mount-boot_pkg_postinst
diff --git a/sys-kernel/linux-firmware/linux-firmware-99999999.ebuild b/sys-kernel/linux-firmware/linux-firmware-99999999.ebuild
index 8627d8cf57ca..3e61140e49ec 100644
--- a/sys-kernel/linux-firmware/linux-firmware-99999999.ebuild
+++ b/sys-kernel/linux-firmware/linux-firmware-99999999.ebuild
@@ -377,7 +377,7 @@ pkg_postinst() {
 
 	if use initramfs; then
 		if use dist-kernel; then
-			dist-kernel_reinstall_initramfs "${KV_DIR}" "${KV_FULL}"
+			dist-kernel_reinstall_initramfs "${KV_DIR}" "${KV_FULL}" --all
 		else
 			# Don't forget to umount /boot if it was previously mounted by us.
 			mount-boot_pkg_postinst
-- 
2.48.1



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [gentoo-dev] [PATCH 4/4] sys-firmware/intel-microcode: use --all to reinstall dist-kernel initrd
  2025-03-03 17:41 [gentoo-dev] [PATCH 1/4] dist-kernel-utils.eclass: pass on extra args to installkernel v56 Nowa Ammerlaan
  2025-03-03 17:41 ` [gentoo-dev] [PATCH 2/4] kernel-install.eclass: cleanup dead symlinks after removal Nowa Ammerlaan
  2025-03-03 17:41 ` [gentoo-dev] [PATCH 3/4] sys-kernel/linux-firmware: use --all to reinstall dist-kernel initrd Nowa Ammerlaan
@ 2025-03-03 17:41 ` Nowa Ammerlaan
  2 siblings, 0 replies; 4+ messages in thread
From: Nowa Ammerlaan @ 2025-03-03 17:41 UTC (permalink / raw
  To: gentoo-dev; +Cc: Nowa Ammerlaan

Signed-off-by: Nowa Ammerlaan <nowa@gentoo.org>
---
 .../intel-microcode/intel-microcode-20240910_p20240915.ebuild   | 2 +-
 .../intel-microcode/intel-microcode-20241112_p20241103.ebuild   | 2 +-
 .../intel-microcode/intel-microcode-20250211_p20250211.ebuild   | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/sys-firmware/intel-microcode/intel-microcode-20240910_p20240915.ebuild b/sys-firmware/intel-microcode/intel-microcode-20240910_p20240915.ebuild
index b2000fab7d45..f99a41e15b4e 100644
--- a/sys-firmware/intel-microcode/intel-microcode-20240910_p20240915.ebuild
+++ b/sys-firmware/intel-microcode/intel-microcode-20240910_p20240915.ebuild
@@ -311,7 +311,7 @@ pkg_postrm() {
 pkg_postinst() {
 	if use initramfs; then
 		if use dist-kernel; then
-			dist-kernel_reinstall_initramfs "${KV_DIR}" "${KV_FULL}"
+			dist-kernel_reinstall_initramfs "${KV_DIR}" "${KV_FULL}" --all
 		else
 			# Don't forget to umount /boot if it was previously mounted by us.
 			mount-boot_pkg_postinst
diff --git a/sys-firmware/intel-microcode/intel-microcode-20241112_p20241103.ebuild b/sys-firmware/intel-microcode/intel-microcode-20241112_p20241103.ebuild
index b2000fab7d45..f99a41e15b4e 100644
--- a/sys-firmware/intel-microcode/intel-microcode-20241112_p20241103.ebuild
+++ b/sys-firmware/intel-microcode/intel-microcode-20241112_p20241103.ebuild
@@ -311,7 +311,7 @@ pkg_postrm() {
 pkg_postinst() {
 	if use initramfs; then
 		if use dist-kernel; then
-			dist-kernel_reinstall_initramfs "${KV_DIR}" "${KV_FULL}"
+			dist-kernel_reinstall_initramfs "${KV_DIR}" "${KV_FULL}" --all
 		else
 			# Don't forget to umount /boot if it was previously mounted by us.
 			mount-boot_pkg_postinst
diff --git a/sys-firmware/intel-microcode/intel-microcode-20250211_p20250211.ebuild b/sys-firmware/intel-microcode/intel-microcode-20250211_p20250211.ebuild
index b2000fab7d45..f99a41e15b4e 100644
--- a/sys-firmware/intel-microcode/intel-microcode-20250211_p20250211.ebuild
+++ b/sys-firmware/intel-microcode/intel-microcode-20250211_p20250211.ebuild
@@ -311,7 +311,7 @@ pkg_postrm() {
 pkg_postinst() {
 	if use initramfs; then
 		if use dist-kernel; then
-			dist-kernel_reinstall_initramfs "${KV_DIR}" "${KV_FULL}"
+			dist-kernel_reinstall_initramfs "${KV_DIR}" "${KV_FULL}" --all
 		else
 			# Don't forget to umount /boot if it was previously mounted by us.
 			mount-boot_pkg_postinst
-- 
2.48.1



^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2025-03-03 17:45 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-03 17:41 [gentoo-dev] [PATCH 1/4] dist-kernel-utils.eclass: pass on extra args to installkernel v56 Nowa Ammerlaan
2025-03-03 17:41 ` [gentoo-dev] [PATCH 2/4] kernel-install.eclass: cleanup dead symlinks after removal Nowa Ammerlaan
2025-03-03 17:41 ` [gentoo-dev] [PATCH 3/4] sys-kernel/linux-firmware: use --all to reinstall dist-kernel initrd Nowa Ammerlaan
2025-03-03 17:41 ` [gentoo-dev] [PATCH 4/4] sys-firmware/intel-microcode: " Nowa Ammerlaan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox