* feat: `initramfs` module * chore: Add `initramfs` to `modules.json` * docs: Mention `dracut.conf.d` files as modifications which need initramfs regeneration * docs: Style fix * docs: Style fix * docs: One more style fix * docs: Add note about difference between `rpm-ostree initramfs` & this module * docs: Further explanation of initramfs * docs: Style fixes * docs: Style fix * docs: Grammar fixes * chore: Add check for Fedora 41+ * docs: Add note about F41+ support * docs: Add 3 dots for note * chore: Grammar improvement in log * chore: Some more explanations in log for old Fedora version * chore: Add error message for cliwrapped images * chore: Use cliwrapped dracut if available * docs: Apply caution card suggestion Co-authored-by: xyny <60004820+xynydev@users.noreply.github.com> * docs: Apply suggestion about modifications list Co-authored-by: xyny <60004820+xynydev@users.noreply.github.com> * docs: Apply grammar suggestion for when this module should be used Co-authored-by: xyny <60004820+xynydev@users.noreply.github.com> * chore: Make log message about initramfs regeneration state clearer Co-authored-by: xyny <60004820+xynydev@users.noreply.github.com> * docs: Apply suggestion about expanded module description Co-authored-by: xyny <60004820+xynydev@users.noreply.github.com> * docs: RAM instead of ram * chore: Fix log typo * docs: Update description in typeschema * docs: Update description in module.yml * chore: Notify of more than 1 qualified kernel before initramfs image variable * chore: finalize shortdesc wording --------- Co-authored-by: xyny <60004820+xynydev@users.noreply.github.com>
44 lines
1.7 KiB
Bash
44 lines
1.7 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
if ! command -v rpm-ostree &> /dev/null || ! command -v bootc &> /dev/null; then
|
|
echo "This module is only compatible with Fedora Atomic images"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ "${OS_VERSION}" -le 40 ]]; then
|
|
echo "This module is only compatible with Fedora 41+ images."
|
|
exit 1
|
|
fi
|
|
|
|
# If images already installed cliwrap, use it. Only used in transition period, so it should be removed when base images like Ublue remove cliwrap
|
|
if [[ -f "/usr/libexec/rpm-ostree/wrapped/dracut" ]]; then
|
|
DRACUT="/usr/libexec/rpm-ostree/wrapped/dracut"
|
|
else
|
|
DRACUT="/usr/bin/dracut"
|
|
fi
|
|
|
|
# NOTE!
|
|
# This won't work when Fedora starts to utilize UKIs (Unified Kernel Images).
|
|
# UKIs will contain kernel + initramfs + bootloader.
|
|
# Refactor the module to support UKIs once they are starting to be used, if possible.
|
|
# That won't be soon, so this module should work for good period of time
|
|
|
|
KERNEL_MODULES_PATH="/usr/lib/modules"
|
|
readarray -t QUALIFIED_KERNEL < <(find "${KERNEL_MODULES_PATH}" -mindepth 1 -maxdepth 1 -type d -printf "%f\n")
|
|
|
|
if [[ "${#QUALIFIED_KERNEL[@]}" -gt 1 ]]; then
|
|
echo "ERROR: There are several versions of kernel's initramfs."
|
|
echo " Cannot determine which one to regenerate."
|
|
echo " There is a possibility that you have multiple kernels installed in the image."
|
|
echo " Please only include 1 kernel in the image to solve this issue."
|
|
exit 1
|
|
fi
|
|
|
|
INITRAMFS_IMAGE="${KERNEL_MODULES_PATH}/${QUALIFIED_KERNEL[*]}/initramfs.img"
|
|
|
|
echo "Starting initramfs regeneration for kernel version: ${QUALIFIED_KERNEL[*]}"
|
|
|
|
"${DRACUT}" --no-hostonly --kver "${QUALIFIED_KERNEL[*]}" --reproducible -v --add ostree -f "${INITRAMFS_IMAGE}"
|
|
chmod 0600 "${INITRAMFS_IMAGE}"
|