#!/bin/sh
if [ "$verbose" == 1 ];then
set -x
fi
mount()
{
if  $(echo "$*" |grep -q "\-t"); then
/bin/mount $*
elif !(vol_id -t $1 > /dev/null 2>&1);then
/bin/mount $* || /bin/mount $* -t `vol_id -t $1` || /bin/mount $*
elif [ `vol_id -t $1` = "ntfs" ]; then
mount.ntfs $*
else
/bin/mount $* -t `vol_id -t $1` || /bin/mount $* 
fi
}

execve()
{
if [ ! -x $1 ];then 
return 0;
fi
exec $CHROOT $1  < /dev/console > /dev/console 2>/dev/console
}

path2dev()
{
echo "$1"|sed  's#/[^/]*/\([^/]*\).*#/dev/\1#';
}

path2mnt()
{
echo "$1"|sed  's#/[^/]*/\([^/]*\).*#/mnt/\1#';
}

dev2mnt()
{
echo $1|sed  's#/dev/#/mnt/#';
}

where_is_mounted() {
    local device=$(path2mnt $1) 
    if [ -d $device ];then 
       mountpoint=$device;
       return 0;
    fi
    device=$(path2dev $1);
    if grep -q "^$device " /proc/mounts; then
        mountpoint=$(grep "^$device " /proc/mounts | { read d mountpoint rest;echo $mountpoint; });
        return 0
    fi
    return 1
}

what_is_mounted() {
    device=$1
    if grep -q "^$device " /proc/mounts; then
        mountpoint=$(grep "^$device " /proc/mounts | { read d mountpoint rest;echo $d; });
        return 0
    fi
    return 1
}

startudevd()
{
udevd --daemon
udevplug
}

genfstab()
{
FSTAB=/etc/fstab
if grep -q autogen $FSTAB ;then
fsdata1=$(head $FSTAB -n  $(($(grep -n 'autogen'  $FSTAB |sed 's/:.*$//')-1)))
else
fsdata1=$(cat $FSTAB |grep -v -e '[\t| ]/[\t| ]' $FSTAB)
fi
echo "$fsdata1" > $FSTAB
echo "#autogen bellow" >> $FSTAB
cat /proc/mounts|grep -v " $ROOT $usefs" >> $FSTAB
fsdata1="";
for i in $CMDLINE;
do
case $i in
swap=*)
export swapdev=$(echo $i|sed -n 's/swap=\(\/[^/]*\/[^/]*\)\/.*/\1/p');
export swapfile=$(dev2mnt ${i#swap=})
if where_is_mounted $swapdev;then
mount $swapdev $mountpoint -o remount,rw
else
mount $swapdev $(dev2mnt $swapdev) -o rw
fi
fsdata1="$fsdata1$swapfile swap swap defaults 0 0\n"
;;
esac
done
echo -ne "$fsdata1" >> $FSTAB
cat > /etc/init.d/mymountall << EOF
mount -avt nonfs,nosysfs,noproc,nosmbfs,nounionfs
swapon -a
EOF
chmod +x /etc/init.d/mymountall
ln -sf /etc/init.d/mymountall /etc/rcS.d/S99mymountall

if grep -q findswap /proc/cmdline;then
devices=""
for device in /dev/[hs]d[a-z][0-9]*; do
    if ! [ -b "$device" ]; then
        continue
    fi

    magic=$(dd if="$device" bs=16374 skip=1 count=1 2>/dev/null | dd bs=10 count=1 2>/dev/null) || continue

    if [ "$magic" = "SWAPSPACE2" -o "$magic" = "SWAP-SPACE" ]; then
        devices="$devices $device"
        fi
done

for device in $devices; do
    cat >> $FSTAB <<EOF
$device swap swap defaults 0 0
EOF
done
fi
}

blockdevices() {
    r=""
   for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -v loop | grep -v ram |grep -v fd0); do
    for dev in "${sysblock}" "${sysblock}"/*; do
        if [ -e "${dev}/dev" ]; then
            r="${r} $(echo $dev|sed  's#.*/#/dev/#')"
        fi
    done
   done
    echo ${r}
}


