# -*- shell-script -*- catenate_cpiogz() { # Sanity check if [ ! -e "${1}" ]; then echo "W:catenate_cpiogz: arg1='${1}' does not exist." >&2 return fi cat "${1}" >>"${__TMPCPIOGZ}" } force_load() { manual_add_modules ${@} echo "${@}" >>"${DESTDIR}/conf/modules" } # Takes a file containing a list of modules to be added as an # argument, figures out dependancies, and adds them. # # Input file syntax: # # # comment # modprobe_module_name [args ...] # [...] # add_modules_from_file() { # Sanity check if [ ! -e "${1}" ]; then echo "W:add_modules_from_file: arg1='${1}' does not exist." >&2 return fi sed -e '/^#/d' ${1} | while read module rest; do force_load "${module}" "${rest}" done } manual_add_modules() { for mam_x in $(modprobe --set-version="${version}" --show-depends "${1}" 2>/dev/null | awk '/^insmod/ { print $2 }'); do # Prune duplicates if [ -e "${DESTDIR}/${mam_x}" ]; then continue fi mkdir -p "${DESTDIR}/$(dirname "${mam_x}")" ln -s "${mam_x}" "${DESTDIR}/$(dirname "${mam_x}")" if [ -n "${verbose}" -a "${verbose}" = "y" ]; then echo "Adding module ${mam_x}" fi done } # $1 is source # $2 is relative destination copy_exec() { final_destination=${DESTDIR}/${2}/`basename ${1}` if [ -L "$final_destination" ]; then if ! [ `readlink ${final_destination}` = "${1}" ]; then echo "W:copy_exec: Not copying ${1} to \$DESTDIR${2}/`basename ${1}`, which is already a copy of `readlink ${final_destination}`" >&2 return fi else ln -s ${1} ${DESTDIR}/${2} fi # Copy the dependant libraries for x in $(ldd ${1} 2>/dev/null | sed -e ' /\//!d; /linux-gate/d; /=>/ {s/.*=>[[:blank:]]*\([^[:blank:]]*\).*/\1/}; s/[[:blank:]]*\([^[:blank:]]*\) (.*)/\1/' 2>/dev/null); do # Try to use non-optimised libraries where possible. # We assume that all HWCAP libraries will be in tls. nonoptlib=$(echo ${x} | sed -e 's#/lib/tls.*/\(lib.*\)#/lib/\1#') if [ -e ${nonoptlib} ]; then x=${nonoptlib} fi libname=$(basename ${x}) dirname=$(dirname ${x}) mkdir -p ${DESTDIR}/${dirname} if [ ! -e ${DESTDIR}/${dirname}/${libname} ]; then ln -s ${x} ${DESTDIR}/${dirname} fi done } # Copy entire subtrees to the initramfs copy_modules_dir() { tmpdir_modbase="${DESTDIR}/lib/modules/${version}" mkdir -p "$(dirname "${tmpdir_modbase}/${1}")" cp -a "${MODULESDIR}/${1}" "${tmpdir_modbase}/${1}" } dep_add_modules() { # Things that are too hard to autodetect. for x in ext2 ext3 isofs jfs nfs reiserfs xfs af_packet; do manual_add_modules "${x}" done for x in /sys/bus/pci/devices/*; do if [ -e "${x}/modalias" ]; then manual_add_modules $(cat "${x}/modalias") fi done for x in /sys/bus/usb/devices/*; do if [ -e "${x}/modalias" ]; then manual_add_modules $(cat "${x}/modalias") fi done if [ -e /proc/ide ]; then for x in ide-generic ide-disk ide-cd; do manual_add_modules "${x}" done fi if [ -e /sys/bus/scsi/devices/ ]; then manual_add_modules sd_mod fi if [ -e /sys/bus/i2o/devices/ ]; then manual_add_modules i2o_block fi } # The modules "most" classes added per default to the initramfs auto_add_modules() { case "$1" in base) for x in ehci-hcd ohci-hcd uhci-hcd usbhid usb-storage ext2 \ ext3 isofs jfs nfs reiserfs xfs af_packet atkbd i8042; do manual_add_modules "${x}" done ;; net) for x in 3c59x 8139cp 8139too 8390 b44 bmac bnx2 defxx \ dl2k e1000 e100 epic100 eql fealnx famachi forcedeth \ hp100 mace mv643xx_eth natsemi ne2k-pci netconsole \ ns83820 pcnet32 r8169 s2io sis900 skge slhc starfire \ sundance sungem sungem_phy sunhme tg3 tlan de2104x \ de4x5 dmfe tulip winbond-840 xircom_cb xircom_tulip_cb \ typhon via-rhine via-velocity yellowfin; do manual_add_modules "${x}" done ;; ide) for x in ide-cd ide-disk ide-generic aec62xx alim15x3 \ amd74xx atiixp atuuxo cmd64x cs5520 cs5530 cy82c693 \ generic hpt34x hpt366 it821x ns87415 opti621 pdc202xx_new \ pdc202xx_old piix rz1000 sc1200 serverworks siimage \ sis5513 slc82c105 slc90e66 triflex trm290 via82cxxx; do manual_add_modules "${x}" done ;; scsi) for x in 3w-9xxx 3w-xxxx a100u2x aacraid advansys ahci \ aic79xx aic7xxx arcmsr ata_piix atari_scsi atp870u BusLogic \ cciss ch cpqarray dac960 dc395x dmx3191d dpt_i2o eata fdomain \ gdth ibmvscsic initio ipr ips isp1020 lpfc max_scsi mac53c94 \ megaraid megaraid_mbox megaraid_mm mesh mptfc mptscsih \ mptsas mptspi nsp32 osst qla1280 qla2100 qla2200 qla2300 \ qla2322 qla2xxx qla6312 qlogicfas408 qlogicfc sata_mv \ sata_nv sata_promise sata_qstor sata_sil sata_sis sata_svw \ sata_sx4 sata_uli sata_via sata_vsc scsi_mod \ scsi_transport_fc scsi_transport_iscsi scsi_transport_spi \ sd_mod sym53c8xx tmscsim zfcp; do manual_add_modules "${x}" done ;; ieee1394) for x in ohci1394 sbp2; do manual_add_modules "${x}" done ;; i2o) for x in i2o_block; do manual_add_modules "${x}" done ;; dasd) for x in dasd_eckd_mod dasd_fba_mod; do manual_add_modules "${x}" done ;; *) auto_add_modules base auto_add_modules net auto_add_modules ide auto_add_modules scsi auto_add_modules i2o auto_add_modules dasd auto_add_modules ieee1394 ;; esac } usage() { cat >&2 << EOF Usage: ${0} [OPTION]... <-o outfile> [version] Options: -d confdir Specify an alternative configuration directory. -k Keep temporary directory used to make the image. -o outfile Write to outfile. -r root Override ROOT setting in mkinitrd.conf. See mkinitramfs(8) for further details. EOF exit 1 } # minimal supported kernel version check_minkver() { curversion=${1} initdir=${2} set_initlist if [ -z ${initdir} ]; then DPKG_ARCH=`dpkg --print-installation-architecture` case ${DPKG_ARCH} in ia64|hppa) minversion="2.6.15" ;; *) minversion="2.6.12" ;; esac if dpkg --compare-versions "${curversion}" lt "${minversion}"; then echo "W: kernerl ${curversion} too old for initramfs on ${DPKG_ARCH}" >&2 echo "W: not generating requested initramfs for kernel ${curversion}" >&2 exit 2 fi fi [ -z ${initdir} ] || for cm_x in ${initlist}; do tmp=$(eval echo $(grep ^MINKVER ${initdir}/${cm_x} | cut -d'=' -f2)) if dpkg --compare-versions "${curversion}" lt "${tmp}"; then echo "W: ${cm_x} hook script requires at least kernel version ${tmp}" >&2 echo "W: not generating requested initramfs for kernel ${curversion}" >&2 exit 2 fi done }