Magellan Linux

Diff of /trunk/mkinitrd-magellan/mkinitrd.in

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

revision 845 by niro, Mon May 4 18:51:02 2009 UTC revision 1180 by niro, Wed Dec 15 21:42:48 2010 UTC
# Line 44  NOSTRIP=false Line 44  NOSTRIP=false
44    
45  CONFMODS="${MODULES}"  CONFMODS="${MODULES}"
46  MODULES=""  MODULES=""
47    INITEXEC="/sbin/init"
48    
49  compress=1  compress=1
50  allowmissing=""  allowmissing=""
# Line 53  force="" Line 54  force=""
54  verbose=""  verbose=""
55  img_vers=""  img_vers=""
56  builtins=""  builtins=""
57  modulefile=/etc/modules.conf  modulefile="/etc/modules.conf"
58    modprobeconf="/etc/modprobe.d/*"
59  rc=0  rc=0
60    
61  IMAGESIZE=4000  IMAGESIZE=4000
# Line 75  usage() Line 77  usage()
77   echo "       [--image-version] [--force-scsi-probe | --omit-raid-modules]"   echo "       [--image-version] [--force-scsi-probe | --omit-raid-modules]"
78   echo "       [--with=<module>] [--force-lvm-probe | --omit-lvm-modules]"   echo "       [--with=<module>] [--force-lvm-probe | --omit-lvm-modules]"
79   echo "       [--builtin=<module>] [--initramfs | --loopback] [--no-strip]"   echo "       [--builtin=<module>] [--initramfs | --loopback] [--no-strip]"
80   echo "       [--fstab=<fstab>] [--nocompress] <initrd-image> <kernel-version>"   echo "       [--fstab=<fstab>] [--nocompress] [--initexec=<init>]"
81     echo "       <initrd-image> <kernel-version>"
82   echo   echo
83   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)"
84    
# Line 319  handlelvordev() Line 322  handlelvordev()
322   fi   fi
323  }  }
324    
325    get_blkid()
326    {
327     local UUID
328     local SEC_TYPE
329     local TYPE
330    
331     local dev="$1"
332     [[ -z ${dev} ]] && die "no dev given"
333    
334     # check if given device is already an UUID
335     if [[ ${dev/UUID=/}x != ${dev}x ]]
336     then
337     eval "${dev}"
338     else
339     eval $(busybox.mkinitrd blkid ${dev} | grep "${dev}:" | sed 's/.*:\ //')
340     fi
341     echo ${UUID}
342    }
343    
344  # need r00t privs  # need r00t privs
345  [[ $(id -u) != 0 ]] && die "you must be r00t."  [[ $(id -u) != 0 ]] && die "you must be r00t."
346    
# Line 395  while [ $# -gt 0 ]; do Line 417  while [ $# -gt 0 ]; do
417   --initramfs) IMAGE_TYPE=initramfs ;;   --initramfs) IMAGE_TYPE=initramfs ;;
418   --loopback) IMAGE_TYPE=loopback ;;   --loopback) IMAGE_TYPE=loopback ;;
419   --no-strip) NOSTRIP=true ;;   --no-strip) NOSTRIP=true ;;
420     --initexec*)
421     if echo $1 | grep -q '=' ; then
422     INITEXEC=$(echo $1 | sed 's/^--initexec=//')
423     else
424     INITEXEC=$2
425     shift
426     fi
427     ;;
428   *)   *)
429   if [ -z "${target}" ]   if [ -z "${target}" ]
430   then   then
# Line 453  fi Line 483  fi
483  ####### get modules ##########  ####### get modules ##########
484    
485  echo "Creating ${IMAGE_TYPE} initrd image"  echo "Creating ${IMAGE_TYPE} initrd image"
 modulefile=/etc/modprobe.conf  
486    
487  for n in ${PREMODS}  for n in ${PREMODS}
488  do  do
# Line 468  then Line 497  then
497   for fs in / /boot   for fs in / /boot
498   do   do
499   esc=$(echo ${fs} | sed 's,/,\\/,g')   esc=$(echo ${fs} | sed 's,/,\\/,g')
500   dev=$(mount | awk "/ on ${esc} / { print \$1 }" | sed 's/[0-9]*$//' | cut -d/ -f3)   dev=$(mount | awk "/ on ${esc} / { print \$1 }" | sed 's/[0-9]*$//')
501   if [ "$(echo ${dev} | cut -c1-2)" = sd ]   if [ "$(echo ${dev} | cut -c6-7)" = sd ]
502   then   then
503   if [ $(which kudzu 2>/dev/null) ]   if [ $(which hwinfo 2>/dev/null) ]
504   then   then
505   host=$(kudzu --probe -b scsi |   if [[ -n $(hwinfo --disk --only ${dev} | grep 'Driver Modules' | grep 'usb[_|-]storage') ]]
  gawk '/^device: '${dev}'/,/^host:/ { if (/^host/) { print $2; exit; } }')  
  if [ -d /proc/scsi/usb-storage-${host} -o -f /proc/scsi/usb-storage/${host} ]  
