Magellan Linux

Diff of /trunk/mkinitrd/mkinitrd.sh

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 293 by niro, Sat Dec 3 19:52:07 2005 UTC revision 703 by niro, Mon Mar 31 13:50:09 2008 UTC
# Line 1  Line 1 
1  #!/bin/bash  #!/bin/bash
2  # $Header: /home/cvsd/magellan-cvs/magellan-src/mkinitrd/mkinitrd.sh,v 1.4 2005-12-03 19:52:07 niro Exp $  # $Header: /home/cvsd/magellan-cvs/magellan-src/mkinitrd/mkinitrd.sh,v 1.15 2008-03-31 13:48:24 niro Exp $
3    
4  # mkinitrd  # mkinitrd
5  #  #
# Line 38  VERSION=5.0.8 Line 38  VERSION=5.0.8
38  PROBE="yes"  PROBE="yes"
39  MODULES=""  MODULES=""
40  PREMODS=""  PREMODS=""
41    NOSTRIP=false
42    
43  [ -e /etc/conf.d/mkinitrd ] && . /etc/conf.d/mkinitrd  [ -e /etc/conf.d/mkinitrd ] && . /etc/conf.d/mkinitrd
44    
# Line 55  builtins="" Line 56  builtins=""
56  modulefile=/etc/modules.conf  modulefile=/etc/modules.conf
57  rc=0  rc=0
58    
59  IMAGESIZE=8000  IMAGESIZE=4000
60  PRESCSIMODS="sd_mod"  PRESCSIMODS="sd_mod"
61  fstab="/etc/fstab"  fstab="/etc/fstab"
62    
# Line 73  usage() Line 74  usage()
74   echo "       [--force-ide-probe] [--force-scsi-probe | --omit-scsi-modules]"   echo "       [--force-ide-probe] [--force-scsi-probe | --omit-scsi-modules]"
75   echo "       [--image-version] [--force-scsi-probe | --omit-raid-modules]"   echo "       [--image-version] [--force-scsi-probe | --omit-raid-modules]"
76   echo "       [--with=<module>] [--force-lvm-probe | --omit-lvm-modules]"   echo "       [--with=<module>] [--force-lvm-probe | --omit-lvm-modules]"
77   echo "       [--builtin=<module>] "   echo "       [--builtin=<module>] [--initramfs | --loopback] [--no-strip]"
78   echo "       [--fstab=<fstab>] [--nocompress] <initrd-image> <kernel-version>"   echo "       [--fstab=<fstab>] [--nocompress] <initrd-image> <kernel-version>"
79   echo   echo
80   echo "       (ex: $(basename $0) /boot/initrd-2.2.5-15.img 2.2.5-15)"   echo "       (ex: $(basename $0) /boot/initrd-2.2.5-15.img 2.2.5-15)"
# Line 391  while [ $# -gt 0 ]; do Line 392  while [ $# -gt 0 ]; do
392   --allow-missing) allowmissing=yes ;;   --allow-missing) allowmissing=yes ;;
393   --noresume) noresume=1 ;;   --noresume) noresume=1 ;;
394   --help) usage -n ;;   --help) usage -n ;;
395     --initramfs) IMAGE_TYPE=initramfs ;;
396     --loopback) IMAGE_TYPE=loopback ;;
397     --no-strip) NOSTRIP=true ;;
398   *)   *)
399   if [ -z "${target}" ]   if [ -z "${target}" ]
400   then   then
# Line 407  while [ $# -gt 0 ]; do Line 411  while [ $# -gt 0 ]; do
411   shift   shift
412  done  done
413    
414    # enforce initramfs method as default
415    [[ -z ${IMAGE_TYPE} ]] && IMAGE_TYPE=initramfs
416    
417  if [ -z "${target}" -o -z "${kernel}" ]  if [ -z "${target}" -o -z "${kernel}" ]
418  then  then
419   usage   usage
# Line 445  fi Line 452  fi
452  ##############################  ##############################
453  ####### get modules ##########  ####### get modules ##########
454    
455  echo "Creating initramfs"  echo "Creating ${IMAGE_TYPE} initrd image"
456  modulefile=/etc/modprobe.conf  modulefile=/etc/modprobe.conf
457    
458  for n in ${PREMODS}  for n in ${PREMODS}
# Line 642  echo "Using modules:${MODULES}" Line 649  echo "Using modules:${MODULES}"
649    
650    
651  # create basic filesystem layout  # create basic filesystem layout
652  install -d ${DEST}/{bin,dev,etc,lib,loopfs,proc,sys,sysroot} || die  install -d ${DEST}/{bin,dev,etc,lib,loopfs,proc,sbin,sys,sysroot} || die
653    
654  # install busybox  # install busybox
655    echo "$(which busybox.mkinitrd)"
656  install -m0755 $(which busybox.mkinitrd) ${DEST}/bin/busybox || die  install -m0755 $(which busybox.mkinitrd) ${DEST}/bin/busybox || die
657  for i in '[' ash basename cat cut chroot clear cp dirname echo env false find \  for i in '[' ash basename cat cut clear cp dirname echo env false find \
658   grep gunzip gzip ln ls loadkmap losetup mkdir mknod modprobe more mount mv \   grep gunzip gzip ln ls loadkmap mkdir mknod more mount mv \
659   ps pwd rm rmdir sh sleep test touch true umount uname \   ps pwd rm rmdir sh sleep test touch true umount uname \
660   xargs yes chmod chown   xargs yes chmod chown
661  do  do
662     # use soft links from now on;
663     # hardlinks in initramfs apears to be broken on newer kernels
664     # -> "request module: runaway loop modprobe binfmt-0000"
665     # see: http://www.gossamer-threads.com/lists/linux/kernel/728042
666     ln -s /bin/busybox ${DEST}/bin/${i} || die "${i}"
667    done
668    
669    # sbin related
670    for i in chroot init losetup modprobe pivot_root
671    do
672   # static links   # static links
673   ln ${DEST}/bin/busybox ${DEST}/bin/${i} || die "${i}"   ln ${DEST}/bin/busybox ${DEST}/sbin/${i} || die "${i}"
674  done  done
675    
676  # install run-init  # install run-init
677  install -m0755 $(which run-init.mkinitrd) ${DEST}/bin/run-init || die  echo "$(which run-init.mkinitrd)"
678    install -m0755 $(which run-init.mkinitrd) ${DEST}/sbin/run-init || die
679    
680  # install insmod.static  # install insmod.static
681  install -m0755 $(which insmod.static) ${DEST}/bin/insmod || die  echo "$(which insmod.static)"
682    install -m0755 $(which insmod.static) ${DEST}/sbin/insmod || die
683    
684  # install udev  # install v86d for uvesafb support if installed
685  cp -a /etc/udev ${DEST}/etc || die  if which v86d &> /dev/null
686  install -m0755 /sbin/udev.static ${DEST}/bin/udev || die  then
687  install -m0755 /sbin/udevd.static ${DEST}/bin/udevd || die   echo "$(which insmod.static)"
688  install -m0755 /sbin/udevstart.static ${DEST}/bin/udevstart || die   install -m0755 $(which v86d) ${DEST}/sbin/v86d || die
689    fi
690    
691  # install lvm  # install lvm
692  if [ -n "${vg_list}" ]  if [ -n "${vg_list}" ]
693  then  then
694   inst /sbin/lvm.static "${DEST}/bin/lvm"   inst /sbin/lvm.static "${DEST}/sbin/lvm"
695   if [ -f /etc/lvm/lvm.conf ]   if [ -f /etc/lvm/lvm.conf ]
696   then   then
697   cp ${verbose} --parents /etc/lvm/lvm.conf ${DEST}/   cp ${verbose} --parents /etc/lvm/lvm.conf ${DEST}/
# Line 678  then Line 699  then
699  fi  fi
700    
701  # create some needed device nodes  # create some needed device nodes
702    mkdir ${DEST}/dev/pts || die
703    mkdir ${DEST}/dev/shm || die
704  mkdir ${DEST}/dev/mapper || die  mkdir ${DEST}/dev/mapper || die
705    mkdir ${DEST}/dev/misc || die
706    mkdir ${DEST}/dev/fb || die
707    mkdir ${DEST}/dev/vc || die
708  mknod ${DEST}/dev/console c 5 1 || die  mknod ${DEST}/dev/console c 5 1 || die
709  mknod ${DEST}/dev/null c 1 3 || die  mknod ${DEST}/dev/null c 1 3 || die
710  mknod ${DEST}/dev/ram b 1 1 || die  mknod ${DEST}/dev/ram b 1 1 || die
# Line 702  add_initrd '#!/bin/sh' Line 728  add_initrd '#!/bin/sh'
728  add_initrd 'mount -t proc proc /proc'  add_initrd 'mount -t proc proc /proc'
729  add_initrd 'mount -t sysfs sysfs /sys'  add_initrd 'mount -t sysfs sysfs /sys'
730    
731    [[ ${IMAGE_TYPE} = loopback ]] && add_initrd 'mount -t ramfs -o remount,rw /dev/ram /'
732    
733    # silencio
734    add_initrd 'echo 0 > /proc/sys/kernel/printk'
735    
736  add_initrd 'echo "-- Creating inital device nodes ..."'  add_initrd 'echo "-- Creating inital device nodes ..."'
737  add_initrd 'mount -o mode=0755 -t tmpfs udev /dev'  add_initrd 'mount -o exec,nosuid,mode=0755,size=10M -t tmpfs udev /dev'
738  add_initrd 'mkdir /dev/pts'  add_initrd 'mkdir /dev/pts'
739  add_initrd 'mkdir /dev/shm'  add_initrd 'mkdir /dev/shm'
740  add_initrd 'mkdir /dev/mapper'  add_initrd 'mkdir /dev/mapper'
741    add_initrd 'mkdir /dev/misc'
742    add_initrd 'mkdir /dev/fb'
743    add_initrd 'mkdir /dev/vc'
744  add_initrd 'mknod /dev/console c 5 1'  add_initrd 'mknod /dev/console c 5 1'
745  add_initrd 'mknod /dev/null c 1 3'  add_initrd 'mknod /dev/null c 1 3'
746  add_initrd 'mknod /dev/ram b 1 1'  add_initrd 'mknod /dev/ram b 1 1'
# Line 721  for (( i=64; i < 68; i++)); do Line 755  for (( i=64; i < 68; i++)); do
755   add_initrd "mknod /dev/ttyS$((${i} - 64)) c 4 ${i}"   add_initrd "mknod /dev/ttyS$((${i} - 64)) c 4 ${i}"
756  done  done
757    
758  add_initrd 'echo "-- Starting udevd ..."'  # some needed symlinks
 add_initrd 'ln -snf bin /sbin'  
 add_initrd '/sbin/udevstart'  
