#!/bin/bash # # Rebuilds initramfs without unnecessary modules # # arguments consist of "no", "do" or "un" followed by # "crypt", "ide", "net", "sata", "pata", "scsi", "usb" # # e.g. my_modules doide nocrypt unusb # # #--------------------------------------------------------------- MYARCH=$( uname -m ) if [ "${MYARCH}" = "i686" ] then MYARCH="x86" fi DIR=/usr/share/genkernel/arch source ${DIR}/${MYARCH}/modules_load MY_MODULES_FILE=${DIR}/${MYARCH}/my_modules_load rm -f ${MY_MODULES_FILE} MYMODULES=$(pcimodules| sort -u) #echo $MYMODULES # # 0 = no - use no modules at all # 1 = do - use only modules for this PC # 2 = un - use default modules in modules_load # # defaults: ATARAID=2 CRYPT=0 DMRAID=2 EVMS=2 FIREWIRE=0 FS=2 IDE=0 LVM=2 MDADM=2 NET=0 SD=2 PATA=2 SATA=2 SCSI=2 USB=0 wAITSCAN=2 echo "`date`:$*" for i in $* do IMP=$( echo $i | cut -c1-2 ) if [ "${IMP}" = "do" -o "${IMP}" = "no" -o "${IMP}" = "un" ] then MOD=$( echo $i | cut -c3- ) if [ "${MOD}" = "ataraid" ] then if [ "${IMP}" = "do" ] then ATARAID=1 elif [ "${IMP}" = "un" ] then ATARAID=2 else ATARAID=0 fi elif [ "${MOD}" = "crypt" ] then if [ "${IMP}" = "do" ] then CRYPT=1 elif [ "${IMP}" = "un" ] then CRYPT=2 else CRYPT=0 fi elif [ "${MOD}" = "dmraid" ] then if [ "${IMP}" = "do" ] then DMRAID=1 elif [ "${IMP}" = "un" ] then DMRAID=2 else DMRAID=0 fi elif [ "${MOD}" = "evms" ] then if [ "${IMP}" = "do" ] then EVMS=1 elif [ "${IMP}" = "un" ] then EVMS=2 else EVMS=0 fi elif [ "${MOD}" = "firewire" ] then if [ "${IMP}" = "do" ] then FIREWIRE=1 elif [ "${IMP}" = "un" ] then FIREWIRE=2 else FIREWIRE=0 fi elif [ "${MOD}" = "fs" ] then if [ "${IMP}" = "do" ] then FS=1 elif [ "${IMP}" = "un" ] then FS=2 else FS=0 fi elif [ "${MOD}" = "ide" ] then if [ "${IMP}" = "do" ] then IDE=1 elif [ "${IMP}" = "un" ] then IDE=2 else IDE=0 fi elif [ "${MOD}" = "lvm" ] then if [ "${IMP}" = "do" ] then LVM=1 elif [ "${IMP}" = "un" ] then LVM=2 else LVM=0 fi elif [ "${MOD}" = "mdadm" ] then if [ "${IMP}" = "do" ] then MDADM=1 elif [ "${IMP}" = "un" ] then MDADM=2 else MDADM=0 fi elif [ "${MOD}" = "net" ] then if [ "${IMP}" = "do" ] then NET=1 elif [ "${IMP}" = "un" ] then NET=2 else NET=0 fi elif [ "${MOD}" = "pata" ] then if [ "${IMP}" = "do" ] then PATA=1 elif [ "${IMP}" = "un" ] then PATA=2 else PATA=0 fi elif [ "${MOD}" = "sata" ] then if [ "${IMP}" = "do" ] then SATA=1 elif [ "${IMP}" = "un" ] then SATA=2 else SATA=0 fi elif [ "${MOD}" = "scsi" ] then if [ "${IMP}" = "do" ] then SCSI=1 elif [ "${IMP}" = "un" ] then SCSI=2 else SCSI=0 fi elif [ "${MOD}" = "usb" ] then if [ "${IMP}" = "do" ] then USB=1 elif [ "${IMP}" = "un" ] then USB=2 else USB=0 fi else echo "Illegal argument $i" exit 1 fi else echo "Illegal argument $i" exit 1 fi done #echo "CRYPT=${CRYPT}" #-------------------------------------------------------------- scan_my_modules() { echo "`date`:Get $1 modules" shift LIST= local i local j for i in ${MYMODULES} do for j in ${*} do #echo "i=$i j=$j" local k=$( echo $i | sed "s/-/_/g" ) local m=$( echo $j | sed "s/-/_/g" ) #echo "m=$m k=$k" if [ "$m" = "$k" ] then LIST="${LIST} $i" break fi done done } #-------------------------------------------------------------- # ATARAID # #echo "CRYPT=${CRYPT}" if [ ${ATARAID} -eq 0 ] then MY_MODULES_ATARAID= elif [ ${ATARAID} -eq 1 ] then MY_MODULES_ATARAID="${MODULES_ATARAID}" fi #-------------------------------------------------------------- # CRYPT # if [ ${CRYPT} -eq 0 ] then MY_MODULES_CRYPT= elif [ ${CRYPT} -eq 1 ] then MY_MODULES_CRYPT="dm-mod dm-crypt loop ablkcipher aes blkcipher \ blowfish cbc cast5 crypto_algapi crypto_hash crypto_null cryptomgr des hmac \ md4 md5 serpent sha1 sha256 sha512" fi #-------------------------------------------------------------- # DMRAID # if [ ${DMRAID} -eq 0 ] then MY_MODULES_DMRAID= elif [ ${CRYPT} -eq 1 ] then MY_MODULES_DMRAID="${MODULES_DMRAID}" fi #-------------------------------------------------------------- # EVMS # if [ ${EVMS} -eq 0 ] then MY_MODULES_EVMS= elif [ ${EVMS} -eq 1 ] then MY_MODULES_EVMS="${MODULES_EVMS}" fi #-------------------------------------------------------------- # FS # if [ ${FS} -eq 0 ] then MY_MODULES_FS= elif [ ${FS} -eq 1 ] then MY_MODULES_FS="${MODULES_FS}" fi #-------------------------------------------------------------- # IDE # if [ ${IDE} -eq 0 ] then MY_MODULES_IDE= elif [ ${IDE} -eq 1 ] then scan_my_modules IDE ${MODULES_IDE} if [ -n "${LIST}" ] then MY_MODULES_IDE="${LIST}" else MY_MODULES_IDE= fi fi #-------------------------------------------------------------- # LVM # if [ ${LVM} -eq 0 ] then MY_MODULES_LVM= elif [ ${LVM} -eq 1 ] then MY_MODULES_LVM="${MODULES_LVM}" fi #-------------------------------------------------------------- # DMRAID # if [ ${DMRAID} -eq 0 ] then MY_MODULES_DMRAID= elif [ ${DMRAID} -eq 1 ] then MY_MODULES_DMRAID="${MODULES_DMRAID}" fi #-------------------------------------------------------------- # network drivers # if [ ${NET} -eq 0 ] then MY_MODULES_NET= elif [ ${NET} -eq 1 ] then scan_my_modules NET ${MODULES_NET} if [ -n "${LIST}" ] then MY_MODULES_NET="${LIST}" else MY_MODULES_NET= fi fi #-------------------------------------------------------------- # PATA # MY_MODULES_SD= MY_MODULES_WAITSCAN= if [ ${PATA} -eq 0 ] then MY_MODULES_PATA= elif [ ${PATA} -eq 1 ] then scan_my_modules PATA ${MODULES_PATA} if [ -n "${LIST}" ] then MY_MODULES_SD="${MODULES_SD}" MY_MODULES_PATA="${LIST}" MY_MODULES_WAITSCAN="${MODULES_WAITSCAN}" else MY_MODULES_PATA= fi fi #-------------------------------------------------------------- # SATA # if [ ${SATA} -eq 0 ] then MY_MODULES_SATA= elif [ ${SATA} -eq 1 ] then scan_my_modules SATA ${MODULES_SATA} if [ -n "${LIST}" ] then MY_MODULES_SD="${MODULES_SD}" MY_MODULES_SATA="${LIST}" MY_MODULES_WAITSCAN="${MODULES_WAITSCAN}" else MY_MODULES_SATA= fi fi #-------------------------------------------------------------- # SCSI # if [ ${SCSI} -eq 0 ] then MY_MODULES_SCSI= elif [ ${SCSI} -eq 1 ] then scan_my_modules SCSI ${MODULES_SCSI} if [ -n "${LIST}" ] then MY_MODULES_SD="${MODULES_SD}" MY_MODULES_SCSI="${LIST}" MY_MODULES_WAITSCAN="${MODULES_WAITSCAN}" else MY_MODULES_SCSI= fi fi #-------------------------------------------------------------- # USB # if [ ${USB} -eq 0 ] then MY_MODULES_USB= elif [ ${USB} -eq 1 ] then scan_my_modules USB ${MODULES_USB} if [ -n "${LIST}" ] then MY_MODULES_SD="${MODULES_SD}" MY_MODULES_USB="${LIST}" MY_MODULES_WAITSCAN="${MODULES_WAITSCAN}" else MY_MODULES_USB= fi fi #-------------------------------------------------------------- if [ ${ATARAID} -lt 2 ] then echo "MODULES_ATARAID=\"${MY_MODULES_ATARAID}\"" >> ${MY_MODULES_FILE} fi if [ ${CRYPT} -lt 2 ] then echo "MODULES_CRYPT=\"${MY_MODULES_CRYPT}\"" >> ${MY_MODULES_FILE} fi if [ ${DMRAID} -lt 2 ] then echo "MODULES_DMRAID=\"${MY_MODULES_DMRAID}\"" >> ${MY_MODULES_FILE} fi if [ ${EVMS} -lt 2 ] then echo "MODULES_EVMS=\"${MY_MODULES_EVMS}\"" >> ${MY_MODULES_FILE} fi if [ ${FS} -lt 2 ] then echo "MODULES_FS=\"${MY_MODULES_FS}\"" >> ${MY_MODULES_FILE} fi if [ ${IDE} -lt 2 ] then echo "MODULES_IDE=\"${MY_MODULES_IDE}\"" >> ${MY_MODULES_FILE} fi if [ ${LVM} -lt 2 ] then echo "MODULES_LVM=\"${MY_MODULES_LVM}\"" >> ${MY_MODULES_FILE} fi if [ ${MDADM} -lt 2 ] then echo "MODULES_MDADM=\"${MY_MODULES_MDADM}\"" >> ${MY_MODULES_FILE} fi if [ ${NET} -lt 2 ] then echo "MODULES_NET=\"${MY_MODULES_NET}\"" >> ${MY_MODULES_FILE} fi echo "MODULES_SD=\"${MY_MODULES_SD}\"" >> ${MY_MODULES_FILE} if [ ${PATA} -lt 2 ] then echo "MODULES_PATA=\"${MY_MODULES_PATA}\"" >> ${MY_MODULES_FILE} fi if [ ${SATA} -lt 2 ] then echo "MODULES_SATA=\"${MY_MODULES_SATA}\"" >> ${MY_MODULES_FILE} fi if [ ${SCSI} -lt 2 ] then echo "MODULES_SCSI=\"${MY_MODULES_SCSI}\"" >> ${MY_MODULES_FILE} fi if [ ${USB} -lt 2 ] then echo "MODULES_USB=\"${MY_MODULES_USB}\"" >> ${MY_MODULES_FILE} fi echo "MODULES_WAITSCAN=\"${MY_MODULES_WAITSCAN}\"" >> ${MY_MODULES_FILE} echo "${MY_MODULES_FILE}" cat ${MY_MODULES_FILE} exit 0