#!/bin/sh
export PATH=/bin:.

mount -t proc proc /proc
mount -t sysfs sys /sys

for i in aufs.ko unlzma.ko sqlzma.ko squashfs.ko ; do
  insmod /lib/modules/$i
done

# nls_euc-jp.ko needs vfat.ko
for i in nls_iso8859-1.ko nls_ascii.ko nls_cp932.ko cdrom.ko ide-cd_mod.ko loop.ko sr_mod.ko sg.ko fat.ko vfat.ko  nls_euc-jp.ko ; do
   insmod /lib/modules/$i
done

# this wait is needed for detecting USB CD-ROM via sr_mod.ko
sleep 10

mount_ok=0

# check CD device
for i in hdc hda hdb hdc sr0 sr1 sr2 ; do
  echo "trying CD device"
  mount -t iso9660 /dev/$i /cdrom -o ro 
  if [ $? = "0" ]; then
      if [ -f /cdrom/isolinux/rootimg.squash ]; then
          echo "found cdrom on /dev/$i"
	  mount_ok=1
          break
      else
          umount /cdrom
      fi 
  fi
done

# check /dev/sdXX for USB CD device
if [ "$mount_ok" == "0" ]; then
    partitions=`cat /proc/partitions | cut -b23-28 | grep sd`
    for i in $partitions ; do
	mount /dev/$i /cdrom 
        if [ $? = "0" ]; then
            if [ -f /cdrom/isolinux/rootimg.squash ]; then
                echo "found cdrom on /dev/$i"
		mount_ok=1
		break
            else
		umount /cdrom
	    fi 
	fi
    done
fi

# cannot find any CD device
if [ "$mount_ok" == "0" ]; then
    echo "cannot find partition include squashfs. cannot continue booting. exit"
    exec /bin/sh
fi

# mount squashfs'ed rootfs image into /loop
losetup /dev/loop0 /cdrom/isolinux/rootimg.squash
mount -t squashfs /cdrom/isolinux/rootimg.squash /loop

mount -t tmpfs none /loop/tmp

mkdir -p /loop/tmp/ow/var
mount -t aufs -o br:/loop/tmp/ow/var:/loop/var none /loop/var
mkdir -p /loop/tmp/ow/usr
mount -t aufs -o br:/loop/tmp/ow/usr:/loop/usr none /loop/usr

# mkdir -p /loop/var/lock/emacs
# mkdir -p /loop/var/lock/subsys
# mkdir -p /loop/var/log/initpkg
# mkdir -p /loop/var/log/packages
# mkdir -p /loop/var/log/removed_packages
# mkdir -p /loop/var/log/removed_scripts
# mkdir -p /loop/var/log/scripts

# mkdir -p /loop/var/preserve
# mkdir -p /loop/var/run
# mkdir -p /loop/var/spool/mail
# mkdir -p /loop/var/spool/tmp
# mkdir -p /loop/var/tmp
# mkdir -p /loop/var/X11R7
# mkdir -p /loop/var/state/dhcp
# mkdir -p /loop/var/empty

#mkdir -p /loop/tmp/lib/modules
#mount -t aufs -o br:/loop/tmp/lib/modules:/loop/lib/modules none /loop/lib/modules
#echo "copying /lib/modules/2.6.27.4-plamoSMP to /loop/lib/modules"
#cp -a /lib/modules/2.6.27.4-plamoSMP /loop/lib/modules
#mkdir -p /loop/tmp/lib/firmware
#mount -t aufs -o br:/loop/tmp/lib/firmware:/loop/lib/firmware none /loop/lib/firmware
#echo "copying /lib/firmware to /loop/lib/firmware"
#cp -a /lib/modules/firmware/* /loop/lib/firmware

mkdir -p /loop/tmp/ow/etc
mount -t aufs -o br:/loop/tmp/ow/etc:/loop/etc none /loop/etc
echo "copyinng modified rc.S and rc.M to /etc/rc.d/"
cp /etc/rc.S.modified /loop/etc/rc.d/rc.S
cp /etc/rc.M.modified /loop/etc/rc.d/rc.M
cp /etc/rc.4.modified /loop/etc/rc.d/rc.4
cp /etc/csh.login /loop/etc/csh.login

for i in inittab fstab passwd shadow ; do
    echo "copying modified $i to /etc/$i"
    cp /etc/$i /loop/etc/$i
done

mkdir -p /loop/tmp/ow/home
mount -t aufs -o br:/loop/tmp/ow/home:/loop/home none /loop/home
cp /etc/caps2ctr_config /loop/home/demo/
cp /etc/xinitrc_kde /loop/home/demo/.xinitrc_kde
( cd /loop/home/demo ; ln -sf .xinitrc .xprofile )

echo "copying /usr/share/doc/cups"
# mkdir -p /loop/tmp/ow/usr/share/doc
# mount -t aufs -o br:/loop/tmp/ow/usr/share/doc:/loop/usr/share/doc none /loop/usr/share/doc
cp -a /etc/cups /loop/usr/share/doc

echo "copying Xsession and Xstartup"
mkdir -p /loop/tmp/ow/opt/kde/share/config/kdm
mount -t aufs -o br:/loop/tmp/ow/opt/kde/share/config/kdm:/loop/opt/kde/share/config/kdm none /loop/opt/kde/share/config/kdm
cp /etc/Xsetup /etc/Xsession /loop/opt/kde/share/config/kdm

mkdir -p /loop/dev
mount -t tmpfs tmpfs /loop/dev
cp -a /dev/console /loop/dev

mount --move /proc /loop/proc
mount --move /sys /loop/sys

# exec /bin/sh
echo "switch_root to /loop"
sleep 5
cd /loop
exec /bin/switch_root -c /dev/console . /sbin/init

#cd /loop
#./lib/ld-2.7.so --library-path ./lib ./bin/mount -n --move . /
#exec ./lib/ld-2.7.so --library-path ./lib ./bin/chroot . /sbin/init

#umount /proc
#cd /loop
#pivot_root . put_old
#exec chroot . /sbin/init

#mount -n --move . /
#exec /bin/switch_root -c /dev/console . /sbin/init

#mount -t proc proc /loop/proc
#cd /
# mount --move /loop /
#find /proc/$$/cwd/ -mindepth 1 -maxdepth 1 -print0 \
#| xargs -0 rm -rf -- '{}' ';'
#cd /
#exec /bin/sh

#exec chroot /loop /bin/bash
#cd /loop

# exec chroot . /sbin/init
