#!/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 )