From 423bf87a44ebe6483dac3c71f8cb65fa184ed2fb Mon Sep 17 00:00:00 2001 From: Benjamin Schieder Date: Wed, 7 Jun 2006 08:32:04 +0000 Subject: [PATCH] Benjamin Schieder: fix initrd creation for kernel version != running kernel use modinfo instead of modprobe --show-depends fixes flyspray bug #249 Works For Me(TM), but I have a relatively simple initrd arrangement [2006051209001920431] (https://www.rocklinux.net/submaster) git-svn-id: http://www.rocklinux.org/svn/rock-linux/trunk@7605 c5f82cb5-29bc-0310-9cd0-bff59a50e3bc --- package/base/rockinitrd/mkinitrd.sh | 36 +++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/package/base/rockinitrd/mkinitrd.sh b/package/base/rockinitrd/mkinitrd.sh index b0f59a347..f8155927e 100644 --- a/package/base/rockinitrd/mkinitrd.sh +++ b/package/base/rockinitrd/mkinitrd.sh @@ -2,8 +2,6 @@ kernel=`uname -r` targetdir=`mktemp -d` -modprobeopt="-n" -[ "${kernel:0:3}" == "2.6" ] && modprobeopt="--show-depends" empty=0 rootdir="" @@ -64,19 +62,39 @@ case ${initrdfs} in ;; esac +add_module_to_initrd() { + module="${1}" + parameter="${2}" + module=${module/.ko/} # just in case, shouldn't be + module="`find ${rootdir}/lib/modules/${kernel} -name "${module}.o" -o -name "${module}.ko"`" + [ -f "${targetdir}/${module}" ] && return # skip dupes + echo "Adding ${module}." + mkdir -p ${targetdir}/${module%/*} + cp ${module} ${targetdir}/${module} + echo "/sbin/insmod ${module} ${parameter}" >> ${targetdir}/etc/conf/kernel +} + echo "Creating ${initrd_img} ..." mkdir -p ${targetdir}/etc/conf if [ "${empty}" = 0 ] ; then grep '^modprobe ' ${rootdir}/etc/conf/kernel | grep -v 'no-initrd' | \ sed 's,[ ]#.*,,' | \ - while read a b ; do ${a} ${modprobeopt} -v ${b} 2> /dev/null; done | while read a b c; do - [[ "${b}" = *.ko ]] && b=${b/.ko/}; - b="`find ${rootdir}/lib/modules/${kernel} -wholename "${b}.o" -o -wholename "${b}.ko"`" - echo "Adding ${b}." - mkdir -p ${targetdir}/${b%/*} - cp ${b} ${targetdir}/${b} - echo "/sbin/insmod ${b} ${c}" >> ${targetdir}/etc/conf/kernel + module="$( find ${rootdir}/lib/modules/${kernel}/ -name "${b}.o" -o -name "${b}.ko" )" + if [ -z "${module}" ] ; then + echo "$0: ${b} is no longer a module in ${kernel}" >&2 + echo "$0: Please either adjust /etc/conf/kernel or the configuration for the kernel V${kernel}" >&2 + continue + fi + modinfo ${module} 2> /dev/null | grep ^depends: | \ + while read a b; do + [ -z "${b}" ] && continue + b="${b//,/ }" + for module in ${b} ; do + add_module_to_initrd "${b}" + done + done + add_module_to_initrd "${b}" "${c}" done fi