We conditionally, but naively, add modules in some of our install hooks, but the kernel may not have these. Note that these modules can fail silently by detecting a '?' suffix on the module name. In conjunction with this, the add_module function now takes a flag, -t or --try, which will ignore module not found errors from modinfo. The config file will also support this syntax. Signed-off-by: Dave Reisner <dreisner@archlinux.org> --- functions | 20 ++++++++++++++++---- install/base | 2 +- install/fw | 2 +- install/ide | 2 +- install/pata | 2 +- install/pcmcia | 5 ++--- install/sata | 2 +- install/scsi | 2 +- install/usb | 4 +++- install/usbinput | 4 +--- 10 files changed, 28 insertions(+), 17 deletions(-) diff --git a/functions b/functions index 3c0cd89..c7e167e 100644 --- a/functions +++ b/functions @@ -137,6 +137,13 @@ add_module() { # $1: module name local module path dep deps field value + local -i ign_errors=0 + + if [[ $1 = -@(t|-try) ]]; then + ign_errors=1 + shift + fi + module=${1%.ko*} # skip expensive stuff if this module has already been added @@ -162,6 +169,7 @@ add_module() { done < <(modinfo -b "$BASEDIR" -k "$KERNELVERSION" -0 "$module" 2>/dev/null) if [[ -z $path ]]; then + (( ign_errors )) && return 0 error "module not found: \`%s'" "$module" return 1 fi @@ -173,9 +181,9 @@ add_module() { # explicit module depends case "$module" in - fat) add_module "nls_cp437" ;; - ocfs2) add_module "configfs" ;; - libcrc32c) add_module "crc32c"; add_module "crc32c_intel" ;; + fat) add_module --try "nls_cp437" ;; + ocfs2) add_module --try "configfs" ;; + libcrc32c) add_module --try "crc32c"; add_module --try "crc32c_intel" ;; esac } @@ -291,7 +299,11 @@ parse_hook() { local item for item in $MODULES; do - add_module "$item" + if [[ ${item:(-1)} = '?' ]]; then + try=--try + item=${item%\?} + fi + add_module $try "$item" done for item in $BINARIES; do diff --git a/install/base b/install/base index b4f23d5..e85551c 100644 --- a/install/base +++ b/install/base @@ -24,7 +24,7 @@ build() { read -r -a hooks <<< "$HOOKS" { - (( ${#modules[*]} )) && printf 'MODULES="%s"\n' "${modules[*]}" + (( ${#modules[*]} )) && printf 'MODULES="%s"\n' "${modules[*]%\?}" (( ${#hooks[*]} )) && printf 'HOOKS="%s"\n' "${hooks[*]}" } >"$BUILDROOT/config" ) diff --git a/install/fw b/install/fw index 94e70d1..f624de0 100644 --- a/install/fw +++ b/install/fw @@ -3,7 +3,7 @@ build() { MODULES=$(checked_modules "/drivers/firewire/") - [[ $MODULES ]] && MODULES+=" firewire-sbp2 sd_mod sr_mod" + [[ $MODULES ]] && MODULES+=" firewire-sbp2? sd_mod? sr_mod?" } help() { diff --git a/install/ide b/install/ide index 9443dd3..a8d9e97 100644 --- a/install/ide +++ b/install/ide @@ -3,7 +3,7 @@ build() { MODULES="$(checked_modules "/ide/" | grep -v "legacy")" - [[ $MODULES ]] && MODULES+=" ide-gd_mod" + [[ $MODULES ]] && MODULES+=" ide-gd_mod?" } help() { diff --git a/install/pata b/install/pata index c51356e..76f268c 100644 --- a/install/pata +++ b/install/pata @@ -5,7 +5,7 @@ build() { MODULES+=" $(checked_modules "$filter")" done - [[ $MODULES ]] && MODULES+=" sd_mod" + [[ $MODULES ]] && MODULES+=" sd_mod?" } help() { diff --git a/install/pcmcia b/install/pcmcia index b390497..2e9ac9a 100644 --- a/install/pcmcia +++ b/install/pcmcia @@ -4,9 +4,8 @@ build() { FILES="/etc/pcmcia/config.opts" MODULES=" $(checked_modules '/drivers/pcmcia/' | grep -ve 'sound' -e 'net') $(checked_modules '/ide/legacy')" - if [[ $MODULES ]]; then - MODULES+=" sd_mod" - fi + [[ $MODULES ]] MODULES+=" sd_mod?" + add_binary "/lib/udev/pcmcia-socket-startup" add_binary "/lib/udev/pcmcia-check-broken-cis" add_file "/lib/udev/rules.d/60-pcmcia.rules" diff --git a/install/sata b/install/sata index 39fe805..c9b67c3 100644 --- a/install/sata +++ b/install/sata @@ -6,7 +6,7 @@ build() { MODULES+=" $(checked_modules "$filter")" done - [[ $MODULES ]] && MODULES+=" sd_mod" + [[ $MODULES ]] && MODULES+=" sd_mod?" } help() { diff --git a/install/scsi b/install/scsi index fa9e5d9..4c2abc5 100644 --- a/install/scsi +++ b/install/scsi @@ -6,7 +6,7 @@ build(){ $(checked_modules "/block/" | grep -E '(cciss|cpqarray|DAC960)') $(checked_modules "/fusion/")" - [[ $MODULES ]] && MODULES+=" sd_mod" + [[ $MODULES ]] && MODULES+=" sd_mod?" } help() { diff --git a/install/usb b/install/usb index 61020ab..fcb2a47 100644 --- a/install/usb +++ b/install/usb @@ -1,10 +1,12 @@ #!/bin/bash build() { + local module= + MODULES="$(checked_modules "/usb/host" | grep -ve "_cs" -e "sl811_hcd" -e "isp116x_hcd")" if [[ $MODULES ]]; then - MODULES+=" usb_storage sd_mod sr_mod" + MODULES+=" usb_storage? sd_mod? sr_mod?" MODULES+=" $(checked_modules "drivers/usb/storage/ums-*")" fi } diff --git a/install/usbinput b/install/usbinput index aa4e1a6..f89d0bd 100644 --- a/install/usbinput +++ b/install/usbinput @@ -2,9 +2,7 @@ build() { MODULES=" $(checked_modules "/usb/host" | grep -ve "_cs" -e "sl811_hcd" -e "isp116x_hcd")" - MODULES+=" $(all_modules "/hid/hid-")" - - [[ $MODULES ]] && MODULES+=" usbhid" + MODULES+=" $(all_modules "/hid/hid-") usbhid?" } help() { -- 1.7.6.4