initramfs-include.sh 2.32 KB
FOUND_ROOTFS=
RAMSIZE=100000

msg ":: Creating new root ramdisk (dinamic size=${RAMSIZE}k) on /dev/shm..."
mkdir /newroot
/bin/mount -t tmpfs -o "size=${RAMSIZE}k" /dev/shm /newroot

mkdir /newroot/cdrom /newroot/squashfs

#
# findcdrom(): looks for cdrom devices and mounts them to detect compressed fs
#
findcdrom(){
   msg ":: Looking for cdrom device(s)"

   # try removable devices only
   for i in /sys/block/*/removable; do
      removable=`cat $i`      
      if [ "$removable" = "1" ]; then
         dev=${i%/removable}
         dev=/dev/${dev#/sys/block/}
         if mount -r -t iso9660 $dev /newroot/cdrom >/dev/null 2>&1; then
            if test -r /newroot/cdrom/rootfs.compressed; then
               msg ":: Compressed root filesystem found on $dev..."
               FOUND_ROOTFS="$dev"
               return 0
   	    fi
            umount /newroot/cdrom
         fi
      fi
   done
   return 1
}

#/sbin/splash_util -c repaint ${splash_add} -t default --mesg="Looking for cdrom device" --progress="4444"

while true; do
   findcdrom
   if [ "$FOUND_ROOTFS" ]; then
#      /sbin/splash_util -c repaint ${splash_add} -t default --mesg="Mounting compressed filesystem" --progress="5555"
      msg ":: Mounting compressed filesystem"
      /bin/losetup /dev/loop0 /newroot/cdrom/rootfs.compressed
      mount -r -t squashfs /dev/loop0 /newroot/squashfs
   
      msg ":: Creating directories and symlinks on ramdisk..."
   
      mkdir -p \
            /newroot/tmp /newroot/proc /newroot/sys \
            /newroot/initrd /newroot/mnt /newroot/media \
	    /newroot/oldroot

      ln -s squashfs/bin /newroot/bin
      ln -s squashfs/boot /newroot/boot
      ln -s squashfs/lib /newroot/lib   
      ln -s squashfs/opt /newroot/opt
      ln -s squashfs/sbin /newroot/sbin
      ln -s squashfs/srv /newroot/srv
      ln -s squashfs/usr /newroot/usr

      chroot /newroot /bin/cp -a \
          /squashfs/dev /squashfs/home /squashfs/var \
          /squashfs/etc /squashfs/root /

      # Create empty utmp and wtmp
      :> /newroot/var/run/utmp
      :> /newroot/var/run/wtmp

      [ "${init}" ] || init=/sbin/init
      msg ":: Running init, runlevel:${runlevel}"
      exec run-init /newroot ${init} ${runlevel}
      exit 0
   else
      msg ":: Could not find compressed root filesystem. image; opening a command prompt."
      /bin/sh.shared
   fi
done