#!/bin/bash build() { MODULE_FILE=$workdir/autodetect_modules if [[ ! -d /sys/devices ]]; then error "/sys does not appear to be mounted. Unable to use autodetection" return 1 fi auto_modules | grep -xEv '(ata|ide)_generic' >"$MODULE_FILE" if ! rootfstype=$(findmnt -uno fstype "${BASEDIR:-/}"); then error "failed to detect root filesystem" fs_autodetect_failed=1 fi # filesystem module might be a builtin if modinfo -k "$KERNELVERSION" "$rootfstype" &>/dev/null; then printf '%s\n' "$rootfstype" >>"$MODULE_FILE" fi if (( UID == 0 )) || in_array 'disk' $(groups); then if [[ -x $(type -P mdadm) ]]; then mdadm -Esv /dev/[hrsv]d* /dev/{ida,cciss,ataraid,mapper}/* | sed -n 's/.*level=\([^ ]\+\) .*/\1/p' | sed 's/\<raid[456]\>/raid456/g' | sort -u >>"$MODULE_FILE" fi else error "Insufficient permission to perform autodetection for mdadm devices" raid_autodetect_failed=1 fi if (( !QUIET )) && [[ -s $MODULE_FILE ]]; then plain "caching %d modules" $(wc -l < "$MODULE_FILE") fi } help() { cat <<HELPEOF This hook shrinks your initramdisk to a smaller size by autodetecting your needed modules. Be sure to verify included modules are correct and none are missing. This hook must be run before other subsystem hooks in order to take advantage of auto-detection. Any hooks placed before 'autodetect' will be installed in full. HELPEOF } # vim: set ft=sh ts=4 sw=4 et: