particle-os-modules/modules/initramfs/initramfs.sh
fiftydinar 23e36119b9
feat: initramfs module (#376)
* 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>
2024-12-15 11:02:37 +01:00

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}"