Files
2026-03-21 12:43:00 -05:00

89 lines
1.9 KiB
Bash
Executable File

#!/bin/sh
set -eu
MKINITRAMFS=${MKINITRAMFS:-mkinitramfs}
DEPMOD=${DEPMOD:-depmod}
BOOT_DIR=${BOOT_DIR:-/boot}
if ! command -v "$MKINITRAMFS" >/dev/null 2>&1; then
echo "error: $MKINITRAMFS not found in PATH" >&2
exit 1
fi
if ! command -v "$DEPMOD" >/dev/null 2>&1; then
echo "error: $DEPMOD not found in PATH" >&2
exit 1
fi
if [ ! -d "$BOOT_DIR" ]; then
echo "error: boot directory not found: $BOOT_DIR" >&2
exit 1
fi
versions=""
add_version() {
v=$1
case "
$versions
" in
*"
$v
"*) ;;
*)
if [ -z "$versions" ]; then
versions=$v
else
versions=$versions"
"$v
fi
;;
esac
}
for moddir in /lib/modules/*/; do
[ -d "$moddir" ] || continue
kver=${moddir%/}
kver=${kver##*/}
[ -n "$kver" ] || continue
vmlinuz_link="$moddir/vmlinuz"
[ -e "$vmlinuz_link" ] || continue
kernel_image=$(readlink -f "$vmlinuz_link" 2>/dev/null) || continue
[ -f "$kernel_image" ] || continue
add_version "$kver"
done
if [ -z "$versions" ]; then
echo "no versioned kernels found via /lib/modules/*/vmlinuz" >&2
exit 0
fi
(
cd "$BOOT_DIR" || exit 1
printf '%s\n' "$versions" | while IFS= read -r kver; do
[ -n "$kver" ] || continue
vmlinuz_link="/lib/modules/$kver/vmlinuz"
kernel_image=$(readlink -f "$vmlinuz_link" 2>/dev/null) || {
echo "skipping $kver: cannot resolve /lib/modules/$kver/vmlinuz" >&2
continue
}
[ -f "$kernel_image" ] || {
echo "skipping $kver: kernel image not found at $kernel_image" >&2
continue
}
echo "running depmod for $kver" >&2
"$DEPMOD" -a "$kver" || {
echo "error: depmod failed for $kver, skipping initramfs" >&2
continue
}
echo "updating initramfs for $kver (kernel: $kernel_image)" >&2
"$MKINITRAMFS" "$kver"
done
)