759  add_initrd 'ln -snf /proc/self/fd /dev/fd'  add_initrd 'ln -snf /proc/self/fd /dev/fd'
760  add_initrd 'ln -snf fd/0 /dev/stdin'  add_initrd 'ln -snf fd/0 /dev/stdin'
761  add_initrd 'ln -snf fd/1 /dev/stdout'  add_initrd 'ln -snf fd/1 /dev/stdout'
762  add_initrd 'ln -snf fd/2 /dev/stderr'  add_initrd 'ln -snf fd/2 /dev/stderr'
763  add_initrd 'ln -snf /proc/kcore /dev/core'  add_initrd 'ln -snf /proc/kcore /dev/core'
 add_initrd 'touch /dev/.udev'  
   
 add_initrd 'echo "-- Setting up hotplug ..."'  
 add_initrd 'echo "/sbin/hotplug" > /proc/sys/kernel/hotplug'  
 # add_initrd 'for i in $(find /lib -type f -name *.ko)'  
 # add_initrd 'do'  
 # add_initrd ' echo "-- Loading module ${i}"'  
 # add_initrd ' insmod ${i};'  
 # # handle special cases like usb  
 # add_initrd ' if [ "${i}" = "usb-storage" ]'  
 # add_initrd ' then'  
 # add_initrd ' echo "Waiting 8 seconds for usb-driver initialization."'  
 # add_initrd ' sleep 8'  
 # add_initrd ' fi'  
 # add_initrd 'done'  
