diff options
author | James Meyer <James.meyer@operamail.com> | 2008-10-02 03:19:12 (GMT) |
---|---|---|
committer | James Meyer <James.meyer@operamail.com> | 2008-10-02 03:19:12 (GMT) |
commit | 0e2532d4e8f4eed5e047f1db54d5c03ba849ec0a (patch) | |
tree | c0aa2c0b53c317be87eacfcb77b63f53f1f415e7 /abs/core/hwdetect | |
download | linhes_pkgbuild-0e2532d4e8f4eed5e047f1db54d5c03ba849ec0a.zip linhes_pkgbuild-0e2532d4e8f4eed5e047f1db54d5c03ba849ec0a.tar.gz linhes_pkgbuild-0e2532d4e8f4eed5e047f1db54d5c03ba849ec0a.tar.bz2 |
initial import
Diffstat (limited to 'abs/core/hwdetect')
-rw-r--r-- | abs/core/hwdetect/PKGBUILD | 18 | ||||
-rwxr-xr-x | abs/core/hwdetect/hwdetect | 482 |
2 files changed, 500 insertions, 0 deletions
diff --git a/abs/core/hwdetect/PKGBUILD b/abs/core/hwdetect/PKGBUILD new file mode 100644 index 0000000..14fd6a9 --- /dev/null +++ b/abs/core/hwdetect/PKGBUILD @@ -0,0 +1,18 @@ +# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $ +# Maintainer: Tobias Powalowski <tpowa@archlinux.org> +pkgname=hwdetect +pkgver=0.9 +pkgrel=10 +pkgdesc="Hardware detection script with loading modules and mkinitcpio.conf / rc.conf support" +arch=(i686 x86_64) +license=('custom:none') +groups=('base') +backup=() +depends=('sh' 'awk' 'grep' 'coreutils' 'sed') +source=(hwdetect) +md5sums=('bae2a26062c1ae8036b3a2173c8e3b51') + +build() { + install -D -m 755 $startdir/src/hwdetect $startdir/pkg/sbin/hwdetect +} + diff --git a/abs/core/hwdetect/hwdetect b/abs/core/hwdetect/hwdetect new file mode 100755 index 0000000..4991210 --- /dev/null +++ b/abs/core/hwdetect/hwdetect @@ -0,0 +1,482 @@ +#! /bin/sh +# Autodetection script for scanning /sys for hardware +# for Archlinux by Tobias Powalowski <tpowa@archlinux.org> +usage () { + echo "$0 [options]" + echo "" + echo " This is a tool that detects/lists modules that are exported by /sys" + echo "" + echo " Options:" + echo " --kernel_version= use kernel version (no autodetect)" + echo " --ide-legacy use old ide modules instead of pata" + echo " --load-modules load all detected modules" + echo " --unload-modules unload all detected modules" + echo " --show-modules show all detected modules" + echo " --show-modules-order shows load order of detected modules" + echo " --show-agp show AGP modules" + echo " --show-acpi show ACPI modules" + echo " --show-ide show IDE modules" + echo " --show-scsi show SCSI modules" + echo " --show-sata show SATA modules" + echo " --show-usb show USB modules" + echo " --show-fw show FIREWIRE modules" + echo " --show-net show NETWORK modules" + echo " --show-input show INPUT modules" + echo " --show-irda show IRDA modules" + echo " --show-isdn show ISDN modules" + echo " --show-pcmcia show PCMCIA modules" + echo " --show-sound show SOUND modules" + echo " --show-video show VIDEO modules" + echo " --show-other show OTHER modules" + echo "" + echo " For /etc/mkinitcpio.conf use:" + echo " --hostcontroller show MODULES= for all hostcontrollers" + echo " --vmware add BusLogic to MODULES for vmware" + echo "" + echo " --hooks show HOOKS=" + echo " --hooks-dir use this directory for HOOKS check" + echo " --dsdt add dsdt to HOOKS=" + echo " --raid add raid to HOOKS=" + echo " --raid-partitions add raid-partitions to HOOKS=" + echo " --encrypt add encrypt to HOOKS=" + echo " --lvm2 add lvm2 to HOOKS=" + echo " --keymap add keymap to HOOKS=" + echo " --usb add usb to HOOKS=" + echo " --fw add fw to HOOKS=" + echo " --pcmcia add pcmcia to HOOKS=" + echo " --nfs add net to HOOKS=" + echo "" + echo " For /etc/rc.conf use:" + echo " --net show network MODULES" + echo " --sound show sound MODULES" + echo " --modules show all detected MODULES" + echo "" + exit 1 +} + +[ "$1" = "" ] && usage +[ "$1" = "--help" ] && usage +[ "$1" = "-h" ] && usage + +# setting kernel version +case $1 in + --kernel_version=*) + KERNEL_VERSION="`echo $1 | awk -F= '{print $2;}'`" + ;; +esac + +if [ "$KERNEL_VERSION" = "" ]; then + KERNEL_VERSION="`uname -r`" +fi + +# IDE/PATA switch +[ "$(echo $* | grep '\-ide-legacy')" ] && IDE_LEGACY=1 + +# dsdt switch +[ "$(echo $* | grep '\-dsdt')" ] && DSDT=1 + +# raid switch +[ "$(echo $* | grep '\-raid-partition')" ] && RAID_PARTITIONS=1 +if ! [ "$RAID_PARTITIONS" = "1" ]; then + [ "$(echo $* | grep '\-raid')" ] && RAID=1 +fi + +# encrypt switch +[ "$(echo $* | grep '\-encrypt')" ] && ENCRYPT=1 + +# lvm2 switch +[ "$(echo $* | grep '\-lvm2')" ] && LVM2=1 + +# keymap switch +[ "$(echo $* | grep '\-keymap')" ] && KEYMAP=1 + +# usb switch +[ "$(echo $* | grep '\-usb')" ] && USB=1 + +# fw switch +[ "$(echo $* | grep '\-fw')" ] && FW=1 + +# pcmcia switch +[ "$(echo $* | grep '\-pcmcia')" ] && PCMCIA=1 + +# nfs switch +[ "$(echo $* | grep '\-nfs')" ] && NFS=1 + +# vmware switch +[ "$(echo $* | grep '\-vmware')" ] && VMWARE=1 + +# checking /sys +if ! [ -d /sys/ ]; then + echo "/sys/ is not present -- mount /sys first" >&2 + exit 1 +fi + +: >/tmp/modules-plain +: >/tmp/modules-stripped +: >/tmp/modules-sorted +: >/tmp/moduleslist + +# find pci aliases +aliases=`find /sys/ -noleaf -name modalias -exec cat {} +` + +# check for empty aliases +if [ "$aliases" = "" ]; then + echo "hwdetect aborted -- you need a kernel >= 2.6.12" >&2 + exit 1 +fi + +# generate files for the different actions +modprobe -a --set-version=$KERNEL_VERSION --show-depends $aliases >> /tmp/modules-plain 2>/dev/null + +# fix evdev detection +#if [ "`echo $aliases | grep 'serio:ty06pr*[id]*[ex]*'`" ]; then +# modprobe -i --set-version=$KERNEL_VERSION --show-depends evdev >> /tmp/modules-plain 2>/dev/null +#fi +# fix Intel536ep detection +#if [ "`echo $aliases | grep 'pci:v00008086d00001040sv000016BEsd00001040bc07sc80i00'`" ]; then +# modprobe -i --set-version=$KERNEL_VERSION --show-depends Intel536 >> /tmp/modules-plain 2>/dev/null +#fi + +# fix ide cdrom detection on proliant 1600 +if [ "`echo $aliases | grep 'pci:v00000E11d00000001sv00000000sd00000000bc06sc02i00'`" ]; then + modprobe -i --set-version=$KERNEL_VERSION --show-depends ide-generic >> /tmp/modules-plain 2>/dev/null +fi + +# find PNP devices like parports, soundcards etc. +# (workaround for rtc, pcspkr, irtty-sir and analog are included) +if [ "`find /sys/devices -noleaf -name 'id' | grep /pnp`" ]; then + for i in `find /sys/devices -noleaf -name "id" | grep /pnp`; do + devid=`cat $i | grep PNP` + [ "$devid" ] || continue + + modprobe -i --set-version=$KERNEL_VERSION --show-depends pnp:d${devid} >> /tmp/modules-plain 2>/dev/null + + [ "$devid" = "PNP0800" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends pcspkr 2>/dev/null >> /tmp/modules-plain 2>/dev/null + #[ "$devid" = "PNP0b00" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends rtc >> /tmp/modules-plain 2>/dev/null + [ "$devid" = "PNP0b00" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends rtc_proc 2>/dev/null >> /tmp/modules-plain 2>/dev/null + [ "$devid" = "PNP0b00" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends rtc_sysfs 2>/dev/null >> /tmp/modules-plain + [ "$devid" = "PNP0b00" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends rtc_dev 2>/dev/null >> /tmp/modules-plain + [ "$devid" = "PNP0510" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends irtty-sir 2>/dev/null >> /tmp/modules-plain 2>/dev/null + [ "$devid" = "PNP0511" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends irtty-sir 2>/dev/null >> /tmp/modules-plain 2>/dev/null + [ "$devid" = "PNPb02f" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends analog 2>/dev/null >> /tmp/modules-plain 2>/dev/null + + # load ppp-generic if serial ports are detected for modems + [ "$devid" = "PNP0501" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends ppp-generic 2>/dev/null >> /tmp/modules-plain 2>/dev/null + done +fi + +# IDE disks/cdroms/floppy/tape +#if [ "`find /proc/ide -noleaf -name 'media'`" ]; then +# for i in $(cat `find /proc/ide -noleaf -name "media"`); do +# case $i in +# cdrom) modprobe -i --set-version=$KERNEL_VERSION --show-depends ide-cd >> /tmp/modules-plain 2>/dev/null ;; +# floppy) modprobe -i --set-version=$KERNEL_VERSION --show-depends ide-floppy >> /tmp/modules-plain 2>/dev/null ;; +# disk) modprobe -i --set-version=$KERNEL_VERSION --show-depends ide-disk >> /tmp/modules-plain 2>/dev/null ;; +# tape) modprobe -i --set-version=$KERNEL_VERSION --show-depends ide-tape >> /tmp/modules-plain 2>/dev/null ;; +# esac +# done +#fi + +# SCSI disks/cdroms/tapes/generic devices +if [ "`find /sys/devices -noleaf -name 'type'`" ]; then + for i in $(cat `find /sys/devices -noleaf -name "type"`); do + case $i in (4|5) modprobe -i --set-version=$KERNEL_VERSION --show-depends sr-mod >> /tmp/modules-plain 2>/dev/null ;; esac + case $i in (2|3|6|8|9) modprobe -i --set-version=$KERNEL_VERSION --show-depends sg >> /tmp/modules-plain 2>/dev/null ;; esac + case $i in (0|7|14) modprobe -i --set-version=$KERNEL_VERSION --show-depends sd-mod >> /tmp/modules-plain 2>/dev/null ;; esac + case $i in (1) modprobe -i --set-version=$KERNEL_VERSION --show-depends st >> /tmp/modules-plain 2>/dev/null ;; esac + done +fi + +# add Buslogic for vmware +if [ "$VMWARE" = "1" ]; then + modprobe -i --set-version=$KERNEL_VERSION --show-depends BusLogic >> /tmp/modules-plain 2>/dev/null +fi + +# Firewire disks/cdroms/network +#if [ "`grep 'ohci1394' /tmp/modules-plain`" ]; then +# modprobe -i --set-version=$KERNEL_VERSION --show-depends sbp2 >> /tmp/modules-plain 2>/dev/null +# modprobe -i --set-version=$KERNEL_VERSION --show-depends eth1394 >> /tmp/modules-plain 2>/dev/null +#fi + +# Modem devices +#case $i in (Intel536|Intel537|ltmodem|ltserial|slamr|slusb) \ +# grep "$i" /tmp/modules-plain && modprobe -i --set-version=$KERNEL_VERSION --show-depends ppp-generic >> /tmp/modules-plain 2>/dev/null ;; \ +# esac + +# Parport modules +if [ "`grep 'parport' /tmp/modules-plain`" ]; then + modprobe -i --set-version=$KERNEL_VERSION --show-depends lp >> /tmp/modules-plain 2>/dev/null + modprobe -i --set-version=$KERNEL_VERSION --show-depends ppdev >> /tmp/modules-plain 2>/dev/null +fi + +# Sound OSS compat modules +if [ "`grep 'snd-pcm' /tmp/modules-plain`" ]; then + modprobe -i --set-version=$KERNEL_VERSION --show-depends snd-pcm-oss >> /tmp/modules-plain 2>/dev/null +fi +if [ "`grep 'snd-seq' /tmp/modules-plain`" ]; then + modprobe -i --set-version=$KERNEL_VERSION --show-depends snd-seq-oss >> /tmp/modules-plain 2>/dev/null +fi + +# USB modules +#if [ "`grep 'usb/' /tmp/modules-plain`" ]; then +# modprobe -i --set-version=$KERNEL_VERSION --show-depends usbhid >> /tmp/modules-plain 2>/dev/null +# modprobe -i --set-version=$KERNEL_VERSION --show-depends usb-storage >> /tmp/modules-plain 2>/dev/null +# modprobe -i --set-version=$KERNEL_VERSION --show-depends usblp >> /tmp/modules-plain 2>/dev/null +#fi + +sort -u /tmp/modules-plain >> /tmp/modules-stripped + +# OTHER modules loading first for speed up! +grep -v "ide/" /tmp/modules-stripped | grep -v "scsi/" | grep -v "fusion/" | grep -v "block/sx8" | grep -v "message/fusion" | \ + grep -v "block/cciss" | grep -v "block/cpqarray" | grep -v "block/DAC960" | grep -v "ata/" | \ + grep -v "net/" | grep -v "pcmcia/" | grep -v "usb/" | \ + grep -v "ieee1394/" >> /tmp/modules-sorted +# make a correct order for the modules, internal devices have priority! +# only use old ide modules if boot parameter 'ide-legacy' is given +if [ "$IDE_LEGACY" = "1" ]; then + grep "ide/" /tmp/modules-stripped >> /tmp/modules-sorted +else + grep "ata/pata" /tmp/modules-stripped >> /tmp/modules-sorted + grep "ata/ata_generic" /tmp/modules-stripped >> /tmp/modules-sorted +fi +grep "scsi/" /tmp/modules-stripped | grep -v "sd_mod" | grep -v "sr_mod" | grep -v "/sg.ko" | grep -v "/st.ko" >> /tmp/modules-sorted +grep "block/" /tmp/modules-stripped | grep -v "sx8" | grep -v "nbd" | grep -v "pktcdvd" | grep -v "floppy" >> /tmp/modules-sorted +grep "fusion/" /tmp/modules-stripped >> /tmp/modules-sorted +grep "ata/" /tmp/modules-stripped| grep -v "pata" | grep -v "ata_generic" | grep -v "libata" >> /tmp/modules-sorted +grep "block/" /tmp/modules-stripped | grep "sx8" >> /tmp/modules-sorted +grep "net/" /tmp/modules-stripped | grep -v "wireless/" | grep -v "usb/" >> /tmp/modules-sorted +grep "wireless/" /tmp/modules-stripped >> /tmp/modules-sorted +grep "pcmcia/" /tmp/modules-stripped >> /tmp/modules-sorted + +# speed up usb module loading +grep "usb-storage" /tmp/modules-stripped >> /tmp/modules-sorted +grep "usblp" /tmp/modules-stripped >> /tmp/modules-sorted +grep "usbhid" /tmp/modules-stripped >> /tmp/modules-sorted +grep "usb/" /tmp/modules-stripped | grep -v "usb-storage" | grep -v "usbhid" | grep -v "usblp" >> /tmp/modules-sorted +grep "firewire/" /tmp/modules-stripped >> /tmp/modules-sorted +grep "ieee1394/" /tmp/modules-stripped >> /tmp/modules-sorted + +# add scsi device modules at the end +grep "sd_mod" /tmp/modules-stripped >> /tmp/modules-sorted +grep "sr_mod" /tmp/modules-stripped >> /tmp/modules-sorted +grep "/st.ko" /tmp/modules-stripped >> /tmp/modules-sorted +grep "/sg.ko" /tmp/modules-stripped >> /tmp/modules-sorted + + +sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" /tmp/modules-sorted >> /tmp/moduleslist + +# blacklist framebuffer modules +for x in $(echo /lib/modules/$(uname -r)/kernel/drivers/video/*/*fb*); do + BLACKLIST="$BLACKLIST $(/usr/bin/basename $x .ko)" +done +for x in $(echo /lib/modules/$(uname -r)/kernel/drivers/video/*fb*); do + BLACKLIST="$BLACKLIST $(/usr/bin/basename $x .ko)" +done +# delete modules that are blacklisted +BLACKLIST="${BLACKLIST} $(echo ${disablemodules} | sed 's|-|_|g' | sed 's|,| |g')" +for i in $BLACKLIST; do + [ "$i" ] || continue + sed -i -e "/^$i$/d" /tmp/moduleslist + # since '-' and '_' are interchangeable, we have to cover both + if [ "`echo $i | grep '-'`" ]; then + i="`echo $i | sed 's|-|_|g'`" + sed -i -e "/^$i$/d" /tmp/moduleslist + elif [ "`echo $i | grep '_'`" ]; then + i="`echo $i | sed 's|_|-|g'`" + sed -i -e "/^$i$/d" /tmp/moduleslist + fi +done + +listmods() { + key=$1 ; shift + ex= + while [ "$1" ]; do + [ "$ex" ] && ex="$ex|$1" || ex="$1" + shift + done + for ln in `grep "$key" /tmp/modules-sorted | sed 's|^insmod ||g'`; do + if [ "$ex" ]; then + echo $ln | egrep -v "$ex" | sed -ne "s#^/.*/\(.*\)\.ko.*#\1#p" + else + echo $ln | sed -ne "s#^/.*/\(.*\)\.ko.*#\1#p" + fi + done +} +showlist() { + cat=$1 ; shift + [ $# -gt 0 ] || return + echo -n "$cat: " + for i in $*; do echo -n "$i "; done + echo "" +} + +showlist2() { + cat=$1 ; shift + [ $# -gt 0 ] || return + echo -n "$cat=" + for i in $*; do echo -n "$i "; done + echo "" +} + +showlist3() { + cat=$1 ; shift + [ $# -gt 0 ] || return + for i in $*; do echo -n "$i "; done + echo "" +} + +# starting different actions +while [ $# -gt 0 ]; do + case $1 in + -hooks-dir=*|--hooks-dir=*) + HOOKS_DIR="$(echo $1 | awk -F= '{print $2;}')" + ;; + --load-modules) + # load all detected pci modules + for i in `cat /tmp/moduleslist`; do + modprobe $i > /dev/null 2>&1 + done + ;; + + --unload-modules) + # load all detected pci modules + for i in `cat /tmp/moduleslist`; do + modprobe -r $i > /dev/null 2>&1 + done + ;; + + --show-modules) + showlist "AGP " `listmods agp/` + showlist "ACPI " `listmods acpi/` + showlist "IDE " `listmods ide/` + showlist "PATA " `listmods ata/pata` `listmods ata/ata_generic` + showlist "SCSI " `listmods scsi/` `listmods message/fusion/` `listmods drivers/block/ nbd pktcdvd sx8 floppy` + showlist "SATA " `listmods ata/ pata ata_generic` `listmods drivers/block/sx8` + showlist "USB " `listmods usb/ usb/input` + showlist "FW " `listmods firewire/` `listmods ieee1394/` + showlist "NET " `listmods net/ irda/` + showlist "INPUT " `listmods input/` `listmods hid/` + showlist "IRDA " `listmods irda/` + showlist "ISDN " `listmods isdn/` + showlist "PCMCIA " `listmods pcmcia/` + showlist "SOUND " `listmods sound/` + showlist "VIDEO " `listmods video/` + showlist "OTHER " `listmods modules/ agp/ acpi/ ide/ scsi/ message/fusion block/sx8 block/cciss block/cpqarray block/DAC960 ata/ usb/ ieee1394 net/ isdn/ input/ irda/ pcmcia/ sound/ video/ firewire/ hid/` + ;; + + --show-modules-order) + showlist "MODULES ORDER" `listmods modules/` + ;; + + --show-agp) showlist "AGP " `listmods agp/` ;; + --show-acpi) showlist "ACPI " `listmods acpi/` ;; + --show-ide) showlist "IDE " `listmods ide/` ;; + --show-pata) showlist "PATA " `listmods ata/pata` `listmods ata/ata_generic`;; + --show-scsi) showlist "SCSI " `listmods scsi/` `listmods message/fusion/` `listmods drivers/block/ nbd pktcdvd sx8 floppy`;; + --show-sata) showlist "SATA " `listmods ata/ pata ata_generic` `listmods drivers/block/sx8` ;; + --show-usb) showlist "USB " `listmods usb/ usb/input` ;; + --show-fw) showlist "FW " `listmods firewire/` `listmods ieee1394/` ;; + --show-net) showlist "NET " `listmods net/ irda/` ;; + --show-input) showlist "INPUT " `listmods input/` `listmods hid/` ;; + --show-irda) showlist "IRDA " `listmods irda/` ;; + --show-isdn) showlist "ISDN " `listmods isdn/` ;; + --show-pcmcia) showlist "PCMCIA " `listmods pcmcia/` ;; + --show-sound) showlist "SOUND " `listmods sound/` ;; + --show-video) showlist "VIDEO " `listmods video/` ;; + --show-other) showlist "OTHER " `listmods .ko agp/ acpi/ ide/ scsi/ message/fusion block/sx8 block/cciss block/cpqarray block/DAC960 ata/ usb/ ieee1394 net/ isdn/ input/ irda/ pcmcia/ sound/ video/ firewire/ hid/` ;; + --hostcontroller) showlist2 "MODULES" \"`listmods ide/pci` `listmods ata/pata` `listmods ata/ata_generic` `listmods scsi/ /sg.ko /st.ko sr_mod sd_mod` `listmods message/fusion/` `listmods drivers/block/ nbd pktcdvd sx8 floppy` `listmods ata/ pata ata_generic` `listmods drivers/block/sx8`\" | sed -e 's/"\ /"/g' -e 's/\ "/"/g' -e 's/\ \ /\ /g' + ;; + --net) if [ "$(showlist2 "MODULES" \(`listmods drivers/net/ irda ppp_generic slhc` `listmods drivers/usb/net/`\) | sed -e 's/(\ /(/g' -e 's/\ )/)/g' -e 's/\ \ /\ /g' | grep '8139cp')" ] ; then + if [ "$(dmesg | grep '"8139too"')" ]; then + MODULES_EXPORTED="$MODULES_EXPORTED $(listmods drivers/net/ irda ppp_generic slhc` `listmods drivers/usb/net/)" + showlist2 "MODULES" \($MODULES_EXPORTED\) | sed -e 's/8139cp//g' -e 's/(\ /(/g' -e 's/\ )/)/g' -e 's/\ \ /\ /g' + else + MODULES_EXPORTED="$MODULES_EXPORTED $(listmods drivers/net/ irda ppp_generic slhc` `listmods drivers/usb/net/)" + showlist2 "MODULES" \($MODULES_EXPORTED\) | sed -e 's/8139too//g' -e 's/(\ /(/g' -e 's/\ )/)/g' -e 's/\ \ /\ /g' + fi + else + MODULES_EXPORTED="$MODULES_EXPORTED $(listmods drivers/net/ irda ppp_generic slhc` `listmods drivers/usb/net/)" + showlist2 "MODULES" \($MODULES_EXPORTED\) | sed -e 's/(\ /(/g' -e 's/\ )/)/g' -e 's/\ \ /\ /g' + fi + ;; + --sound) MODULES_EXPORTED="$MODULES_EXPORTED $(listmods sound/)" + showlist2 "MODULES" \($MODULES_EXPORTED\) | sed -e 's/(\ /(/g' -e 's/\ )/)/g' -e 's/\ \ /\ /g' + ;; + --modules) showlist2 "MODULES" \(`listmods modules/`\) | sed -e 's/(\ /(/g' -e 's/\ )/)/g' -e 's/\ \ /\ /g' + ;; + --hooks) + if [ "$HOOKS_DIR" = "" ]; then + HOOKS_DIR="/lib/initcpio/install" + fi + START_HOOKS="base udev dsdt autodetect ide pata scsi sata usb fw pcmcia net raid raid-partitions usbinput keymap encrypt lvm2 filesystems" + # remove the ones that don't exist on the system + for i in ${START_HOOKS}; do + if ! [ -e "${HOOKS_DIR}/$i" ]; then + START_HOOKS=$(echo $START_HOOKS | sed -e "s/${i}\ //g") + fi + done + # ide/pata check + if [ "${IDE_LEGACY}" = "1" ]; then + START_HOOKS=$(echo $START_HOOKS | sed -e "s/pata//g") + else + START_HOOKS=$(echo $START_HOOKS | sed -e "s/ide//g") + fi + # usbinput, check for usbhid + if ! [ "$(cat /proc/modules | grep usbhid)" ]; then + START_HOOKS=$(echo $START_HOOKS | sed -e "s/usbinput//g") + fi + # keymap, check rc.conf for KEYMAP="us" + if [ "$(grep '^KEYMAP="us"' /etc/rc.conf)" ]; then + if ! [ "${KEYMAP}" = "1" ]; then + START_HOOKS=$(echo $START_HOOKS | sed -e "s/keymap//g") + fi + fi + ### TODO raid, check for presence of md devices in /dev + #if ! [ "$(ls /dev/md* > /dev/null 2>&1 )" ]; then + # START_HOOKS=$(echo $START_HOOKS | sed -e "s/raid//g") + #fi + if ! [ "$RAID" = "1" ] ; then + START_HOOKS=$(echo $START_HOOKS | sed -e "s/raid\ //g") + fi + if ! [ "$RAID_PARTITIONS" = "1" ] ; then + START_HOOKS=$(echo $START_HOOKS | sed -e "s/raid-partitions\ //g") + fi + ### TODO lvm2, encrypt check + # encrypt, check for presence of mapper/root + #if ! [ "$(ls /dev/mapper/root > /dev/null 2>&1 )" ]; then + # START_HOOKS=$(echo $START_HOOKS | sed -e "s/encrypt//g") + #fi + if ! [ "$ENCRYPT" = "1" ] ; then + START_HOOKS=$(echo $START_HOOKS | sed -e "s/encrypt//g") + fi + if ! [ "$LVM2" = "1" ]; then + START_HOOKS=$(echo $START_HOOKS | sed -e "s/lvm2//g") + fi + if ! [ "$USB" = "1" ]; then + START_HOOKS=$(echo $START_HOOKS | sed -e "s/usb\ //g") + fi + if ! [ "$FW" = "1" ]; then + START_HOOKS=$(echo $START_HOOKS | sed -e "s/fw//g") + fi + if ! [ "$PCMCIA" = "1" ]; then + START_HOOKS=$(echo $START_HOOKS | sed -e "s/pcmcia//g") + fi + if ! [ "$NFS" = "1" ]; then + START_HOOKS=$(echo $START_HOOKS | sed -e "s/net//g") + fi + if ! [ "$DSDT" = "1" ]; then + START_HOOKS=$(echo $START_HOOKS | sed -e "s/dsdt//g") + fi + echo "HOOKS=\"$START_HOOKS\"" | sed -e 's/"\ /"/g' -e 's/\ "/"/g' -e 's/\ \ /\ /g' + ;; + esac + shift +done + +# cleanup +rm /tmp/modules-plain +rm /tmp/modules-sorted +rm /tmp/modules-stripped +rm /tmp/moduleslist + +# vim: set ts=2 sw=2 noet: |