506   then   then
507   needusb=1   needusb=1
508   fi   fi
# Line 649  echo "Using modules:${MODULES}" Line 676  echo "Using modules:${MODULES}"
676    
677    
678  # create basic filesystem layout  # create basic filesystem layout
679  install -d ${DEST}/{bin,dev,etc,lib,loopfs,proc,sbin,sys,sysroot} || die  install -d ${DEST}/{bin,dev,etc,lib,loopfs,proc,sbin,sys,sysroot,usr/bin,usr/sbin} || die
680    
681  # install busybox  # install busybox
682  echo "$(which busybox.mkinitrd)"  echo "$(which busybox.mkinitrd)"
# Line 669  done Line 696  done
696  # sbin related  # sbin related
697  for i in chroot init losetup modprobe pivot_root  for i in chroot init losetup modprobe pivot_root
698  do  do
699   # static links   ln -s ${DEST}/bin/busybox ${DEST}/sbin/${i} || die "${i}"
  ln ${DEST}/bin/busybox ${DEST}/sbin/${i} || die "${i}"  
700  done  done
701    
702  # install run-init  # install run-init
# Line 678  echo "$(which run-init.mkinitrd)" Line 704  echo "$(which run-init.mkinitrd)"
704  install -m0755 $(which run-init.mkinitrd) ${DEST}/sbin/run-init || die  install -m0755 $(which run-init.mkinitrd) ${DEST}/sbin/run-init || die
705    
706  # install insmod.static  # install insmod.static
707  echo "$(which insmod.static)"  #echo "$(which insmod.static)"
708  install -m0755 $(which insmod.static) ${DEST}/sbin/insmod || die  #install -m0755 $(which insmod.static) ${DEST}/sbin/insmod || die
709    
710  # install v86d for uvesafb support if installed  # install v86d for uvesafb support if installed
711  if which v86d &> /dev/null  if which v86d &> /dev/null
712  then  then
713   echo "$(which insmod.static)"   echo "$(which v86d)"
714   install -m0755 $(which v86d) ${DEST}/sbin/v86d || die   install -m0755 $(which v86d) ${DEST}/sbin/v86d || die
715  fi  fi
716    
# Line 727  add_initrd '#!/bin/sh' Line 753  add_initrd '#!/bin/sh'
753    
754  add_initrd 'mount -t proc proc /proc'  add_initrd 'mount -t proc proc /proc'
755  add_initrd 'mount -t sysfs sysfs /sys'  add_initrd 'mount -t sysfs sysfs /sys'
756    add_initrd 'mount -t tmpfs tmpfs /dev -o rw,mode=0644,size=1024'
757    
758  [[ ${IMAGE_TYPE} = loopback ]] && add_initrd 'mount -t ramfs -o remount,rw /dev/ram /'  [[ ${IMAGE_TYPE} = loopback ]] && add_initrd 'mount -t ramfs -o remount,rw /dev/ram /'
759    
760    # install all busybox applets
761    add_initrd 'busybox --install -s'
762    
763  # silencio  # silencio
764  add_initrd 'echo 0 > /proc/sys/kernel/printk'  add_initrd 'echo 0 > /proc/sys/kernel/printk'
765    
766  add_initrd 'echo "-- Creating initial device nodes ..."'  add_initrd 'echo "-- Creating initial device nodes ..."'
767  add_initrd 'mount -o exec,nosuid,mode=0755,size=10M -t tmpfs udev /dev'  # populate dev
768  add_initrd 'mkdir /dev/pts'  add_initrd 'mdev -s'
769  add_initrd 'mkdir /dev/shm'  # handle hotplug events properly
770  add_initrd 'mkdir /dev/mapper'  add_initrd 'echo /sbin/mdev > /proc/sys/kernel/hotplug'
 add_initrd 'mkdir /dev/misc'  
 add_initrd 'mkdir /dev/fb'  
 add_initrd 'mkdir /dev/vc'  
 add_initrd 'mknod /dev/console c 5 1'  
 add_initrd 'mknod /dev/null c 1 3'  
 add_initrd 'mknod /dev/ram b 1 1'  
 add_initrd 'mknod /dev/rtc c 10 135'  
 add_initrd 'mknod /dev/systty c 4 0'  
 add_initrd 'mknod /dev/tty c 5 0'  
 add_initrd 'mknod /dev/zero c 1 5'  
 for (( i=0; i < 13; i++ )); do  
  add_initrd "mknod /dev/tty${i} c 4 ${i}"  
 done  
 for (( i=64; i < 68; i++)); do  
  add_initrd "mknod /dev/ttyS$((${i} - 64)) c 4 ${i}"  
 done  
   
 # some needed symlinks  
 add_initrd 'ln -snf /proc/self/fd /dev/fd'  
 add_initrd 'ln -snf fd/0 /dev/stdin'  
 add_initrd 'ln -snf fd/1 /dev/stdout'  
 add_initrd 'ln -snf fd/2 /dev/stderr'  
 add_initrd 'ln -snf /proc/kcore /dev/core'  
