#!/bin/sh

. /etc/init.d/funs

CAN_PRINT=1
BOOT_DISK=0
LOG_FILE=/var/log/boot.log

myecho(){
	if [ "$CAN_PRINT" = "1" ]; then
		echo $1 $2
	fi
	echo $1 $2 >> $LOG_FILE
}

startTime(){
	UPTIME=`cat /proc/uptime| awk -F. '{run_days=$1/86400;run_hour=$1/3600;run_minute=($1%3600)/60;run_second=$1%60; run_ms=$1%1000;printf("%dDays %dHours %dMins %dSecs %dms\n",run_days,run_hour,run_minute,run_second,run_ms)}'`
	echo "$UPTIME: $1"   >> $LOG_FILE
}

### END functions
# Main
if [ ! -e /proc ]; then
	/bin/mkdir /proc
fi

# Mount /proc.
[ -f /proc/cmdline ] || /bin/mount /proc

# Don't print message to kconcole now.
echo "0" > /proc/sys/kernel/printk

# Remount rootfs rw.
/bin/mount -o remount,rw /

for i in proc home root sys mnt etc/sysconfig var run run/udev var var/run var/lock var/log; do
	if [ ! -e /$i ]; then
		/bin/mkdir /$i
	fi
done
# Mount system devices from /etc/fstab.
/bin/mount -a
# /bin/busybox --install -s /bin

KERNEL="$(uname -r)"
export PATH=/opt/NetCopy:/usr/local/sbin:/usr/local/bin:"$PATH"

startTime "Start"

# Here we check all the boot parameters using the fastest way known to men, case & loop
for i in `cat /proc/cmdline`; do
  case $i in
    *=*)
    	  case $i in
    	   lang*) LANGUAGE=${i#*=} ;;
    	   kmap*) KEYMAP=${i#*=} ;;
    	   local*) LOCAL=${i#*=} ;;
		   host*) HOST=1 ;;
           bootdisk* ) BOOT_DISK=${i#*=} ;;
           sleep* ) SLEEP_WHEN_FINISH=${i#*=} ;;
           waitusb) WAIT_USB=${i#*=} ;;
    	  esac
      ;;
      *)
	  case $i in
	   embed) EMBED=1 ;;
	   nosyslog) NOSYSLOG=1 ;;
	   noutc) NOUTC=1 ;;
	   nodhcp) NODHCP=1 ;;
	   text) TEXT=1 ;;
	   laptop) LAPTOP=1 ;;
	   showapps) SHOWAPPS=1 ;;
	   pause) PAUSE=1 ;;
	   quiet) CAN_PRINT=0 ;;
	   rhgb) CAN_PRINT=0 ;;
	   shutdown) SHUTDOWN=1 ;;
	   showmenu) SHOW_DESKTOP_MENU=1 ;;
       autoreport2usb) AUTO_REPORT_2_USB=1 ;;
       waitscsi) WAIT_SCSI=1 ;;
	  esac
      ;;
  esac
done

if [ "$CAN_PRINT" != "1" ]; then
	echo -e "\033[?25l]" # hide cursor
	echo 1 > /sys/class/graphics/fbcon/cursor_hide
	clear
fi

myecho "${GREEN}Running Linux Kernel ${YELLOW}$KERNEL${GREEN}.${NORMAL}"

for level in 0 1 2 3 4 5 6 7 8 9; do
{
	ADDON_LIST=$(ls /tmp/packs/$level*.tar.xz 2>>/dev/null)
	for i in $ADDON_LIST; do
	{
		myecho "->Installing $i"
		BASE_NAME=${i%%.*}
		xz -d -f $i 2>> $LOG_FILE
		usleep 100
		tar -x -f $BASE_NAME.tar -C / 2>> $LOG_FILE
		myecho "  Install finish $i"
		rm -f -f $BASE_NAME.tar 2>> $LOG_FILE
	} &
	done
	wait
} 
done

