#!/bin/bash

source GoboPath
source StartFunctions
source ScriptFunctions
Import PostInstall
Import Requirements

export LANG=en_US.UTF-8

clear

######################################
# Hostname => "LiveCD"
######################################
msg "Setting hostname"
hostname LiveCD

######################################
# start the udev daemon
######################################
msg "Starting Udev"
mountpoint -q /sys || mount -t sysfs none /sys
${goboTasks}/Udev
msg "Starting log daemon"
syslogd

######################################
# load OSS compatibility for ALSA
######################################
modinfo snd-pcm-oss   >& /dev/null && modprobe snd-pcm-oss
modinfo snd-mixer-oss >& /dev/null && modprobe snd-mixer-oss

######################################
# load FUSE for unionfs
######################################
modinfo fuse >& /dev/null && modprobe fuse

######################################
# launch the loopback interface
######################################
msg "Launching the loopback interface"
ifconfig lo 127.0.0.1

######################################
# mount extra partitions
######################################
for i in `fdisk -l | grep "Linux swap" | cut -d" " -f1`
do 
  msg "Enabling swap on $i"
  swapon "$i"
done

######################################
# Mount remaining filesystems
######################################
mount -a -t tmpfs,usbfs
mountpoint -q /System/Kernel/Modules || mount /System/Kernel/Modules

############################################################
# Run PostInstall scripts and prepare the Environment Cache
############################################################
cat /dev/null > ${goboEnvironment}/Cache
for package in `ls ${goboPrograms}`
do

   # Skip annoying packages not needed in the live environment
   if [ "${package}" = "DocBook-XML-DTD" -o "${package}" = "DocBook-XSL-Stylesheets" ]
   then
      continue
   fi

   version="$(readlink ${goboPrograms}/${package}/Current)"
   if [ -e ${goboPrograms}/${package}/${version}/Resources/PostInstall ]
   then
      chmod +x ${goboPrograms}/${package}/${version}/Resources/PostInstall
      Run_PostInstall "${package}" "${version}" "" "" "/" 2>&1 >/dev/null
   fi
   if [ -e ${goboPrograms}/${package}/${version}/Resources/Environment ]
   then
      ln -nfs ${goboPrograms}/${package}/${version}/Resources/Environment ${goboEnvironment}/${package}--${version}
      cat ${goboPrograms}/${package}/${version}/Resources/Environment >> ${goboEnvironment}/Cache
   fi
done
source ${goboEnvironment}/Cache

######################################
# Initialize Users directory
######################################
msg "Initializing home directory"
mkdir -p ${goboUsers}
export HOME=${goboUsers}/root
if [ ! -f $HOME/.zshrc ]
then
    cp -a ${goboPrograms}/EnhancedSkel/Current/Resources/Defaults/Settings/skel $HOME || mkdir -p $HOME
    cp -a ${goboPrograms}/LiveCD/Current/Data/Users_gobo/.local $HOME
    cp -a ${goboPrograms}/LiveCD/Current/Data/Users_gobo/.zshrc $HOME

    cd $HOME
    GrepReplace -R "/Users/testuser" $HOME
    rm -f Desktop/Manager.desktop
    cd - &> /dev/null
fi

########################################
# GoboHide task
########################################
msg "Hiding legacy directories"
StartTask GoboHide

########################################
# Message bus
########################################
msg "Starting message bus and hardware abstraction layer"
StartTask MessageBus

######################################
# Printing services
######################################
msg "Starting printing services"
StartTask CUPS
StartTask Avahi

######################################
# Change console font
######################################
msg "Setting console font"
if [ "$LANG" = "hu_HU" ]
then setfont "${goboSettings}/kbd/consolefonts/lat2-16.psfu.gz"
else setfont "${goboShared}/consolefonts/lode-2.0-lat1u-16.psfu.gz"
fi

######################################
# Launch the configuration script
######################################
ConfigureLiveCD
export LANG=`cat ${goboTemp}/setup/language`

######################################
# DHCP
######################################
# Executes the 'launch_dhcp' function if an ethernet interface was found
for interface in $(NetInterfaces)
do
   if ifconfig $interface  >& /dev/null 
   then
      msg "Starting dhcp client on $interface";
      launch_dhcp $interface;
   fi
done

######################################
# Configure date and time
######################################
msg "Configuring date and time"
hwclock --hctosys

######################################
# Prepare grub device map file
######################################
msg "Preparing GRUB device map"
device_map="${goboBoot}/grub/device.map"
[ -e "$device_map" ] || echo quit | grub --device-map "$device_map" --batch &> /dev/null &

######################################
# Welcome message
######################################
clear
cat ${goboPrograms}/LiveCD/Current/Data/Language/Welcome_${LANG}

#################################################
# Fix the multi-user console and enable CD eject
#################################################
inittablnk=${goboPrograms}/LiveCD/Settings/inittab
rm -f ${goboSettings}/inittab
cp $inittablnk ${goboSettings}/inittab
GrepReplace -B "/System/Index/bin/BootDriver Reboot" \
               "/System/Tasks/Eject start Reboot" \
               ${goboSettings}/inittab
