#!/bin/sh
#
### BEGIN INIT INFO
# Provides:          bootcdram
# Required-Start:    mountall-bootclean $local_fs
# Required-Stop:
# Default-Start:     S
# Default-Stop:      
# Short-Description: bootcdram starts ramdisks for bootcd
# Description:       When running from bootcd this script creates
#                    ramdisks and mounts them. If not running from
#                    bootcd this script does nothing.
### END INIT INFO

CHNG=""
CHNGGREP="cat"
BORDERLINKS=""

startscript()
{
  # bootcdram.sh	Necessary steps to boot diskless from cd
  # at Boottime /etc -> /ram1/etc -> /etc.ro (also dev, tmp, var, home, root)

  mount -n none -t tmpfs /ram1
  
  if [ -f /ram1.cpio.gz ]; then
    echo 'Extracting /ram1.cpio.gz'
    cd /ram1; zcat /ram1.cpio.gz | cpio -idum
  else
    mkdir /ram1/tmp; chmod 1777 /ram1/tmp
    for i in home root etc dev; do find /$i.ro | $CHNGGREP | cpio -pdm /ram1; done
    for i in home root etc dev; do mv /ram1/$i.ro /ram1/$i; done
  fi
  
  for i in $BORDERLINKS; do
    ln -sf ../$i /ram1/$i
  done
  
  # We now assume udev is always used
  invoke-rc.d udev stop
  umount /dev.ro/pts
  umount /dev.ro/shm
  mount --move /dev.ro /dev
  mount none -t tmpfs /dev/shm
  mount none -t devpts /dev/pts
  invoke-rc.d udev start
  udevadm trigger --action=add
  udevadm trigger --action=change
  udevadm settle
  
  mount -n none -t tmpfs /ram2
  if [ -f /ram2.cpio.gz ]; then
    echo 'Extracting /ram2.cpio.gz'
    cd /ram2; zcat /ram2.cpio.gz | cpio -idum
  else
    find /var.ro -type d | $CHNGGREP | cpio -pdm /ram2
    for i in var; do mv /ram2/$i.ro /ram2/$i; done
  fi
  
  # enable wtmp and lastlog record keeping
  touch /var/log/wtmp /var/log/lastlog
  chown root.utmp /var/log/wtmp /var/log/lastlog
  chmod 664 /var/log/wtmp /var/log/lastlog

  for i in $CHNG; do
    j=$(echo $i | sed "s/\.ro//")
    mkdir -p $(dirname $j)
    [ -e $j ] || ln -s $i $j
  done
}

case "$1" in
  start)
        # Only run this script if we have booted from bootcd
        if [ "$(grep "\<bootcd=" /proc/cmdline)" ]; then
          startscript
        fi
	;;
  restart) 
  	;;
  force-reload)
  	;;
  stop)
  	;;
  restart)
  	;;
  force-reload)
        ;;
  *)
	echo "Usage: /etc/init.d/bootcdram start" >&2
	exit 1
	;;
esac

exit 0
