home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / share / initramfs-tools / hook-functions next >
Encoding:
Text File  |  2006-07-12  |  6.4 KB  |  260 lines

  1. # -*- shell-script -*-
  2.  
  3. catenate_cpiogz() {
  4.     # Sanity check
  5.     if [ ! -e "${1}" ]; then
  6.         echo "W:catenate_cpiogz: arg1='${1}' does not exist." >&2
  7.         return
  8.     fi
  9.  
  10.     cat "${1}" >>"${__TMPCPIOGZ}"
  11. }
  12.  
  13. force_load()
  14. {
  15.         manual_add_modules ${@}
  16.         echo "${@}" >>"${DESTDIR}/conf/modules"
  17. }
  18.  
  19. # Takes a file containing a list of modules to be added as an
  20. # argument, figures out dependancies, and adds them.
  21. #
  22. # Input file syntax:
  23. #
  24. #   # comment
  25. #   modprobe_module_name [args ...]
  26. #   [...]
  27. #
  28. add_modules_from_file()
  29. {
  30.     # Sanity check
  31.     if [ ! -e "${1}" ]; then
  32.         echo "W:add_modules_from_file: arg1='${1}' does not exist." >&2
  33.         return
  34.     fi
  35.  
  36.     sed -e '/^#/d' ${1} | while read module rest; do
  37.         force_load "${module}" "${rest}"
  38.     done
  39. }
  40.  
  41. manual_add_modules()
  42. {
  43.     for mam_x in $(modprobe --set-version="${version}" --show-depends "${1}" 2>/dev/null | awk '/^insmod/ { print $2 }'); do
  44.         # Prune duplicates
  45.         if [ -e "${DESTDIR}/${mam_x}" ]; then
  46.             continue
  47.         fi
  48.  
  49.         mkdir -p "${DESTDIR}/$(dirname "${mam_x}")"
  50.         ln -s "${mam_x}" "${DESTDIR}/$(dirname "${mam_x}")"
  51.         if [ -n "${verbose}" -a "${verbose}" = "y" ]; then
  52.             echo "Adding module ${mam_x}"
  53.         fi
  54.     done
  55. }
  56.  
  57. # $1 is source
  58. # $2 is relative destination
  59. copy_exec() {
  60.     final_destination=${DESTDIR}/${2}/`basename ${1}`
  61.     if [ -L "$final_destination" ]; then
  62.         if ! [ `readlink ${final_destination}` = "${1}" ]; then
  63.             echo "W:copy_exec: Not copying ${1} to \$DESTDIR${2}/`basename ${1}`, which is already a copy of `readlink ${final_destination}`" >&2
  64.             return
  65.         fi
  66.     else
  67.         ln -s ${1} ${DESTDIR}/${2}
  68.     fi
  69.  
  70.     # Copy the dependant libraries
  71.     for x in $(ldd ${1} 2>/dev/null | sed -e '
  72.         /\//!d;
  73.         /linux-gate/d;
  74.         /=>/ {s/.*=>[[:blank:]]*\([^[:blank:]]*\).*/\1/};
  75.         s/[[:blank:]]*\([^[:blank:]]*\) (.*)/\1/' 2>/dev/null); do
  76.  
  77.         # Try to use non-optimised libraries where possible.
  78.         # We assume that all HWCAP libraries will be in tls.
  79.         nonoptlib=$(echo ${x} | sed -e 's#/lib/tls.*/\(lib.*\)#/lib/\1#')
  80.  
  81.         if [ -e ${nonoptlib} ]; then
  82.             x=${nonoptlib}
  83.         fi
  84.  
  85.         libname=$(basename ${x})
  86.         dirname=$(dirname ${x})
  87.  
  88.         mkdir -p ${DESTDIR}/${dirname}
  89.         if [ ! -e ${DESTDIR}/${dirname}/${libname} ]; then
  90.             ln -s ${x} ${DESTDIR}/${dirname}
  91.         fi
  92.     done
  93. }
  94.  
  95. # Copy entire subtrees to the initramfs
  96. copy_modules_dir()
  97. {
  98.     tmpdir_modbase="${DESTDIR}/lib/modules/${version}"
  99.     mkdir -p "$(dirname "${tmpdir_modbase}/${1}")"
  100.     cp -a "${MODULESDIR}/${1}" "${tmpdir_modbase}/${1}"
  101. }
  102.  
  103. dep_add_modules()
  104. {
  105.  
  106.     # Things that are too hard to autodetect.
  107.     for x in md raid0 raid1 raid5 raid6 ext2 ext3 isofs jfs nfs reiserfs xfs af_packet dm_mod; do
  108.         manual_add_modules ${x}
  109.     done
  110.  
  111.     for x in /sys/bus/pci/devices/*; do
  112.         if [ -e "${x}/modalias" ]; then
  113.             manual_add_modules $(cat "${x}/modalias")
  114.         fi
  115.     done
  116.  
  117.     for x in /sys/bus/usb/devices/*; do
  118.         if [ -e "${x}/modalias" ]; then
  119.             manual_add_modules $(cat "${x}/modalias")
  120.         fi
  121.     done
  122.  
  123.     if [ -e /proc/ide ]; then
  124.         for x in ide-generic ide-disk ide-cd; do
  125.             manual_add_modules "${x}"
  126.         done
  127.     fi
  128.  
  129.     if [ -e /sys/bus/scsi/devices/ ]; then
  130.         manual_add_modules sd_mod
  131.     fi
  132.  
  133.     if [ -e /sys/bus/i2o/devices/ ]; then
  134.         manual_add_modules i2o_block
  135.     fi
  136. }
  137.  
  138.  
  139. # The modules "most" classes added per default to the initramfs
  140. auto_add_modules()
  141. {
  142.     case "$1" in
  143.     base)
  144.         for x in ehci-hcd ohci-hcd uhci-hcd usbhid usb-storage ext2 \
  145.         ext3 isofs jfs nfs reiserfs xfs af_packet atkbd i8042; do
  146.             manual_add_modules "${x}"
  147.         done
  148.     ;;
  149.     net)
  150.         for x in 3c59x 8139cp 8139too 8390 b44 bmac bnx2 defxx \
  151.         dl2k e1000 e100 epic100 eql fealnx famachi forcedeth \
  152.         hp100 mace mv643xx_eth natsemi ne2k-pci netconsole \
  153.         ns83820 pcnet32 r8169 s2io sis900 skge slhc starfire \
  154.         sundance sungem sungem_phy sunhme tg3 tlan de2104x \
  155.         de4x5 dmfe tulip winbond-840 xircom_cb xircom_tulip_cb \
  156.         typhon via-rhine via-velocity yellowfin; do
  157.             manual_add_modules "${x}"
  158.         done
  159.     ;;
  160.     ide)
  161.         for x in ide-cd ide-disk ide-generic aec62xx alim15x3 \
  162.         amd74xx atiixp atuuxo cmd64x cs5520 cs5530 cy82c693 \
  163.         generic hpt34x hpt366 it821x ns87415 opti621 pdc202xx_new \
  164.         pdc202xx_old piix rz1000 sc1200 serverworks siimage \
  165.         sis5513 slc82c105 slc90e66 triflex trm290 via82cxxx; do
  166.             manual_add_modules "${x}"
  167.         done
  168.     ;;
  169.     scsi)
  170.         for x in 3w-9xxx 3w-xxxx a100u2x aacraid advansys ahci \
  171.         aic79xx aic7xxx arcmsr ata_piix atari_scsi atp870u BusLogic \
  172.         cciss ch cpqarray dac960 dc395x dmx3191d dpt_i2o eata fdomain \
  173.         gdth ibmvscsic initio ipr ips isp1020 lpfc max_scsi mac53c94 \
  174.         megaraid megaraid_mbox megaraid_mm mesh mptfc mptscsih \
  175.         mptsas mptspi nsp32 osst qla1280 qla2100 qla2200 qla2300 \
  176.         qla2322 qla2xxx qla6312 qlogicfas408 qlogicfc sata_mv \
  177.         sata_nv sata_promise sata_qstor sata_sil sata_sis sata_svw \
  178.         sata_sx4 sata_uli sata_via sata_vsc scsi_mod \
  179.         scsi_transport_fc scsi_transport_iscsi scsi_transport_spi \
  180.         sd_mod sym53c8xx tmscsim zfcp; do
  181.             manual_add_modules "${x}"
  182.         done
  183.     ;;
  184.     ieee1394)
  185.         for x in ohci1394 sbp2; do
  186.             manual_add_modules "${x}"
  187.         done
  188.     ;;
  189.     i2o)
  190.         for x in i2o_block; do
  191.             manual_add_modules "${x}"
  192.         done
  193.     ;;
  194.     dasd)
  195.         for x in dasd_eckd_mod dasd_fba_mod; do
  196.             manual_add_modules "${x}"
  197.         done
  198.     ;;
  199.     *)
  200.         auto_add_modules base
  201.         auto_add_modules net
  202.         auto_add_modules ide
  203.         auto_add_modules scsi
  204.         auto_add_modules i2o
  205.         auto_add_modules dasd
  206.         auto_add_modules ieee1394
  207.     ;;
  208.     esac
  209. }
  210.  
  211. usage()
  212. {
  213.     cat >&2 << EOF
  214.  
  215. Usage: ${0} [OPTION]... <-o outfile> [version]
  216.  
  217. Options:
  218.   -d confdir  Specify an alternative configuration directory.
  219.   -k          Keep temporary directory used to make the image.
  220.   -o outfile  Write to outfile.
  221.   -r root     Override ROOT setting in mkinitrd.conf.
  222.  
  223. See mkinitramfs(8) for further details.
  224. EOF
  225.     exit 1
  226.  
  227. }
  228.  
  229. # minimal supported kernel version
  230. check_minkver()
  231. {
  232.     curversion=${1}
  233.     initdir=${2}
  234.     set_initlist
  235.     if [ -z ${initdir} ]; then
  236.         DPKG_ARCH=`dpkg --print-installation-architecture`
  237.         case ${DPKG_ARCH} in
  238.             ia64|hppa)
  239.                 minversion="2.6.15"
  240.             ;;
  241.             *)
  242.                 minversion="2.6.12"
  243.             ;;
  244.         esac
  245.         if dpkg --compare-versions "${curversion}" lt "${minversion}"; then
  246.             echo "W: kernel ${curversion} too old for initramfs on ${DPKG_ARCH}" >&2
  247.             echo "W: not generating requested initramfs for kernel ${curversion}" >&2
  248.             exit 2
  249.         fi
  250.     fi
  251.     [ -z ${initdir} ] || for cm_x in ${initlist}; do
  252.         tmp=$(eval echo $(grep ^MINKVER ${initdir}/${cm_x} | cut -d'=' -f2))
  253.         if dpkg --compare-versions "${curversion}" lt "${tmp}"; then
  254.             echo "W: ${cm_x} hook script requires at least kernel version ${tmp}" >&2
  255.             echo "W: not generating requested initramfs for kernel ${curversion}" >&2
  256.             exit 2
  257.         fi
  258.     done
  259. }
  260.