771    
772  # loading detected modules with options  # loading detected modules with options
773  for MODULE in ${MODULES}  for MODULE in ${MODULES}
# Line 769  do Line 776  do
776   module=$(echo ${MODULE} | sed "s|.*/||" | sed "s/.k\?o$//")   module=$(echo ${MODULE} | sed "s|.*/||" | sed "s/.k\?o$//")
777   fullmodule=$(echo ${MODULE} | sed "s|.*/||")   fullmodule=$(echo ${MODULE} | sed "s|.*/||")
778    
779   options=$(sed -n -e "s/^options[     ][      ]*${module}[      ][      ]*//p" ${modulefile} 2>/dev/null)   options=$(sed -n -e "s/^options[     ][      ]*${module}[      ][      ]*//p" ${modprobeconf} 2>/dev/null)
780    
781   if [ -n "${options}" ]   if [ -n "${options}" ]
782   then   then
# Line 839  then Line 846  then
846   done   done
847  fi  fi
848    
849    # get the right initexec
850    add_initrd "INITEXEC=\"${INITEXEC}\""
851    # support init=* from cmdline
852    add_initrd 'for i in $(cat /proc/cmdline); do if [[ ${i} = init=* ]]; then INITEXEC=${i/init=}; fi; done'
853    
854  add_initrd 'echo "-- Mounting sysroot ..."'  add_initrd 'echo "-- Mounting sysroot ..."'
855  add_initrd '. /etc/rootdev'  add_initrd '. /etc/rootdev'
 add_initrd '[ ! -e ${device} ] && mknod ${device} b ${major} ${minor}'  
856  add_initrd 'echo "${device} /sysroot ${rootfs} defaults,ro 0 0" > /etc/fstab'  add_initrd 'echo "${device} /sysroot ${rootfs} defaults,ro 0 0" > /etc/fstab'
857  add_initrd 'mount /sysroot || ash'  add_initrd 'mount /sysroot || ash'
858    
859    # unset hotplug event-manager
860    add_initrd 'echo > /proc/sys/kernel/hotplug'
861    
862  # de-silencio  # de-silencio
863  add_initrd 'echo 3 > /proc/sys/kernel/printk'  add_initrd 'echo 3 > /proc/sys/kernel/printk'
864    
865  add_initrd 'echo "-- Switching to real sysroot ..."'  add_initrd 'echo "-- Switching to real sysroot ..."'
866    add_initrd 'umount /dev'
867  add_initrd 'umount /sys'  add_initrd 'umount /sys'
868  add_initrd 'umount /proc'  add_initrd 'umount /proc'
 add_initrd 'umount /dev'  
869    
870  [[ ${IMAGE_TYPE} = initramfs ]] && add_initrd 'exec run-init /sysroot /sbin/init $@ </sysroot/dev/console >/sysroot/dev/console'  [[ ${IMAGE_TYPE} = initramfs ]] && add_initrd 'exec run-init /sysroot ${INITEXEC} $@ </sysroot/dev/console >/sysroot/dev/console'
871  if [[ ${IMAGE_TYPE} = loopback ]]  if [[ ${IMAGE_TYPE} = loopback ]]
872  then  then
873   add_initrd 'cd /sysroot'   add_initrd 'cd /sysroot'
874   add_initrd 'pivot_root . initrd'   add_initrd 'pivot_root . initrd'
875   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"   add_initrd "exec /sbin/chroot . sh -c 'umount -n /initrd >/dev/null 2>&1;exec -a init.new \${INITEXEC}'</dev/console >/dev/console 2>&1"
876  fi  fi
877    
878  chmod +x ${DEST}/init || die  chmod +x ${DEST}/init || die
879    
880  # setup root block device  # setup root block device
881  [[ -z ${rootdev} ]] && die "no known rootdev found."  [[ -z ${rootdev} ]] && die "no known rootdev found."
882  echo "device=${rootdev}" > ${DEST}/etc/rootdev || die  echo "device='UUID=$(get_blkid ${rootdev})'" > ${DEST}/etc/rootdev || die
883  echo "major=$(stat -c %t ${rootdev})" >> ${DEST}/etc/rootdev || die  echo "rootfs='${rootfs}'" >> ${DEST}/etc/rootdev || die
 echo "minor=$(stat -c %T ${rootdev})" >> ${DEST}/etc/rootdev || die  
 echo "rootfs=${rootfs}" >> ${DEST}/etc/rootdev || die  
884    
885  # install detected modules  # install detected modules
886  echo "Coping your modules to '${DEST}/lib' ..."  echo "Coping your modules to '${DEST}/lib' ..."

Legend:
Removed from v.845  
changed lines
  Added in v.1180