mirror of
https://github.com/flatcar/scripts.git
synced 2025-08-12 15:36:58 +02:00
eclass/linux-mod-r1: Sync with Gentoo
It's from Gentoo commit 594a6613a4693a590ba8473a99ce1fd6c4d506d2.
This commit is contained in:
parent
24050766f5
commit
ee6d536a28
@ -1,4 +1,4 @@
|
|||||||
# Copyright 2023 Gentoo Authors
|
# Copyright 2023-2024 Gentoo Authors
|
||||||
# Distributed under the terms of the GNU General Public License v2
|
# Distributed under the terms of the GNU General Public License v2
|
||||||
|
|
||||||
# @ECLASS: linux-mod-r1.eclass
|
# @ECLASS: linux-mod-r1.eclass
|
||||||
@ -109,9 +109,9 @@ esac
|
|||||||
if [[ ! ${_LINUX_MOD_R1_ECLASS} ]]; then
|
if [[ ! ${_LINUX_MOD_R1_ECLASS} ]]; then
|
||||||
_LINUX_MOD_R1_ECLASS=1
|
_LINUX_MOD_R1_ECLASS=1
|
||||||
|
|
||||||
inherit edo linux-info multiprocessing toolchain-funcs
|
inherit dist-kernel-utils edo linux-info multiprocessing toolchain-funcs
|
||||||
|
|
||||||
IUSE="dist-kernel modules-sign +strip ${MODULES_OPTIONAL_IUSE}"
|
IUSE="dist-kernel modules-compress modules-sign +strip ${MODULES_OPTIONAL_IUSE}"
|
||||||
|
|
||||||
RDEPEND="
|
RDEPEND="
|
||||||
sys-apps/kmod[tools]
|
sys-apps/kmod[tools]
|
||||||
@ -131,6 +131,16 @@ IDEPEND="
|
|||||||
sys-apps/kmod[tools]
|
sys-apps/kmod[tools]
|
||||||
"
|
"
|
||||||
|
|
||||||
|
if [[ ${MODULES_INITRAMFS_IUSE} ]]; then
|
||||||
|
inherit mount-boot-utils
|
||||||
|
IUSE+=" ${MODULES_INITRAMFS_IUSE}"
|
||||||
|
IDEPEND+="
|
||||||
|
${MODULES_INITRAMFS_IUSE#+}? (
|
||||||
|
sys-kernel/installkernel
|
||||||
|
)
|
||||||
|
"
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ -n ${MODULES_OPTIONAL_IUSE} ]]; then
|
if [[ -n ${MODULES_OPTIONAL_IUSE} ]]; then
|
||||||
: "${MODULES_OPTIONAL_IUSE#+}? ( | )"
|
: "${MODULES_OPTIONAL_IUSE#+}? ( | )"
|
||||||
RDEPEND=${_/|/${RDEPEND}} DEPEND=${_/|/${DEPEND}} \
|
RDEPEND=${_/|/${RDEPEND}} DEPEND=${_/|/${DEPEND}} \
|
||||||
@ -179,6 +189,22 @@ fi
|
|||||||
#
|
#
|
||||||
# May want to look at KERNEL_CHOST before considering this.
|
# 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
|
# @ECLASS_VARIABLE: MODULES_SIGN_HASH
|
||||||
# @USER_VARIABLE
|
# @USER_VARIABLE
|
||||||
# @DEFAULT_UNSET
|
# @DEFAULT_UNSET
|
||||||
@ -303,9 +329,19 @@ fi
|
|||||||
# 3. perform various sanity checks to fail early on issues
|
# 3. perform various sanity checks to fail early on issues
|
||||||
linux-mod-r1_pkg_setup() {
|
linux-mod-r1_pkg_setup() {
|
||||||
debug-print-function ${FUNCNAME[0]} "${@}"
|
debug-print-function ${FUNCNAME[0]} "${@}"
|
||||||
[[ ${MERGE_TYPE} != binary ]] || return 0
|
|
||||||
_MODULES_GLOBAL[ran:pkg_setup]=1
|
_MODULES_GLOBAL[ran:pkg_setup]=1
|
||||||
_modules_check_function ${#} 0 0 || return 0
|
_modules_check_function ${#} 0 0 || return 0
|
||||||
|
|
||||||
|
if [[ -z ${ROOT} && ${MODULES_INITRAMFS_IUSE} ]] &&
|
||||||
|
use dist-kernel && use ${MODULES_INITRAMFS_IUSE#+}
|
||||||
|
then
|
||||||
|
# Check, but don't die because we can fix the problem and then
|
||||||
|
# emerge --config ... to re-run installation.
|
||||||
|
nonfatal mount-boot_check_status
|
||||||
|
fi
|
||||||
|
|
||||||
|
[[ ${MERGE_TYPE} != binary ]] || return 0
|
||||||
|
|
||||||
_modules_check_migration
|
_modules_check_migration
|
||||||
|
|
||||||
_modules_prepare_kernel
|
_modules_prepare_kernel
|
||||||
@ -468,8 +504,22 @@ linux-mod-r1_pkg_postinst() {
|
|||||||
debug-print-function ${FUNCNAME[0]} "${@}"
|
debug-print-function ${FUNCNAME[0]} "${@}"
|
||||||
_modules_check_function ${#} 0 0 || return 0
|
_modules_check_function ${#} 0 0 || return 0
|
||||||
|
|
||||||
|
dist-kernel_compressed_module_cleanup "${EROOT}/lib/modules/${KV_FULL}"
|
||||||
_modules_update_depmod
|
_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
|
# post_process ensures modules were installed and that the eclass' USE
|
||||||
# are likely not no-ops (unfortunately postinst itself may be missed)
|
# are likely not no-ops (unfortunately postinst itself may be missed)
|
||||||
[[ -v _MODULES_GLOBAL[ran:post_process] ]] ||
|
[[ -v _MODULES_GLOBAL[ran:post_process] ]] ||
|
||||||
@ -544,11 +594,13 @@ modules_post_process() {
|
|||||||
(( ${#mods[@]} )) ||
|
(( ${#mods[@]} )) ||
|
||||||
die "${FUNCNAME[0]} was called with no installed modules under ${path}"
|
die "${FUNCNAME[0]} was called with no installed modules under ${path}"
|
||||||
|
|
||||||
# TODO?: find way for sane use with dracut (its 90kernel-modules-extra
|
# TODO?: look into re-introducing after verifying it works as expected,
|
||||||
# parses depmod.d files directly and assumes should include its modules
|
# formerly omitted because dracut's 90kernel-modules-extra parses depmod.d
|
||||||
# which can lead to unnecessarily increased size or stale modules)
|
# files directly and assumes should include its modules but we now create
|
||||||
# _modules_process_depmod.d "${mods[@]#"${path}/"}"
|
# dracut omit files that *hopefully* prevent this
|
||||||
|
# _modules_process_depmod.d "${mods[@]##*/}"
|
||||||
|
|
||||||
|
_modules_process_dracut.conf.d "${mods[@]##*/}"
|
||||||
_modules_process_strip "${mods[@]}"
|
_modules_process_strip "${mods[@]}"
|
||||||
_modules_process_sign "${mods[@]}"
|
_modules_process_sign "${mods[@]}"
|
||||||
_modules_sanity_modversion "${mods[@]}" # after strip/sign in case broke it
|
_modules_sanity_modversion "${mods[@]}" # after strip/sign in case broke it
|
||||||
@ -621,6 +673,11 @@ _modules_check_migration() {
|
|||||||
# Handles linux-info bits to provide usable sources, KV_ variables,
|
# Handles linux-info bits to provide usable sources, KV_ variables,
|
||||||
# and CONFIG_CHECK use.
|
# and CONFIG_CHECK use.
|
||||||
_modules_prepare_kernel() {
|
_modules_prepare_kernel() {
|
||||||
|
# The modules we build are specific to each kernel version, we don't
|
||||||
|
# want to reset the environment to use the user selected kernel version.
|
||||||
|
# Bug 931213, 926063
|
||||||
|
SKIP_KERNEL_BINPKG_ENV_RESET=1
|
||||||
|
|
||||||
get_version
|
get_version
|
||||||
|
|
||||||
# linux-info allows skipping checks if SKIP_KERNEL_CHECK is set and
|
# linux-info allows skipping checks if SKIP_KERNEL_CHECK is set and
|
||||||
@ -793,7 +850,7 @@ _modules_prepare_toolchain() {
|
|||||||
# can work but raises concerns about breaking packages that may use these
|
# can work but raises concerns about breaking packages that may use these
|
||||||
if linux_chkconfig_present LTO_CLANG_THIN && tc-ld-is-lld; then
|
if linux_chkconfig_present LTO_CLANG_THIN && tc-ld-is-lld; then
|
||||||
KERNEL_LD=${T}/linux-mod-r1_ld.lld
|
KERNEL_LD=${T}/linux-mod-r1_ld.lld
|
||||||
printf '#!/usr/bin/env sh\nexec %s "${@}" --thinlto-cache-dir=\n' \
|
printf '#!/usr/bin/env sh\nexec %q "${@}" --thinlto-cache-dir=\n' \
|
||||||
"${LD}" > "${KERNEL_LD}" || die
|
"${LD}" > "${KERNEL_LD}" || die
|
||||||
chmod +x -- "${KERNEL_LD}" || die
|
chmod +x -- "${KERNEL_LD}" || die
|
||||||
fi
|
fi
|
||||||
@ -835,9 +892,18 @@ _modules_prepare_toolchain() {
|
|||||||
# If enabled in the kernel configuration, this compresses the given
|
# If enabled in the kernel configuration, this compresses the given
|
||||||
# modules using the same format.
|
# modules using the same format.
|
||||||
_modules_process_compress() {
|
_modules_process_compress() {
|
||||||
|
use modules-compress || return 0
|
||||||
|
|
||||||
local -a compress
|
local -a compress
|
||||||
if linux_chkconfig_present MODULE_COMPRESS_XZ; then
|
if linux_chkconfig_present MODULE_COMPRESS_XZ; then
|
||||||
compress=(xz -qT"$(makeopts_jobs)" --memlimit-compress=50%)
|
compress=(
|
||||||
|
xz -q
|
||||||
|
--memlimit-compress=50%
|
||||||
|
--threads="$(makeopts_jobs)"
|
||||||
|
# match options from kernel's Makefile.modinst (bug #920837)
|
||||||
|
--check=crc32
|
||||||
|
--lzma2=dict=1MiB
|
||||||
|
)
|
||||||
elif linux_chkconfig_present MODULE_COMPRESS_GZIP; then
|
elif linux_chkconfig_present MODULE_COMPRESS_GZIP; then
|
||||||
if type -P pigz &>/dev/null; then
|
if type -P pigz &>/dev/null; then
|
||||||
compress=(pigz -p"$(makeopts_jobs)")
|
compress=(pigz -p"$(makeopts_jobs)")
|
||||||
@ -846,13 +912,13 @@ _modules_process_compress() {
|
|||||||
fi
|
fi
|
||||||
elif linux_chkconfig_present MODULE_COMPRESS_ZSTD; then
|
elif linux_chkconfig_present MODULE_COMPRESS_ZSTD; then
|
||||||
compress=(zstd -qT"$(makeopts_jobs)" --rm)
|
compress=(zstd -qT"$(makeopts_jobs)" --rm)
|
||||||
|
else
|
||||||
|
die "USE=modules-compress enabled but no MODULE_COMPRESS* configured"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -v compress ]]; then
|
# could fail, assumes have commands that were needed for the kernel
|
||||||
# could fail, assumes have commands that were needed for the kernel
|
einfo "Compressing modules (matching the kernel configuration) ..."
|
||||||
einfo "Compressing modules (matching the kernel configuration) ..."
|
edob "${compress[@]}" -- "${@}"
|
||||||
edob "${compress[@]}" -- "${@}"
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# @FUNCTION: _modules_process_depmod.d
|
# @FUNCTION: _modules_process_depmod.d
|
||||||
@ -876,6 +942,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
|
# @FUNCTION: _modules_process_sign
|
||||||
# @USAGE: <module>...
|
# @USAGE: <module>...
|
||||||
# @INTERNAL
|
# @INTERNAL
|
||||||
@ -1056,7 +1137,10 @@ _modules_sanity_kernelbuilt() {
|
|||||||
# @DESCRIPTION:
|
# @DESCRIPTION:
|
||||||
# Prints a warning if the kernel version is greater than to
|
# Prints a warning if the kernel version is greater than to
|
||||||
# MODULES_KERNEL_MAX (while only considering same amount of version
|
# MODULES_KERNEL_MAX (while only considering same amount of version
|
||||||
# components), or aborts if it is less than MODULES_KERNEL_MIN
|
# components), or aborts if it is less than MODULES_KERNEL_MIN.
|
||||||
|
#
|
||||||
|
# With USE=dist-kernel, also warn if virtual/dist-kernel is of a
|
||||||
|
# different version than the one being built against.
|
||||||
_modules_sanity_kernelversion() {
|
_modules_sanity_kernelversion() {
|
||||||
local kv=${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}
|
local kv=${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}
|
||||||
|
|
||||||
@ -1106,6 +1190,24 @@ _modules_sanity_kernelversion() {
|
|||||||
ewarn
|
ewarn
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if use dist-kernel &&
|
||||||
|
! has_version "~virtual/dist-kernel-${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"
|
||||||
|
then
|
||||||
|
ewarn
|
||||||
|
ewarn "The kernel modules in ${CATEGORY}/${PN} are being built for"
|
||||||
|
ewarn "kernel version ${KV_FULL}. But this does not match the"
|
||||||
|
ewarn "installed version of virtual/dist-kernel."
|
||||||
|
ewarn
|
||||||
|
ewarn "If this is not intentional, the problem may be corrected by"
|
||||||
|
ewarn "using \"eselect kernel\" to set the default kernel version to"
|
||||||
|
ewarn "the same version as the installed version of virtual/dist-kernel."
|
||||||
|
ewarn
|
||||||
|
ewarn "If the distribution kernel is being downgraded, ensure that"
|
||||||
|
ewarn "virtual/dist-kernel is also downgraded to the same version"
|
||||||
|
ewarn "before rebuilding external kernel modules."
|
||||||
|
ewarn
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# @FUNCTION: _modules_sanity_modversion
|
# @FUNCTION: _modules_sanity_modversion
|
||||||
@ -1232,7 +1334,7 @@ _modules_update_depmod() {
|
|||||||
|
|
||||||
# EROOT from -b is not used when looking for configuration
|
# EROOT from -b is not used when looking for configuration
|
||||||
# directories, so pass the whole list from kmod's tools/depmod.c
|
# directories, so pass the whole list from kmod's tools/depmod.c
|
||||||
--config="${EROOT}"/{etc,run,usr/local/lib,lib}/depmod.d
|
--config="${EROOT}"/{etc,run,{usr/{local/,},}lib}/depmod.d
|
||||||
)
|
)
|
||||||
|
|
||||||
nonfatal edob depmod "${depmodargs[@]}" && return 0
|
nonfatal edob depmod "${depmodargs[@]}" && return 0
|
||||||
|
Loading…
Reference in New Issue
Block a user