findtype()
{
founddev="";
for dev in $(blockdevices);do
fstype=$(vol_id -t $dev 2>/dev/null) || continue
for wantfs in $*;do
if [ "$fstype" = "$wantfs" ];then
founddev="$founddev $dev";
found=1;
break;
fi
done
done
if [ -n "$founddev" ];then
echo "$founddev";
return 0;
fi;
return 1;
}

finddisk()
{
mkdir -p $MOUNTROOT/tmp
for dev in $(blockdevices);do
vol_id -t $dev >/dev/null 2>&1|| continue
if where_is_mounted $dev;then
isopath=$mountpoint;
else
isopath=$MOUNTROOT/tmp;
mount $dev $MOUNTROOT/tmp 2>/dev/null || continue
fi

if [ -e $isopath/ramdisk ];then
export diskdev=$dev;
export disk=$(dev2mnt $diskdev)/ramdisk
umount $MOUNTROOT/tmp
echo find disk in $dev
return 0;
fi
umount $MOUNTROOT/tmp
done
return 1;
}

findlinux()
{
mkdir -p $MOUNTROOT/tmp
for dev in $(blockdevices);do
vol_id -t $dev >/dev/null 2>&1|| continue
if where_is_mounted $dev;then
isopath=$mountpoint;
else
isopath=$MOUNTROOT/tmp;
mount $dev $MOUNTROOT/tmp  2>/dev/null|| continue
fi
if [ -f $isopath/KNOPPIX* ];then
export linuxdev=$dev;
export linux=$(dev2mnt $linuxdev)/KNOPPIX*
umount $MOUNTROOT/tmp
echo find knoppiox in $dev
return 0;
fi
umount $MOUNTROOT/tmp
done
return 1;
}

myrun()
{
export MYRUNCMD="$@";
ret=0;
while :;do
eval $MYRUNCMD && break || { 
echo -ne "failed!:$@\nexit  :retry\nexit 1:skip\nexit 2:abort\n$errmsg";
echo "$@" >> /.ash_history
/bin/sh ;
case "$?" in
1)
break
;;
2)
ret=1;
break
;;
esac;
}
done
errmsg="";
return $ret;
}

myrunids()
{
export ids=$1
shift
export MYRUNCMD="$@";
ret=0;
while :;do
eval $MYRUNCMD 
export ret0=$?
for i in $(echo $ids);
do
if [ $ret0 -eq $i ];then
break 2
fi
done
echo -ne "failed!:$@\nexit  :retry\nexit 1:skip\nexit 2:abort\n$errmsg";
echo "$@" >> /.ash_history
/bin/sh ;
case "$?" in
1)
break
;;
2)
ret=1;
break
;;
esac;
done
errmsg="";
return $ret;
}