764    
765  # loading detected modules with options  # loading detected modules with options
766  for MODULE in ${MODULES}  for MODULE in ${MODULES}
# Line 809  fi Line 826  fi
826  # software suspend  # software suspend
827  if [ -z "${noresume}" ]  if [ -z "${noresume}" ]
828  then  then
829   add_initrd "resume ${swsuspdev}"   add_initrd "[ -x /bin/resume ] && resume ${swsuspdev}"
830  fi  fi
831    
832  # raid  # raid
# Line 824  fi Line 841  fi
841    
842  add_initrd 'echo "-- Mounting sysroot ..."'  add_initrd 'echo "-- Mounting sysroot ..."'
843  add_initrd '. /etc/rootdev'  add_initrd '. /etc/rootdev'
844  add_initrd 'mknod ${device} b ${major} ${minor}'  add_initrd '[ ! -e ${device} ] && mknod ${device} b ${major} ${minor}'
845  add_initrd 'echo "${device} /sysroot ${rootfs} defaults,ro 0 0" > /etc/fstab'  add_initrd 'echo "${device} /sysroot ${rootfs} defaults,ro 0 0" > /etc/fstab'
846  add_initrd 'mount /sysroot'  add_initrd 'mount /sysroot'
847    
848    # de-silencio
849    add_initrd 'echo 3 > /proc/sys/kernel/printk'
850    
851  add_initrd 'echo "-- Switching to real sysroot ..."'  add_initrd 'echo "-- Switching to real sysroot ..."'
852  add_initrd 'umount /sys'  add_initrd 'umount /sys'
853  add_initrd 'umount /proc'  add_initrd 'umount /proc'
854  add_initrd 'exec run-init /sysroot /sbin/init $@ </sysroot/dev/console >/sysroot/dev/console'  add_initrd 'umount /dev'
855    
856    [[ ${IMAGE_TYPE} = initramfs ]] && add_initrd 'exec run-init /sysroot /sbin/init $@ </sysroot/dev/console >/sysroot/dev/console'
857    if [[ ${IMAGE_TYPE} = loopback ]]
858    then
859     add_initrd 'cd /sysroot'
860     add_initrd 'pivot_root . initrd'
861     add_initrd "exec /sbin/chroot . sh -c 'umount -n /initrd >/dev/null 2>&1;exec -a init.new /sbin/init'</dev/console >/dev/console 2>&1"
862    fi
863    
864  chmod +x ${DEST}/init || die  chmod +x ${DEST}/init || die
865    
# Line 846  echo "rootfs=${rootfs}" >> ${DEST}/etc/r Line 874  echo "rootfs=${rootfs}" >> ${DEST}/etc/r
874  echo "Coping your modules to '${DEST}/lib' ..."  echo "Coping your modules to '${DEST}/lib' ..."
875  for MODULE in ${MODULES}  for MODULE in ${MODULES}
876  do  do
877   if [ -x /usr/bin/strip ]   if [ -x /usr/bin/strip ] && [[ ${NOSTRIP} = false ]]
878   then   then
879   /usr/bin/strip -g ${verbose} ${MODULE} -o ${DEST}/lib/$(basename ${MODULE}) || die   /usr/bin/strip -g ${verbose} ${MODULE} -o ${DEST}/lib/$(basename ${MODULE}) || die
880   else   else
# Line 856  done Line 884  done
884    
885  # create the image  # create the image
886  echo "Creating initrd image '${target}' ..."  echo "Creating initrd image '${target}' ..."
887  (cd "${DEST}" ; find . | cpio --quiet --dereference -o -H newc | gzip -9 >${IMAGE})  if [[ ${IMAGE_TYPE} = initramfs ]]
888  cat ${IMAGE} > ${target} || die  then
889     (cd "${DEST}" ; find . | cpio --quiet -o -H newc | gzip -9 >${IMAGE})
890     cat ${IMAGE} > ${target} || die
891    fi
892    
893    if [[ ${IMAGE_TYPE} = loopback ]]
894    then
895     MOUNTTMP="$(mktemp -d)"
896    
897     # create ext2 img
898     dd if=/dev/zero of=${IMAGE} bs=1024 count=${IMAGESIZE} &> /dev/null || die
899     mke2fs -m 0 -i 1024 -F ${IMAGE} &> /dev/null || die
900     mount -o loop ${IMAGE} ${MOUNTTMP} || die
901     mv ${DEST}/* ${MOUNTTMP} || die
902     umount ${MOUNTTMP} || die
903     gzip -9 ${IMAGE} || die
904     cat ${IMAGE}.gz > ${target} || die
905     [ -d ${MOUNTTMP} ] && rm -rf ${MOUNTTMP}
906    
907     # create inird dir for pivot_root
908     [ ! -d /initrd ] && { install -d /initrd || die; }
909    fi
910    
911  # clean up  # clean up
912  [ -d ${DEST} ] && rm -rf ${DEST}  [ -d ${DEST} ] && rm -rf ${DEST}
913  [ -f ${IMAGE} ] && rm -f ${IMAGE}  [ -f ${IMAGE} ] && rm -f ${IMAGE}
914    
915    # all went ok at this point
916    exit 0

Legend:
Removed from v.293  
changed lines
  Added in v.703