summaryrefslogtreecommitdiff
path: root/eclass
diff options
context:
space:
mode:
Diffstat (limited to 'eclass')
-rw-r--r--eclass/Manifest.gzbin40192 -> 40188 bytes
-rw-r--r--eclass/dist-kernel-utils.eclass72
-rw-r--r--eclass/kernel-install.eclass3
3 files changed, 53 insertions, 22 deletions
diff --git a/eclass/Manifest.gz b/eclass/Manifest.gz
index 05e9873b3af7..3a4ab5394327 100644
--- a/eclass/Manifest.gz
+++ b/eclass/Manifest.gz
Binary files differ
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
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