File all-modules of Package kernel-default-image
#! /bin/bash
KREL=$1
mapfile -t REQUEST < <(tr ' ' '\n')
[[ ${#REQUEST[@]} > 0 && ${REQUEST[0]} ]] || exit 0
declare -A ALLDEPS
while read l ; do
MOD=${l%%:*}
moddeps=(${l#*:})
[[ ${#moddeps[@]} > 0 ]] || continue
MOD=${MOD##*/}
MOD=${MOD%.ko*}
moddeps=(${moddeps[@]##*/})
moddeps=(${moddeps[@]%.ko*})
if [[ ${ALLDEPS[$MOD]} ]]; then
ALLDEPS[$MOD]="${ALLDEPS[$MOD]} ${moddeps[@]}"
else
ALLDEPS[$MOD]="${moddeps[@]}"
fi
done < <( \
cat /lib/modules/$KREL/modules.dep ;
cat /lib/modules/$KREL/modules.softdep | grep : | sed -e 's/^softdep //' -e 's/ \(pre\|post\):/:/')
declare -A MODULES
add_mod() {
local mm=$1 mf
if [[ $mm =~ ^[a-z0-9][-_a-zA-Z0-9]*$ ]]; then
mf=$mm
else
# modules.softdep may contain aliases like platform:foo
mf=$(/sbin/modinfo -F filename "$mm")
mf=${mf##*/}
mf=${mf%.ko*}
fi
[[ ! $mf || ${MODULES["$mf"]} ]] || MODULES["$mf"]="1"
}
for m in "${REQUEST[@]}"; do
# the spec file allows regexps in request list
for mm in ${!ALLDEPS[@]}; do
if [[ $mm =~ ^$m$ ]]; then
add_mod "$mm"
fi
done
done
n=0
while [[ $n != ${#MODULES[@]} ]]; do
n=${#MODULES[@]}
for m in "${!MODULES[@]}"; do
for d in ${ALLDEPS[$m]}; do
add_mod "$d"
done
done
done
echo "${!MODULES[@]}"