#!/bin/bash build() { local -a md_devs MODULE_FILE=$workdir/autodetect_modules add_if_avail() { local resolved # treat this as an alias, since ext3 might be aliased to ext4. IFS=$'\n' read -rd '' -a resolved < \ <(modprobe -S "$KERNELVERSION" -R "$1" 2>/dev/null) if (( ${#resolved[*]} )); then printf '%s\n' "${resolved[@]}" >>"$MODULE_FILE" fi } if [[ ! -d /sys/devices ]]; then error "/sys does not appear to be mounted. Unable to use autodetection" return 1 fi auto_modules >"$MODULE_FILE" # detect filesystem for root if rootfstype=$(findmnt -uno fstype "${BASEDIR:-/}"); then add_if_avail "$rootfstype" else error "failed to detect root filesystem" fs_autodetect_failed=1 fi # detect filesystem for separate /usr if usrfstype=$(findmnt -snero fstype --tab-file "$BASEDIR/etc/fstab" /usr); then add_if_avail "$usrfstype" fi # scan for md raid devices md_devs=(/sys/class/block/md*/md/level) if [[ -e $md_devs ]]; then (( !QUIET )) && plain "found %d mdadm arrays to scan" "${#md_devs[*]}" sed 's/^raid[456]$/raid456/' "${md_devs[@]}" | sort -u >>"$MODULE_FILE" fi if (( !QUIET )) && [[ -s $MODULE_FILE ]]; then plain "caching %d modules" $(wc -l < "$MODULE_FILE") fi } help() { cat <