ADDON_LIST=$(ls /tmp/packs/*.tar.xz 2>>/dev/null)
for i in $ADDON_LIST; do
{
	myecho "-->Installing $i"
	BASE_NAME=${i%%.*}
	xz -d -f $i
	tar -x -f $BASE_NAME.tar -C /
	myecho "  Install finish $i"
	rm -f -f $BASE_NAME.tar
} &
done
wait

if [ "$SHUTDOWN" = "1" ]; then
	shutdown >/dev/null 2>&1
	poweroff -f -n >/dev/null 2>&1
	init 0 >/dev/null 2>&1
fi

#myecho "Install finish"
#read junk

ldconfig 2>>/var/log/ldconfig.log >>/var/log/ldconfig.log
depmod -a $KERNEL 2>>/var/log/depmod.log >>/var/log/depmod.log

if [ -n "$SHOW_DESKTOP_MENU" ]; then
	echo "0" > /etc/sysconfig/DisableDeskMenu
fi

if [ -n "$AUTO_REPORT_2_USB" ]; then
	echo "1" > /etc/sysconfig/AutoReportWhenInsertUSB
fi

# Start Udev to populate /dev and handle hotplug events
myecho -n "${BLUE}Starting udev daemon for hotplug support...${NORMAL}"
udevd --daemon 2>>/var/log/udevd.log >>/var/log/udevd.log
udevadm trigger --action=add 2>&1 >>/var/log/udevadm.log &
wait
myecho "${GREEN}Done.${NORMAL}"

myecho -n "${BLUE} Start loop devices...${NORMAL}"
modprobe loop  >/dev/null 2>&1
myecho "${GREEN}Done.${NORMAL}"
if [ -n "$WAIT_SCSI" ]; then
	myecho -n "${BLUE} Waitting SCSI devices...${NORMAL}"
	modprobe -v scsi_wait_scan  >/dev/null 2>&1
	myecho "${GREEN}Done.${NORMAL}"
else
	myecho "${BLUE} Skipping wait SCSI devices...${NORMAL}"
fi

if [ -n "$WAIT_USB" ]; then
	echo $WAIT_USB /etc/sysconfig/wait_udev_before_startx
fi

myecho "${BLUE}Scanning hard disk partitions to create ${YELLOW}/etc/fstab ${NORMAL}"
rebuildfstab & fstab_pid=$!
udevadm control --reload-rules  >>/var/log/udevadm.log 2>>/var/log/udevadm.log &

if [ -n "$NOSYSLOG" ]; then
	myecho "${BLUE} Skipping syslog...${NORMAL}"
else
   syslogd && myecho "${GREEN}syslog started.${NORMAL}"
   klogd && myecho "${GREEN}klog started."
fi

[ -n "$LANGUAGE" ] || LANGUAGE="C"
myecho -n "${GREEN}Setting Language to ${MAGENTA}$LANGUAGE"
echo "LANG=$LANGUAGE" > /etc/sysconfig/language
myecho "${GREEN} Done.${NORMAL}"

[ -n "$TZ" ] || TZ="UTC"
export TZ
myecho -n "${GREEN}Setting Timezone to ${MAGENTA}$TZ"
echo "TZ=$TZ" > /etc/sysconfig/timezone
myecho "${GREEN} Done.${NORMAL}"

if [ -n "$HOST" ]; then
   sethostname
else
   HOST_RAND=`dd if=/dev/urandom bs=1 count=4 2>/dev/null | od -A n -t x4|sed s/[^1-9]//g`
   echo "NC"$HOST_RAND > /etc/hostname
   /bin/hostname -F /etc/hostname
fi

if [ -f /sbin/ifconfig ]; then
	ifconfig lo 127.0.0.1 up
	route add 127.0.0.1 lo &
fi

# dhcp.sh runs udhcpc async, so it exits before network is up
wait4Server() {
   /etc/init.d/dhcp.sh
   SERVER=$1 ; NOPING=$2 ; CNT=0
   if [ "$NOPING" == "1" ] ; then
      until ifconfig | grep Bcast
      do
         [ $((CNT++)) -gt 30 ] && break || sleep 1
      done
      sleep 1
   else
      until ping -c 1 $SERVER >/dev/null 2>&1
      do
         [ $((CNT++)) -gt 30 ] && break || sleep 1
      done
   fi
   DHCP_RAN=1
}

# First process tftp and http entries
modprobe -q squashfs  >/dev/null 2>&1

if [ -e "/opt/NCLoader/ncload.sh" ]; then
	echo $BOOT_DISK >>/opt/NCLoader/BootDisk
	echo $BOOT_DISK >>/opt/NetCopy/BootDisk
	if [ $BOOT_DISK -ne -1 ]; then
		myecho -n "${BLUE} Exec ncload.sh...${NORMAL}"
		/opt/NCLoader/ncload.sh $BOOT_DISK 2>>$LOG_FILE >>$LOG_FILE
		if [ $? -eq 0 ]; then
			myecho "[${GREEN}OK${NORMAL}]"
			myecho -n "${BLUE}Run cui script... "
			/opt/NetCopy/cui.sh >>$LOG_FILE 2>>$LOG_FILE
			if [ $? -eq 0 ]; then
				myecho "[${GREEN}OK${NORMAL}]"
			else
				myecho "[${RED}FAILED${NORMAL}]"
			fi
		else
			myecho "[${RED}FAILED${NORMAL}]"
		fi
	fi
fi

if [ -n "$LAPTOP" ]; then
   echo " ${GREEN}Laptop options enabled (AC,Battery, & PCMCIA).${NORMAL}"
   modprobe ac >/dev/null 2>&1 && modprobe battery  >/dev/null 2>&1
   modprobe yenta_socket >/dev/null 2>&1 || modprobe i82365 >/dev/null 2>&1
   udevadm trigger 2>/dev/null >/dev/null &
   myecho "${GREEN} Done.${NORMAL}"
fi

# If desktop is specified use that
[ -s /etc/sysconfig/desktop ] && DESKTOP=`cat /etc/sysconfig/desktop`

if [ -n "$NODHCP" ]; then
  rm -f /etc/sysconfig/AutoEnableDHCP  2>&1 >>/dev/null
  myecho "${GREEN}Skipping DHCP broadcast/network detection as requested on boot commandline.${NORMAL}"
else
  echo 1 > /etc/sysconfig/AutoEnableDHCP
  /etc/init.d/dhcp.sh &
fi

[ -n "$KEYMAP" ] || KEYMAP="us"
if [ -f "/usr/share/kmap/$KEYMAP.kmap" ]; then
   myecho -n "${GREEN}Setting keymap to ${MAGENTA}$KEYMAP"
   loadkmap < /usr/share/kmap/$KEYMAP.kmap
   echo "KEYMAP=$KEYMAP" > /etc/sysconfig/keymap
   myecho "${GREEN} Done.${NORMAL}"
fi

count=0
while [ ! -e /dev/rtc ]; do
	[ $((count++)) -gt 10 ] && break
	usleep 50000;
done
if [ -e /dev/rtc ]; then
	if [ -n "$NOUTC" ]; then
		hwclock -l -s & 2>/dev/null >/dev/null
	else
		hwclock -u -s & 2>/dev/null >/dev/null
	fi
else
	myecho "${BLUE} Skipping set clock, no rtc devices...${NORMAL}"
fi

# Disable blankScreen on tty.
echo -e "\033[9;0]" > /dev/tty
echo -e "\033[9;0]" > /dev/tty0
echo -e "\033[9;0]" > /dev/tty1
echo -e "\033[9;0]" > /dev/console
echo -e "\033[9;0]"

startTime "All OK"
if [ -n "$PAUSE" ]; then
	echo -e "\033[?25h]" # Show cursor
	echo 0 > /sys/class/graphics/fbcon/cursor_hide
	echo -n "${BLUE}Boot time configuration completed. Press <Enter> to continue.${NORMAL}"
	read junk
fi

if [ -n "$TEXT" ]; then
	echo -e "\033[?25h]" # Show cursor
	echo 0 > /sys/class/graphics/fbcon/cursor_hide
	echo text > /etc/sysconfig/text
fi

if [ -n "$SLEEP_WHEN_FINISH" ]; then
	sleep $SLEEP_WHEN_FINISH
	startTime "Wait $SLEEP_WHEN_FINISH seconds finish."
fi