movemount()
{
mkdir -p $ROOT/$MOUNTROOT
mkdir -p $ROOT/sys $ROOT/proc $ROOT/$MOUNTROOT
/bin/mount -n none  $ROOT/sys  -t sysfs
/bin/mount -n none  $ROOT/proc -t proc
for i in $MOUNTROOT/*;do
if [ -h $i ];then
rm -f $ROOT/$i
cp -a $i $ROOT/$i
elif [ -d $i ];then
if mountpoint -q $i; then
if [ -h $ROOT/$i ];then
rm -f $ROOT/$i
fi
mkdir -p $ROOT/$i
/bin/mount -n -o move $i $ROOT/$i
fi
fi
done
if rmdir $ROOT/tmp 2>/dev/null;then
mkdir $ROOT/tmp
chmod o+wx $ROOT/tmp
fi
ln -sf / $ROOT/KNOPPIX
cp /$MOUNTROOT/bin/ttyrun $ROOT/bin
mkdir /var
}


mountdev()
{
local linuxdev=$(path2dev $1);
if ! where_is_mounted $linuxdev;then
mkdir -p $(dev2mnt $linuxdev)
errmsg="try:fsck -y -C  $linuxdev"  myrun mount $linuxdev $(dev2mnt $linuxdev) -o ro  || return 1
fi
}


losetup_cloop()
{
if losetup /dev/cloop$cloopno $1 2>/dev/null ;then
export cloopdev=/dev/cloop$cloopno;
export cloopno=$((cloopno+1));
return 0;
else
return 1;
fi
}

mountimg()
{
img=$1;
imgno=$2;
mountdev $img
if [ ! -e $img -a -L $img ];then
mountdev $(readlink $img);
fi
dir=$MOUNTROOT/IMG$imgno;

mkdir -p $dir
if  $(echo $img|grep -q "\.squashfs$") || $(echo $img|grep -q "\.sqfs$")  ;then
myrun mount $img $dir -o loop -t squashfs || return 1
elif $(echo $img|grep -q "\.iso$");then
myrun mount $img $dir -o loop -t iso9660 || return 1
elif [ -f $img ];then
if losetup_cloop $img;then
myrun mount $cloopdev $dir -o ro -t iso9660 || return 1
else
myrun mount $img $dir -o loop,ro || myrun mount $img $dir  -t squashfs -o loop,ro  || return 1
fi
else
myrun /bin/mount --bind $img $dir
fi
}

mountlinux()
{
linux=$1;
linuxno=$2;
mountdev $linux
if [ ! -e $linux -a -L $linux ];then
mountdev $(readlink $linux);
fi
dir=$MOUNTROOT/LINUX$linuxno;
iso=$MOUNTROOT/iso$linuxno


mkdir -p $dir
if  $(echo $linux|grep -q "\.squashfs$") || $(echo $linux|grep -q "\.sqfs$")  ;then
myrun mount $linux $dir -o loop -t squashfs || return 1
elif $(echo $linux|grep -q "\.iso$");then
mkdir -p $iso
myrun mount $linux $iso -o loop -t iso9660 || return 1
if [ -n "$isofile" ]; then
mount $iso/$isofile $dir -o ro -t squashfs || { losetup_cloop $iso/$isofile && mount $cloopdev $dir -o ro -t iso9660; } || return 1
elif [ -e $iso/KNOPPIX/KNOPPIX ];then
losetup_cloop $iso/KNOPPIX/KNOPPIX
myrun mount $cloopdev $dir -o ro -t iso9660 || return 1
elif [ -d $iso/casper ];then
modprobe squashfs
myrun mount $iso/casper/*.squashfs $dir -o ro -t squashfs
else
umount $iso
myrun mount $linux $dir -o loop -t iso9660 || return 1
fi
elif [ -f $linux ];then
if losetup_cloop $linux;then
myrun mount $cloopdev $dir -o ro -t iso9660 || return 1
else
myrun mount $linux $dir -o loop,ro || myrun mount $linux $dir  -t squashfs -o loop,ro  || return 1
fi
else
myrun /bin/mount --bind $linux $dir
fi
rodisks=$rodisks:$dir=ro
}

loadmodule()
{
{
modprobe ehci-hcd
modprobe usb-storage
modprobe loop max_loop=64
modprobe $usefs
modprobe aufs
modprobe squashfs
modprobe vfat
modprobe ext2
modprobe jbd
modprobe ext3
modprobe reiserfs
modprobe ntfs
modprobe dm-mod
modprobe cloop
} >/dev/null 2>/dev/null; 
}

bootlinux()
{
export CMDLINE=" $(cat /proc/cmdline ) "

[ -n "$usefs" ] || export usefs=unionfs
if [ "$usefs" = "aufsfast" ];then
   export usefs=aufs
   export aufsfast=1
fi
mkdir -p /lib/modules/`uname -r`
mv /modules /lib/modules/`uname -r`
depmod -a
loadmodule

for i in `cat /proc/cmdline`;
do
case $i in
waitdev=*)
2>/dev/null 1</dev/${i##waitdev=} || { 
echo -n wait ${i##waitdev=} to settle ; sleep 1; 
while :;do
	2>/dev/null 1</dev/${i##waitdev=} && { echo done;break; } || { echo -n .; sleep 1; }
done
}
;;
rc=*)
i=${i##rc=}
mountdev $i;
myrun cp $(dev2mnt $i) /rc || return 1
umount $(path2mnt $i);
rmdir $(path2mnt $i);
chmod +x /rc
if [ -f /rc -a -x /rc ];then 
exec /rc linux
fi
return 1;
;;
cmdline=*)
i=${i##cmdline=}
mountdev $i;
[ -e $(dev2mnt $i) ] || return 1
export CMDLINE="$CMDLINE `cat $(dev2mnt $i)`";
umount $(path2mnt $i);
rmdir $(path2mnt $i);
;;
esac
done
linux;
}

_linux0()
{
mkdir $MOUNTROOT
for DEVICE in /proc/ide/hd?; do
cat $DEVICE/settings |grep -qe 'using_dma \+0' && echo using_dma:1 >$DEVICE/settings;
 [ "$(cat $DEVICE/media 2>/dev/null)" = "cdrom" ] && ln -sf /dev/${DEVICE##/proc/ide/} /dev/cdrom
done


for i in $CMDLINE;
do
case $i in
usefs=)
export usefs=${i##usefs=};
if [ "$usefs" = "aufsfast" ];then
   export usefs=aufs
   export aufsfast=1
fi
   modprobe $usefs > /dev/null 2>/dev/null
;;
modules=)
export modules=${i##modules=};
mkdir -p $(path2mnt $modules)
myrun mount $(path2dev $modules)  $(path2mnt $modules) -o ro || return 1
mkdir -p /lib/modules/`uname -r`/modules
/bin/mount --bind $(path2mnt $modules) /lib/modules/`uname -r`/modules
depmod -a;
loadmodule
;;
esac
done


for i in $CMDLINE;
do
case $i in
disk=*)
export diskdev=$(echo $i|sed -n 's/disk=\(\/[^/]*\/[^/]*\)\/.*/\1/p')
export disk=$(dev2mnt ${i#disk=})
mkdir -p /etc
 if [ -n "$modules" -a "$diskdev" = "$(path2dev $modules)" ];then
  umount /lib/modules/`uname -r`/modules
  umount $(path2mnt $modules)
  cat /proc/mounts > /etc/fstab
  myrunids "0 1" fsck -y -C  $diskdev || return 1
  myrun mount $(path2dev $modules)  $(path2mnt $modules) -o ro || return 1
  /bin/mount --bind $(dev2mnt $modules) /lib/modules/`uname -r`/modules
 else
  cat /proc/mounts > /etc/fstab
  myrunids "0 1" fsck -y -C  $diskdev || return 1
 fi
;;
disk)
while ! finddisk ;do
echo "can not find ramdisk";
linuxdevs=$(findtype ext2 ext3)
if [ $? -eq 0 ];then
echo "below devs is ext3,ext2 format"
echo "$linuxdevs"
echo "you can create a disk directory,as bellow"
dev=$(echo $linuxdevs| { read dev rest;echo "$dev"; })
echo "mkdir /a;mount $dev /a && mkdir /a/ramdisk;umount a;rmdir a";
for dev in $linuxdevs;do
echo "mkdir /a;mount $dev /a && mkdir /a/ramdisk;umount a;rmdir a" >> /.ash_history;
done
fi
windevs=$(findtype vfat msdos ntfs)
if [ $? -eq 0 ];then
echo "below devs is vfat,msdos,ntfs format"
echo "$windevs"
echo "you can create a 1G disk image,as bellow"
dev=$(echo windevs| { read dev rest;echo "$dev"; })
echo "mkdir /a;mount $dev /a && dd if=/dev/zero of=/a/ramdisk bs=1M count=1024;mkfs -t ext3 /a/ramdisk;umount a;rmdir a";
for dev in $windevs;do
echo "mkdir /a;mount $dev /a && dd if=/dev/zero of=/a/ramdisk bs=1M count=1024;mkfs -t ext3 /a/ramdisk;umount a;rmdir a" >> /.ash_history;
done
fi
echo "press up arrow key to choose a cmd then exit to retry,exit 1 to continue";
/bin/sh
case "$?" in
1)
break
;;
esac;
done
;;
copydisk)
echo "you can copy cd to hard disk";
diskdevs=$(findtype ext2 ext3 vfat)
if [ $? -eq 0 ];then
echo "below devs is ext3,ext2,vfat format"
echo "$diskdevs"
echo "you can copy KNOPPIX to harddisk ,as bellow"
dev=$(echo $diskdevs| { read dev rest;echo "$dev"; })
echo "mkdir /a;mount $dev /a && cp -aH /KNOPPIX /a/;sed -e \'s#/dev/cdrom#$dev#g\' /menu.lst > /a/menu.lst;umount a;rmdir a";
echo "then if you use nt loader,you can cp /KNOPPIX/grldr to c:\grldr;add c:\grldr=\"start Grub\" into c:\boot.ini;place the new menu.lst to c:\;"
echo "if you use grub,place the new menu.lst to grub's menu.lst"
echo "(cd) in menu.lst should change to (hd?,??),you should try."
for dev in $diskdevs;do
echo "mkdir /a;mount $dev /a && cp -aH /KNOPPIX /a/;sed -e \'s#/dev/cdrom#$dev#g\' /menu.lst > /a/menu.lst; umount a;rmdir a" >> /.ash_history;
done
fi
echo "press up arrow key to choose a cmd then reboot";
exec /sbin/init
;;
esac
done

