diff options
Diffstat (limited to 'sys-firmware/intel-microcode/files/35-intel-microcode-systemd.install')
-rw-r--r-- | sys-firmware/intel-microcode/files/35-intel-microcode-systemd.install | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/sys-firmware/intel-microcode/files/35-intel-microcode-systemd.install b/sys-firmware/intel-microcode/files/35-intel-microcode-systemd.install new file mode 100644 index 000000000000..7ad7b8c49e83 --- /dev/null +++ b/sys-firmware/intel-microcode/files/35-intel-microcode-systemd.install @@ -0,0 +1,47 @@ +#!/usr/bin/env bash + +# Copyright 2024 Gentoo Authors +# This script is installed by sys-firmware/intel-microcode, it is executed by +# systemd's kernel-install, NOT by the traditional installkernel. I.e. this +# plugin is run when the systemd USE flag is enabled or +# SYSTEMD_KERNEL_INSTALL=1 is set in the environment. + +COMMAND="${1}" + +if [[ ${COMMAND} != add ]]; then + exit 0 +fi + +if [[ ${KERNEL_INSTALL_INITRD_GENERATOR} == dracut ]]; then + # Dracut bundles microcode in its initramfs images + [[ ${KERNEL_INSTALL_VERBOSE} == 1 ]] && echo \ + "initrd_generator=${KERNEL_INSTALL_INITRD_GENERATOR} bundles CPU microcode, nothing to do here." + exit 0 +fi + +# do nothing if somehow iucode_tool is not installed +if ! command -v iucode_tool >/dev/null; then + [[ ${KERNEL_INSTALL_VERBOSE} == 1 ]] && echo \ + "iucode_tool command not available" + exit 1 +fi + +# use same opts as intel-microcode.ebuild +opts=( + --write-earlyfw="${KERNEL_INSTALL_STAGING_AREA}/microcode-intel" + --overwrite + --strict-checks + --no-ignore-broken + --no-downgrade +) + +if [[ ${KERNEL_INSTALL_VERBOSE} == 1 ]]; then + echo "Generating Intel CPU Microcode early initramfs image..." + opts+=( + --list-all + --list + ) +fi + +iucode_tool /lib/firmware/intel-ucode "${opts[@]}" || + { echo "iucode_tool failed" && exit 1; } |