diff options
author | Aaron Griffin <aaron@archlinux.org> | 2006-05-04 08:23:11 +0200 |
---|---|---|
committer | Aaron Griffin <aaron@archlinux.org> | 2006-05-04 08:23:11 +0200 |
commit | 30f04e5f7e9b4b77995836c362e57d0b25bde25f (patch) | |
tree | ad06bc2dc558fe9b4ba7b98e5630387b9208f222 | |
parent | 76167effbaa98d6e5d967451aa65902e4a5d4782 (diff) | |
download | mkinitcpio-30f04e5f7e9b4b77995836c362e57d0b25bde25f.tar.gz mkinitcpio-30f04e5f7e9b4b77995836c362e57d0b25bde25f.tar.xz |
Improved autodetect functionality with a checked_modules
function
git-svn-id: http://projects.archlinux.org/svn/initramfs/mkinitcpio@53 880c04e9-e011-0410-abf7-b926e227c9cd
-rw-r--r-- | functions | 49 | ||||
-rw-r--r-- | install/autodetect | 50 | ||||
-rw-r--r-- | install/filesystems | 2 | ||||
-rw-r--r-- | install/ide | 2 | ||||
-rw-r--r-- | install/sata | 2 | ||||
-rw-r--r-- | install/scsi | 6 | ||||
-rw-r--r-- | install/usb | 2 | ||||
-rw-r--r-- | mkinitcpio | 3 | ||||
-rw-r--r-- | mkinitcpio.conf | 4 |
9 files changed, 66 insertions, 54 deletions
@@ -2,19 +2,42 @@ auto_modules () { aliases=$(find /sys/devices/ -name modalias -exec cat {} \;) - modprobe --set-version ${KERNELVERSION} --show-depends -a \ - $aliases 2>/dev/null | sed "s|insmod \(.*\)|\1|" |\ - grep ${@} | sort -u + mods=$(modprobe --set-version ${KERNELVERSION} --show-depends -a \ + $aliases 2>/dev/null | sed 's|insmod \(.*\)|\1|' | grep ${@} | sort -u) + + echo "${mods}" + [ "x${mods}" = "x" ] && return 1 + return 0 } all_modules () { - find ${MODULEDIR} -name *.ko 2>/dev/null |\ - grep ${@} | sort -u + mods=$(find ${MODULEDIR} -name *.ko 2>/dev/null | grep ${@} | sort -u) + + echo "${mods}" + [ "x${mods}" = "x" ] && return 1 + return 0 +} + +checked_modules () +{ + ret=1 + if [ -e "${MODULE_FILE}" ]; then + for mod in $(all_modules ${@}); do + if grep "$(basename ${mod%%\.ko})" "${MODULE_FILE}" >/dev/null 2>&1; then + ret=0 + echo ${mod} + fi + done + return $ret + else + all_modules ${@} + fi } msg () { [ "${QUIET}" = "n" ] && echo "${@}"; } err () { echo "ERROR: ${@}" >&2; } +die () { echo "FATAL: ${@}" >&2; exit 1; } add_dir () { @@ -35,7 +58,7 @@ add_device () local perms perms="${5:-644}" if ! grep "nod ${1}" "${FILELIST}" 2>&1 > /dev/null; then - add_dir $(dirname "${1}") + add_dir $(dirname "${1}") msg " adding node ${1}" echo "nod ${1} ${perms} 0 0 ${2} ${3} ${4}" >> "${FILELIST}" fi @@ -53,11 +76,11 @@ add_symlink () dest="${2##$BASEDIR}" add_dir $(dirname "${dest}") if ! grep "slink ${dest} " "${FILELIST}" 2>&1 > /dev/null; then - msg " adding link ${fil} -> ${dest}" + msg " adding link ${fil} -> ${dest}" echo "slink ${dest} ${fil} $(stat -c '%a %u %g' ${fil})" >> "${FILELIST}" fi fi - #fail quietly + #fail quietly } add_file () @@ -109,7 +132,7 @@ add_module () _finish_modules () { - echo "wtf!" + echo "wtf!" } @@ -175,8 +198,8 @@ parse_hook () fi done - if [ "x${SCRIPT}" != "x" ]; then - add_file "${HOOKDIR}/${SCRIPT}" "/hooks/${SCRIPT}" - fi + if [ "x${SCRIPT}" != "x" ]; then + add_file "${HOOKDIR}/${SCRIPT}" "/hooks/${SCRIPT}" + fi } -# vim: set ft=sh ts=4 sw=4 noet: +# vim: set ft=sh ts=4 sw=4 et: diff --git a/install/autodetect b/install/autodetect index 70dc779..6371d35 100644 --- a/install/autodetect +++ b/install/autodetect @@ -3,10 +3,9 @@ install () { msg ":: Autodetecting modules" + MODULE_FILE="$(mktemp /tmp/initcpio_modules.XXXXXX)" #blegh, we'll let /tmp clean itself up - modtmp=$( mktemp /tmp/initcpio_modules.XXXXXX ) - modall=$( mktemp /tmp/initcpio_modulesall.XXXXXX ) - AUTODETECT=" $(auto_modules "/scsi/" | grep -v "imm"| grep -v "pcmcia" | grep -v "ide" && echo "sd_mod sr_mod") + AUTODETECT=" $((auto_modules "/scsi/" | grep -ve "imm" -e "pcmcia" -e "ide") && echo "sd_mod sr_mod") $(auto_modules "/block/" && echo "sd_mod sr_mod") $(auto_modules "/fusion/" && echo "sd_mod sr_mod") $(auto_modules "/usb/" && echo "usb_storage usbhid sd_mod sr_mod") @@ -14,33 +13,21 @@ install () $(auto_modules "/ieee1394/" && echo "sbp2 sd_mod sr_mod") $(auto_modules "/cdrom/") $(cat /proc/filesystems | grep -v nodev) " - + for m in $AUTODETECT; do - echo $(basename ${m//\.ko/}) >> $modtmp + modname="$(basename ${m%%\.ko})" + grep "${modname}" "${MODULE_FILE}" >/dev/null 2>&1 && continue + echo "${modname}" >> "${MODULE_FILE}" # fixing missing depends for filesystems - [ "$m" == "ext3" ] && echo "jbd" >> $modtmp - [ "$m" == "afs" ] && echo "rxrpc" >> $modtmp - [ "$m" == "cramfs" ] && echo "zlib_inflate" >> $modtmp - [ "$m" == "isofs" ] && echo "zlib_inflate" >> $modtmp - [ "$m" == "msdos" ] && echo "fat" >> $modtmp - [ "$m" == "vfat" ] && echo "fat" >> $modtmp - [ "$m" == "ocfs2" ] && echo "ocfs2_dlm" >> $modtmp - [ "$m" == "ocfs2" ] && echo "jbd" >> $modtmp - [ "$m" == "ocfs2" ] && echo "ocfs2_nodemanager" >> $modtmp - [ "$m" == "ocfs2" ] && echo "configfs" >> $modtmp + [ "$m" = "ext3" ] && echo "jbd" >> "${MODULE_FILE}" + [ "$m" = "afs" ] && echo "rxrpc" >> "${MODULE_FILE}" + [ "$m" = "cramfs" ] && echo "zlib_inflate" >> "${MODULE_FILE}" + [ "$m" = "isofs" ] && echo "zlib_inflate" >> "${MODULE_FILE}" + [ "$m" = "msdos" ] && echo "fat" >> "${MODULE_FILE}" + [ "$m" = "vfat" ] && echo "fat" >> "${MODULE_FILE}" + [ "$m" = "ocfs2" ] && echo -e "ocfs2_dlm\njbd\nocfs2_nodemanager\nconfigfs" >> "${MODULE_FILE}" done - grep "file /lib/modules" ${FILELIST} >>$modall - for i in `cat $modtmp`; do - sed -i -e "\=/$i=d" $modall - done - for i in `grep "file /lib/modules" $modall | awk '{print $2}'`; do - sed -i -e "\=$i=d" ${FILELIST} - done - msg "Included MODULES:" - msg "-----------------" - msg "$(grep "file /lib/modules/" ${FILELIST} | awk '{print $2}')" - msg "-----------------" BINARIES="" FILES="" SCRIPT="" @@ -50,11 +37,10 @@ help () { cat <<HELPEOF This hook shrinks your initramdisk to a smaller size - by autodetecting your needed modules. - Please take a look at the included modules for completeness, - else your system might be unbootable. - Valid Hooks are: base,udev,ide,scsi,sata,usb,fw,filesystems - Put this hook at the end of your valid hooks. - Put other hooks behind autodetect hook. + 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 } diff --git a/install/filesystems b/install/filesystems index bebef3e..c9528a7 100644 --- a/install/filesystems +++ b/install/filesystems @@ -2,7 +2,7 @@ install () { - MODULES=" $(all_modules '/kernel/fs' | grep -v "nls") " + MODULES=" $(checked_modules '/kernel/fs' | grep -v "nls") " BINARIES="" FILES="" SCRIPT="filesystems" diff --git a/install/ide b/install/ide index ac0ea62..67b5be1 100644 --- a/install/ide +++ b/install/ide @@ -2,7 +2,7 @@ install () { - MODULES=" $(all_modules "/ide/" | grep -v "legacy") "; + MODULES=" $(checked_modules "/ide/" | grep -v "legacy") "; BINARIES="" FILES="" SCRIPT="" diff --git a/install/sata b/install/sata index a31b55a..51a61a7 100644 --- a/install/sata +++ b/install/sata @@ -2,7 +2,7 @@ install () { - MODULES=" $(all_modules "scsi/.*ata") sx8 ahci pdc_adma sd_mod sr_mod piix" + MODULES=" $(checked_modules "scsi/.*ata" && echo "sx8 ahci pdc_adma sd_mod sr_mod piix")" BINARIES="" FILES="" SCRIPT="" diff --git a/install/scsi b/install/scsi index fc6f940..2f107bc 100644 --- a/install/scsi +++ b/install/scsi @@ -2,9 +2,9 @@ install () { - MODULES=" $(all_modules "/scsi/" | grep -ve "imm" -e "pdc_adma" -e "ahci" -e "ata" -e "pcmcia" -e "ide") - $(all_modules "/block/" | grep -v "sx8") - $(all_modules "/fusion/")" + MODULES=" $(checked_modules "/scsi/" | grep -ve "imm" -e "pdc_adma" -e "ahci" -e "ata" -e "pcmcia" -e "ide") + $(checked_modules "/block/" | grep -v "sx8") + $(checked_modules "/fusion/")" BINARIES="" FILES="" SCRIPT="" diff --git a/install/usb b/install/usb index 0e655bd..03ed024 100644 --- a/install/usb +++ b/install/usb @@ -2,7 +2,7 @@ install () { - MODULES=" $(all_modules "/usb/host" | grep -ve "_cs" -e "sl1811-hcd" -e "isp116x-hcd") + MODULES=" $(checked_modules "/usb/host" | grep -ve "_cs" -e "sl1811-hcd" -e "isp116x-hcd") usb_storage usbhid sd_mod sr_mod " BINARIES="" FILES="" @@ -20,6 +20,7 @@ FUNCTIONS="functions" #/lib/initramfs/functions CONFIG="mkinitcpio.conf" HOOKDIR="hooks" INSTDIR="install" +MODULE_FILE="" SAVELIST="" GENIMG="" APPEND="" @@ -122,6 +123,7 @@ if [ "${HAS_MODULES}" == "y" ]; then add_file /tmp${MODULEDIR}/modules.dep ${MODULEDIR}/modules.dep add_file /tmp${MODULEDIR}/modules.alias ${MODULEDIR}/modules.alias add_file /tmp${MODULEDIR}/modules.symbols ${MODULEDIR}/modules.symbols + add_file "${MODULE_FILE}" "/modules" fi if [ "x$GENIMG" != "x" ]; then @@ -133,4 +135,5 @@ if [ "x$GENIMG" != "x" ]; then rm ${FILELIST} fi fi +[ -e "${MODULE_FILE}" ] && rm "${MODULE_FILE}" #vim:set ft=sh ts=4 sw=4 noet: diff --git a/mkinitcpio.conf b/mkinitcpio.conf index 9e0576d..e4c301d 100644 --- a/mkinitcpio.conf +++ b/mkinitcpio.conf @@ -39,7 +39,7 @@ FILES="" # # This setup will autodetect all modules for your system and should # work as a sane default -# HOOKS="base udev ide scsi sata filesystems autodetect" +# HOOKS="base udev autodetect ide scsi sata filesystems" # # This setup will generate a 'full' image which supports most systems. # No autodetection is done. @@ -51,4 +51,4 @@ FILES="" # # This setup loads an LVM volume group on a usb device. # HOOKS="base udev usb filesystems lvm" -HOOKS="base udev ide scsi sata filesystems autodetect" +HOOKS="base udev autodetect ide scsi sata filesystems" |