export linuxno=""
export imgno=""
export rodisks=""
export cloopno=""
export cloopdev=/dev/cloop

for i in $CMDLINE;
do
case $i in
insmod=*)
modprobe $(echo ${i##insmod=}|sed 's#\(\([^\]\|^\)\(\\\\\)*\),#\1 #g'|sed 's#\\,#,#g'|sed 's#\\\\#\\#g')||insmod $(echo ${i##insmod=}|sed 's#\(\([^\]\|^\)\(\\\\\)*\),#\1 #g'|sed 's#\\,#,#g'|sed 's#\\\\#\\#g')
;;
insmods=*)
for mod in $(echo ${i##insmods=}|sed 's#\(\([^\]\|^\)\(\\\\\)*\),#\1 #g'|sed 's#\\,#,#g'|sed 's#\\\\#\\#g');do
modprobe $mod|| insmod $mod;
done
;;
img=*)
export imgdev=$(echo $i|sed -n 's/img=\(\/[^/]*\/[^/]*\)\/.*/\1/p');
export imgs=$(dev2mnt ${i#img=})
mountdev $imgdev
for img in $imgs;do
mountimg $img "$imgno"
imgno=$((imgno+1));
done
;;
imglst=*)
export imglstdev=$(echo $i|sed -n 's/imglst=\(\/[^/]*\/[^/]*\)\/.*/\1/p');
export imglsts=$(dev2mnt ${i#imglst=})
mountdev $imglstdev
for imglst in $imglsts;do
[ -e $imglst ] || return 1
for img in `cat $imglst`;do
mountimg $img "$imgno"
imgno=$((imgno+1));
done
done
;;
linux=*)
export linuxdev=$(echo $i|sed -n 's/linux=\(\/[^/]*\/[^/]*\)\/.*/\1/p');
export linuxs=$(dev2mnt ${i#linux=})
mountdev $linuxdev
for linux in $linuxs;do
mountlinux $linux "$linuxno"
linuxno=$((linuxno+1));
done
;;
linuxlst=*)
export linuxlstdev=$(echo $i|sed -n 's/linuxlst=\(\/[^/]*\/[^/]*\)\/.*/\1/p');
export linuxlsts=$(dev2mnt ${i#linuxlst=})
mountdev $linuxlstdev
for linuxlst in $linuxlsts;do
[ -e $linuxlst ] || return 1
for linux in `cat $linuxlst`;do
mountlinux $linux "$linuxno"
linuxno=$((linuxno+1));
done
done
;;
cmd=*)
$(echo ${i##cmd=}|sed 's#\(\([^\]\|^\)\(\\\\\)*\),#\1 #g'|sed 's#\\,#,#g'|sed 's#\\\\#\\#g');
;;
cmdlst=*)
export cmdlstdev=$(echo $i|sed -n 's/cmdlst=\(\/[^/]*\/[^/]*\)\/.*/\1/p');
export cmdlsts=$(dev2mnt ${i#cmdlst=})
mountdev $cmdlstdev
for cmdlst in $cmdlsts;do
if [ ! -e $cmdlst -a -L $cmdlst ];then
mountdev $(readlink $cmdlst);
fi
[ -e $cmdlst ] || return 1
. "$cmdlst";
done
;;
esac
done

if [ -z "$linuxno" ]; then
myrun findlinux || return 1
mountdev $linuxdev
mountlinux  $linux "$linuxno"
fi

if [ -n "$diskdev" ];then
if where_is_mounted $diskdev;then
myrun mount $diskdev  $mountpoint -o remount,rw -n || return 1
else
mkdir -p $(dev2mnt $diskdev)
myrun mount $diskdev  $(dev2mnt $diskdev) -o rw -n || return 1
fi

if [ ! -e $disk -a -L $disk ];then
mountdev $(readlink $disk)
fi


olddisk=$disk

if [ ! -e $disk ];then
mkdir -p $disk
fi

if [ -f $disk ];then
myrunids "0 1" fsck -y -C  $disk
mkdir -p $MOUNTROOT/disk
myrun mount -o loop $disk $MOUNTROOT/disk -n || return 1
disk=$MOUNTROOT/disk 
else 
ln -s $disk $MOUNTROOT/disk
fi

else
mkdir -p $MOUNTROOT/disk
disk=$MOUNTROOT/disk 
olddisk=$disk
fi

mkdir -p $disk/home/knoppix
mkdir -p $disk/root
mkdir -p $disk/tmp
chmod oug+rwx $disk/home/knoppix
chmod oug+rwx $disk/tmp
return 0;
}
_linux1()
{
mkdir -p $ROOT
if [ "$usefs" = "unionfs" ]; then
myrun mount -t $usefs -o dirs=$disk=rw$rodisks  $usefs $ROOT -n || return 1
elif [ "$aufsfast" = 1 ]; then
myrun mount -t $usefs -o br:$disk=rw$rodisks  $usefs $ROOT -n || return 1
else
myrun mount -t $usefs -o xino=/.aufs.xino,br:$disk=rw$rodisks  $usefs $ROOT -n || return 1
fi


rm -f $ROOT/bin/ash

rm -rf /etc
ln -s $ROOT/etc /

if(echo $CMDLINE|grep -q ubuntu);then
locale=en_US.UTF-8
locale=$(echo $CMDLINE|sed -ne 's#.*debian-installer/locale=\(\S*\).*#\1#p');
LANG=$(grep "^${locale}" $ROOT/usr/share/i18n/SUPPORTED | grep UTF-8 |sed -e 's, .*,,' -e q)

cat > /etc/init.d/myubuntu << AAA
chmod -x /sbin/readahead-list
echo LANG=$LANG >> /etc/environment
locale-gen $LANG
LANG=$LANG casper-reconfigure / xserver-xorg
AAA
cat >> /etc/init.d/myubuntu << 'AAA'
USERNAME=cpu
if [ -f /etc/gdm/gdm.conf ]; then
sed -i \
        -e "s/^AutomaticLoginEnable=.*\$/AutomaticLoginEnable=true/" \
        -e "s/^AutomaticLogin=.*\$/AutomaticLogin=$USERNAME/" \
        -e "s/^TimedLoginEnable=.*\$/TimedLoginEnable=true/" \
        -e "s/^TimedLogin=.*\$/TimedLogin=$USERNAME/" \
        -e "s/^TimedLoginDelay=.*\$/TimedLoginDelay=10/" \
        /etc/gdm/gdm.conf 
fi
if [ -f /etc/kde3/kdm/kdmrc ]; then
    sed -i -r \
        -e "s/^#?AutoLoginEnable=.*\$/AutoLoginEnable=true/" \
        -e "s/^#?AutoLoginUser=.*\$/AutoLoginUser=$USERNAME/" \
        -e "s/^#?AutoReLogin=.*\$/AutoReLogin=true/" \
        /etc/kde3/kdm/kdmrc 
fi
if useradd cpu -d /home/cpu -s /bin/bash -G adm,dialout,cdrom,floppy,audio,dip,video,plugdev,lpadmin,scanner;then
mkdir /home/cpu 
chown cpu /home/cpu
echo cpu ALL=NOPASSWD: ALL >> /etc/sudoers
echo 127.0.0.1   ubuntu localhost > /etc/hosts
{ sleep 1;echo cpu;sleep 1;echo cpu; }|passwd cpu
echo ubuntu > /etc/hostname
fi
for file in /usr/share/applications/ubiquity-gtkui.desktop /usr/share/applications/kde/ubiquity-kdeui.desktop;
 do
    if [ -f "$file" ]; then
        install -D -o $USERNAME -g users $file /home/$USERNAME/Desktop/$(basename "$file")
        break
    fi
done

if [ -e /usr/share/example-content/ ]; then
    install -o $USERNAME -g users -d /home/$USERNAME/Desktop/
    ln -s /usr/share/example-content/ /home/$USERNAME/Desktop/
fi
AAA
chmod +x /etc/init.d/myubuntu
ln -sf /etc/init.d/myubuntu $ROOT/etc/rcS.d/S00myubuntu
fi

cat > /etc/init.d/myhalt <<AAA
#!/bin/bash
PATH=$MOUNTROOT/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
rm -f /KNOPPIX
/bin/sync
killall5 -9
swapoff -a
umount -avt nonfs,nosysfs,noproc,nosmbfs,nounionfs
AAA

if [ -n "$aufsfast" ];then
echo mount none /tmp -t ramfs >> /etc/init.d/myhalt
echo mount / -o remount,xino=/tmp/.aufs.xino  >> /etc/init.d/myhalt
fi

if [ -f "$olddisk" ];then
echo /bin/umount -d -r $MOUNTROOT/disk -n >> /etc/init.d/myhalt
fi

if [ -n "$diskdev" ];then
cat >> /etc/init.d/myhalt <<AAA
/bin/umount -d -r $diskdev  -n
/bin/umount -d -r $(dev2mnt $diskdev)  -n
/bin/sync
AAA
fi
chmod +x /etc/init.d/myhalt
ln -sf ../init.d/myhalt /etc/rc0.d/S89myhalt
ln -sf ../init.d/myhalt /etc/rc6.d/S89myhalt
sed -i 's#knoppix-halt#rc 0#;s#knoppix-reboot#rc 6#;' /etc/inittab
umount /lib/modules/`uname -r`/modules
genfstab
rm -f /etc
mkdir /etc
cp /$ROOT/etc/fstab /etc
cp $ROOT/etc/ld.so.conf  /etc/ld.so.conf
cat $ROOT/etc/ld.so.conf|sed 's#^#/root#p' >> /etc/ld.so.conf
#$ROOT/sbin/ldconfig
[ "X$CHROOT" != "X" ] && movemount
export HOME=/root

if [ "X$CHROOT" = "X" ];then
/mnt/bin/busybox rm -rf bin dev init lib modules sbin usr etc
/mnt/bin/busybox ln -sf $ROOT/* /
fi

for i in  $CMDLINE;
do
case $i in
lcmd=*)
$CHROOT sh -c "$(echo ${i##lcmd=}|sed 's#\(\([^\]\|^\)\(\\\\\)*\),#\1 #g'|sed 's#\\,#,#g'|sed 's#\\\\#\\#g')";
;;
lcmdlst=*)
export lcmdlstdev=$(echo $i|sed -n 's/lcmdlst=\(\/[^/]*\/[^/]*\)\/.*/\1/p');
export lcmdlsts=$(dev2mnt ${i#lcmdlst=})
mountdev $lcmdlstdev
for lcmdlst in $lcmdlsts;do
if [ ! -e $lcmdlst -a -L $lcmdlst ];then
mountdev $(readlink $lcmdlst);
fi
cat "$lcmdlst"|$CHROOT;
done
;;
linsmod=*)
eval "$CHROOT modprobe $(echo ${i##linsmod=}|sed 's#\(\([^\]\|^\)\(\\\\\)*\),#\1 #g'|sed 's#\\,#,#g'|sed 's#\\\\#\\#g')" || eval "$CHROOT insmod $(echo ${i##linsmod=}|sed 's#\(\([^\]\|^\)\(\\\\\)*\),#\1 #g'|sed 's#\\,#,#g'|sed 's#\\\\#\\#g')"
;;
linsmods=*)
for mod in $(echo ${i#linsmods=}|sed 's#\(\([^\]\|^\)\(\\\\\)*\),#\1 #g'|sed 's#\\,#,#g'|sed 's#\\\\#\\#g');do
$CHROOT modprobe $mod|| $CHROOT insmod $mod;
done
;;
esac
done

if [ -n "$init" ];then
exec ttyrun $CHROOT  $init  < /dev/console > /dev/console 2>/dev/console
fi
execve /sbin/init 
execve /etc/init 
execve /bin/init 
execve /bin/sh
return 0;
}


linux0()
{
_linux0 && _linux1
}

linux()
{
linux0;
exit 0;
}


cpio()
{
file=../minirt.gz
if [ $# -ne 0 ];then
file=$1
fi
rm -f .ash_history
find .|mnt/bin/cpio -H newc -o|gzip -c > $file
cp linuxrc ..
}

initrd()
{
rm -f ../minirt1.gz
mkdir /tmp/a 
dd if=/dev/zero of=../minirt1 bs=1M count=4 && echo y|mkfs -t ext2 ../minirt1 && mount ../minirt1 /tmp/a -o loop && cp -a * .MNT /tmp/a && umount /tmp/a && gzip ../minirt1
}

respawn()
{
while :;do
eval $@;
sleep 1;
done
}


if ! [ -e /var  -o -e /rc ];then
mkdir -p /sys
mkdir -p /proc
mount none /proc -t proc 
rm -rf /root
export ROOT=/ROOT
export MOUNTROOT=/mnt
export PATH=$MOUNTROOT/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin:$ROOT/usr/local/sbin:$ROOT/usr/local/bin:$ROOT/usr/sbin:$ROOT/usr/bin:$ROOT/sbin:$ROOT/bin:$ROOT/usr/X11R6/bin
export HOME=/
export TERM=linux
export mountpoint=
export errmsg=
[ "X$chroot"  != "X0" ] && export CHROOT="chroot $ROOT"
mount none /sys -t sysfs
echo 0 > /proc/sys/kernel/printk
export ARGS="$@"
export LOADER=$0
echo LOADER=$LOADER
# Now tell kernel where the real insmod lives
echo "/sbin/insmod" > /proc/sys/kernel/insmod
echo "/sbin/modprobe" > /proc/sys/kernel/modprobe
# Change root device from /dev/fd0 to /dev/ram0
echo "0x100" > /proc/sys/kernel/real-root-dev
#respawn setsid /bin/sh < /dev/tty12 >/dev/tty12 2>/dev/tty12 &
respawn "ttyrun /bin/sh < /dev/tty12 >/dev/tty12 2>/dev/tty12" &
bootlinux
echo boot fail,default init.
exec /bin/busybox init
else
eval  $*
fi

