#!/bin/bash 

LD_VERSION=""
unset LANG
unset LC_ALL
unset LANGUAGE
UMASK=$(umask)
umask 022

if [ -e /etc/lessdisks-install.conf ] ; then 
  . /etc/lessdisks-install.conf 
fi

set -e 

while [ $# -gt 0 ] ; do 
  case $1 in 
    --do-format) DO_FORMAT=true ;;
    *) echo "Dont know how to handle option(s) $*" ; exit 9 ;;
  esac
  shift
done


LD_DEV=$(sed -ne 's:\(.*\) */var/lib/lessdisks.*:\1:p' /etc/fstab)
if [ -z "$LD_DEV" ] ; then 
  mkdir /var/lib/lessdisks
  lvcreate -L 512 -n lv_less vg_system
  LD_DEV=/dev/mapper/vg_system-lv_less
  echo "$LD_DEV /var/lib/lessdisks ext3 defaults 0 2" >> /etc/fstab
  DO_FORMAT=true
fi

# if /var/lib/lessdisks is exported through /etc/exports
if grep -q "^/var/lib/lessdisks" /etc/exports ; then 
  /etc/init.d/nfs-kernel-server stop
fi

# Check if /var/lib/lessdisks is exported
if exportfs -v | grep -q ^/var/lib/lessdisks ; then
  exportfs -u *:/var/lib/lessdisks
fi


if [ "$DO_FORMAT" = "true" ] ; then 
  # if /var/lib/lessdisks is mounted
  if [ "$(sed -ne 's:.* \(/var/lib/lessdisks\) .*:\1:p' /proc/mounts)" ] ; then 
  # Kill processes that are currently running on /var/lib/lessdisks
    fuser -mvk /var/lib/lessdisks/ || /bin/true
  
    # unmount /var/lib/lessdisks
    umount /var/lib/lessdisks/ || \
      (lessdisks-chroot tac /proc/mounts | \
        while read DEV MOUNT NULL ; do 
          lessdisks-chroot umount $MOUNT 
        done 
      umount /var/lib/lessdisks/ )
  fi

  # Reformat /var/lib/lessdisks 
  mke2fs -j $LD_DEV
fi

if ! mount | grep -q "/var/lib/lessdisks" ; then 
  mount /var/lib/lessdisks/
fi


# Export lessdisks 
if ! grep -q "^/var/lib/lessdisks" /etc/exports ; then 
  echo "/var/lib/lessdisks 192.168.0.0/24(ro,async,no_root_squash)" >> /etc/exports 
fi

# Restart NFS to get lessdisks exported
invoke-rc.d nfs-kernel-server restart 

# We do want noninteractive install
export lessdisks_noninteractive="true"

# Mount the CDRom
if [ "$defaultarchive" = "cdrom" ] ; then 
  mount /cdrom
fi

# run the installscript for lessdisks chroot
lessdisks-install --skip --dialog=noninteractive

# Kill processes that are currently running on /var/lib/lessdisks
fuser -mvk /var/lib/lessdisks/ || /bin/true

# Set up some basic for the lessdisks-chroot
cp /etc/console/boottime.kmap.gz /var/lib/lessdisks/etc/console/
debconf-get-selections | grep "^locales" | \
  lessdisks-chroot debconf-set-selections
cat /usr/lib/debian-edu-install/defaults.lessdisks | \
    lessdisks-chroot debconf-set-selections       

LD_DEFAULTCONF=/var/lib/lessdisks/etc/lessdisks/terminals/default
XKBLAYOUT=$(debconf-show xserver-xfree86 | sed -ne "s/.*keyboard.layout: //p")
if [ ! -e $LD_DEFAULTCONF ] ; then 
  echo "export XKBLAYOUT=$XKBLAYOUT" > $LD_DEFAULTCONF
fi

if [ -f /etc/locale.gen -a ! -f /var/lib/lessdisks/locale.gen ] ; then 
  cp /etc/locale.gen /var/lib/lessdisks/etc/locale.gen 
fi


