--- toast-linux	2005/02/06 21:11:34	1.137
+++ toast-linux	2005/02/07 06:10:40	1.138
@@ -9,7 +9,7 @@
 set -e
 : > sbin/setup
 chmod +x sbin/setup
-for i in toast help; do ln -s setup "sbin/$i"; done
+for i in toast help; do ln -sf setup "sbin/$i"; done
 sed -e "s,TOPDIR,$topdir,g" > "sbin/setup" << "---"
 #!/bin/sh
 
@@ -373,7 +373,6 @@
   if [ "TOPDIR" = "." ]; then
     export TOASTINIT_NO_LILO=1
     echo "mkdir mnt mnt/boot mnt/lost+found" > tmp/partition
-    return 0
   else
     echo "0" > /proc/sys/kernel/printk
     echo ""
@@ -761,6 +760,7 @@
 
   cat > "$namedir/rootfs/download/command" << "EOF"
 #!/bin/sh -ex
+[ -r /media/cdrom/toast-linux/disk.tar.bz2 ] && exit 0
 if [ "`cd mnt; echo *`" != "boot lost+found" ]; then
   echo "unexpected filesystem contents" >&2
   exit 1
@@ -870,12 +870,18 @@
 mount -t proc proc mnt/proc
 mount -t sysfs sys mnt/sys
 
-bunzip2 mnt/toast/pkg/rootfs/v0/archive/*
-mount -t ext2 -o loop mnt/toast/pkg/rootfs/v0/archive/* mnt/mnt
-mkdir -p mnt/toast/pkg/rootfs/v0/1/root
-tar -c -C mnt/mnt . | tar -x -C mnt/toast/pkg/rootfs/v0/1/root
-umount mnt/mnt
-rm -fr mnt/toast/pkg/rootfs/v0/archive
+file="/media/cdrom/toast-linux/disk.tar.bz2"
+if [ -r "$file" ]; then
+  cd mnt
+  tar xjf "$file"
+else
+  bunzip2 mnt/toast/pkg/rootfs/v0/archive/*
+  mount -t ext2 -o loop mnt/toast/pkg/rootfs/v0/archive/* mnt/mnt
+  mkdir -p mnt/toast/pkg/rootfs/v0/1/root
+  tar -c -C mnt/mnt . | tar -x -C mnt/toast/pkg/rootfs/v0/1/root
+  umount mnt/mnt
+  rm -fr mnt/toast/pkg/rootfs/v0/archive
+fi
 EOF
 
   cat > "$namedir/perl/download/command" << "EOF"
@@ -1443,9 +1449,12 @@
       sleep 3
       [ "$ufile" -nt "$efile" ] || break
 
-      while [ "$building_name/$getting_name/$pending/$stored" = "//0/0" ]; do
-        sleep 9999999 # done!
-      done
+      if [ "$building_name/$getting_name/$pending/$stored" = "//0/0" ]; then
+        # done with everything!
+        stty "$save"
+        echo -ne '\33[?25h\33[0m\33[999;1H\12'
+        return 0
+      fi
     done
   done
 
@@ -1459,6 +1468,7 @@
   fi
   echo
   echo "Aborting."
+  return 1
 }
 
 abort()
@@ -1984,14 +1994,16 @@
   mkdir -p $@/tmp
   cp !CONFIGURE! $@/tmp/configure
 
-cd: $(LARGEK) $(ISOLINUX) rootfs.gz logo.lss moreroot
+cd: $(LARGEK) $(ISOLINUX) rootfs.gz logo.lss moreroot chroot
   rm -fr $@
   !CONFIGURE! $@
   cp logo.lss $@/isolinux/logo.lss
   cp $(LARGEK) $@/isolinux/linux
   cp $(ISOLINUX) $@/isolinux/isolinux.bin
   cp rootfs.gz $@/isolinux/initrd
-  tar cjf $@/toast-linux-ram.tar.bz2 --owner=0 --group=0 -C moreroot .
+  mkdir -p $@/toast-linux
+  tar cjf $@/toast-linux/ram.tar.bz2 --owner=0 --group=0 -C moreroot .
+  tar cjf $@/toast-linux/disk.tar.bz2 --owner=0 --group=0 -C mnt toast
 
 floppy.img: floppy $(MFORMAT) $(SYSLINUX) $(MCOPY) $(MDIR)
   rm -f $@
@@ -2021,7 +2033,14 @@
   pod2man $< > $@
 
 chroot: sbin/setup
+  chroot / true
+  [ ! -S mnt/dev/log ] || umount mnt/dev
+  [ ! -d mnt/proc/1 ] || umount mnt/proc
+  [ ! -d mnt/sys/block ] || umount mnt/sys
+  rm -fr tmp mnt
+  mkdir tmp
   TOAST_NICE=5 sbin/setup
+  touch $@
 
 vmware: vmware-floppy
 
@@ -2485,6 +2504,7 @@
 ifconfig lo 127.0.0.1
 hostname localhost
 if cdrom; then
+  tar xjf /media/cdrom/toast-linux/ram.tar.bz2
   network || true
 else
   network
@@ -2572,18 +2592,16 @@
 --- FILE root/sbin/cdrom ---
 #!/bin/sh
 umount /media/cdrom 2>/dev/null
-file=/media/cdrom/toast-linux-ram.tar.bz2
 cd /sys/block
 for i in *; do
   case "$i" in
     dm*|fd*|loop*|ram*|md*) ;;
     *)
       mount -r -t iso9660 "/dev/$i" /media/cdrom 2>/dev/null
-      if [ -r "$file" ]; then
+      if [ -d /media/cdrom/toast-linux ]; then
         echo "Found cdrom: $i"
         ln -s "$i" /dev/cdrom
-        cd /
-        exec tar xjf "$file"
+        exit 0
       fi
       umount /media/cdrom 2>/dev/null
       ;;