#!/bin/bash build() { MODULE_FILE=$workdir/autodetect_modules add_if_avail() { if modinfo -k "$KERNELVERSION" "$1" &>/dev/null; then printf '%s\n' "$1" >>"$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 | 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 add_if_avail "$rootfstype" # detect separate /usr if usrfstype=$(findmnt -nero fstype -s"$BASEDIR/etc/fstab" /usr); then add_if_avail "$usrfstype" 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/\/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 <