89 lines
1.9 KiB
Bash
Executable File
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
|
|
)
|