# install som more packages
lessdisks-aptget install -qy lessdisks-xterminal locales libnss-ldap libpam-ldap debian-edu-config

# lock the root account in the lessdisks chroot
lessdisks-chroot passwd -l root

# Make the ldap users availible in the chroot
lessdisks-chroot cfengine-debian-edu -Dinstallation

# Kill processes that are currently running on /var/lib/lessdisks
fuser -mvk /var/lib/lessdisks/ || /bin/true

# Create a new resolv.conf based on the one on the host
rm -rf /var/lib/lessdisks/etc/resolv.conf
sed 's:127.0.0.1:10.0.2.2:g' /etc/resolv.conf > /var/lib/lessdisks/etc/resolv.conf


# Set up lessdisks pxeboot environment
mkdir -p /tftpboot/lessdisks
case "$newarch" in 
  i386)
    ln -sf /var/lib/lessdisks/boot/vmlinuz /tftpboot/lessdisks
    ln -sf /var/lib/lessdisks/boot/initrd.img /tftpboot/lessdisks
    ;;
  powerpc)
    ln -sf /var/lib/lessdisks/boot/vmlinuz-*-powerpc /tftpboot/lessdisks/
    ;;
esac

# Set up pxelinux, but only if syslinux is installed (i386)
if [ -e /usr/lib/syslinux/pxelinux.0 ] ; then 
  mkdir -p /tftpboot/pxelinux.cfg 
  if [ ! -e /tftpboot/pxelinux.0 ] ; then 
    ln -s /usr/lib/syslinux/pxelinux.0 /tftpboot/
  fi
  if [ -e /tftpboot/pxelinux.cfg/default.pre_lessdisks_xterm_install ] ; then 
    echo "seems like pxelinux has been set up once before, bailling out"
  else
    if [ -f /tftpboot/pxelinux.cfg/default ] ; then 
      mv /tftpboot/pxelinux.cfg/default \
         /tftpboot/pxelinux.cfg/default.pre_lessdisks_xterm_install
    fi
    if [ -e /tftpboot/lts/bzImage-2.4.26-ltsp-2 ] ; then 
      cat << EOF > /tftpboot/pxelinux.cfg/menu




     Please enter lessdisks or ltsp
       lessdisks - Use Lessdisks as an ltsp replacement
       ltsp - Normal boot of ltsp

     Default is ltsp

EOF
      cat << EOF > /tftpboot/pxelinux.cfg/default
DISPLAY pxelinux.cfg/menu
PROMPT 1
TIMEOUT 50
default ltsp
label ltsp
  kernel lts/bzImage-2.4.26-ltsp-2
  append init=/linuxrc rw root=/dev/ram0 initrd=lts/initrd-2.4.26-ltsp-2.gz
EOF
    else
      cat << EOF > /tftpboot/pxelinux.cfg/default
PROMPT 0
TIMEOUT 50
default lessdisks
EOF
    fi
    cat << EOF >> /tftpboot/pxelinux.cfg/default
label lessdisks
  kernel lessdisks/vmlinuz
  append initrd=lessdisks/initrd.img ip=dhcp root=/dev/nfs nfsroot=/var/lib/lessdisks 
EOF
    if [ ! -e /etc/dhcp3/dhcpd-lessdisks.conf ] ; then 
      sed 's:/tftpboot/lts/pxelinux.0:/tftpboot/pxelinux.0:g' /etc/dhcp3/dhcpd-debian-edu.conf > /etc/dhcp3/dhcpd-lessdisks.conf
      if [ -h /etc/dhcp3/dhcpd.conf ] ; then 
        rm /etc/dhcp3/dhcpd.conf 
      else
        mv /etc/dhcp3/dhcpd.conf /etc/dhcp3/dhcpd-pre_lessdisks_xterm_install.conf
      fi
      ln -s dhcpd-lessdisks.conf /etc/dhcp3/dhcpd.conf
      /etc/init.d/dhcp3-server restart 
    fi
  fi
fi

if mount | grep -q "/var/lib/lessdisks/cdrom" ; then 
  umount /var/lib/lessdisks/cdrom
fi

umask $UMASK
