#!/bin/bash
echo "System init at `uptime`"

kver=`uname -r`
echo "Load all kernel=$kver modules"
modules=`cat /lib/modules/$kver/modules.load`
for i in $modules ; do
  /sbin/modprobe $i 
done

option=`cat /proc/cmdline | sed s/iceos.opt=/#/ | cut -d "#" -f 2 | cut -d " " -f 1`
if [ "$option" == "" ]; then option="none"; fi

echo "Configure post switchroot boot with option=$option"
source /etc/iceos/conf2vars /etc/network.conf

if cat /proc/cmdline | grep -q ICEOS_ROOT_; then 
  disku=`blkid | grep ICEOS_USER_ | awk -F ':' '{ print $1 }'`
  diskd=`blkid | grep ICEOS_DATA_ | awk -F ':' '{ print $1 }'`
else
  disku=`blkid | grep ICEOS_USER\" | awk -F ':' '{ print $1 }'`
  diskd=`blkid | grep ICEOS_DATA\" | awk -F ':' '{ print $1 }'`
fi

echo "Mount /tmp partition"
mount -t tmpfs tmpfs /tmp -o rw,nosuid,nodev,mode=777
mkdir /tmp/.X11-unix --mode=0777

if [ "$disku" != "" ]; then
  echo "Mount /user partition on $disku"
  e2fsck -pv $disku
  mount -t ext4 $disku /user
fi

echo "Start network eth0 at $hostaddr"
ifconfig eth0 $hostaddr netmask $hostmask up
route add default gw $hostgate

if [ -f /var/etc/network.conf ]; then
  route del $hostdest eth0
  route del default gw $hostgate
  ifconfig eth0 down
  source /etc/iceos/conf2vars /var/etc/network.conf
  echo "Restart network at $hostaddr"
  ifconfig eth0 $hostaddr netmask $hostmask up
  route add default gw $hostgate

elif [ "$option" != "net" ]; then 
  echo "Check for network reconfig ping"
  /etc/iceos/checkNetCfgPing
fi

hostname $hostname
cat /etc/hosts.base  > /var/etc/hosts
echo "$hostaddr $hostname" >> /var/etc/hosts

echo "Start SSH daemon"
/usr/sbin/sshd

for ii in 1 2 3 4 5 6 7 8 ; do
  if ifconfig eth$ii 2>/dev/null | grep -q Ethernet; then
    addr=`echo $pic1addrx | sed s/X/$ii/`
    echo "Start network eth$ii at $addr"
    ifconfig eth$ii $addr netmask $hostmask up
  fi
done

echo "Configure Arduino ports"
/etc/iceos/checkArduino 1
/etc/iceos/checkReboot "Arduino"

echo "Start ICE drivers: icepic,iceram,iceblk,icefs"
if [ -f /var/etc/icepic ]; then 
  /var/etc/icepic start
else
  /etc/init.d/icepic start
fi

if [ -e /var/etc/asserts.conf ]; then
  /etc/iceos/checkAsserts /var/etc/asserts.conf
  /etc/iceos/checkReboot "Devices"
fi

if [ "$diskd" != "" ]; then
  echo "Mount /mnt/data ext4 partition on $diskd"
  e2fsck -pv $diskd
  mount $diskd /mnt/data
fi

if [ -e /var/etc/fstab ]; then
  echo "Mount partitions in /var/etc/fstab"
  mount -a -T /var/etc/fstab
fi

if [ -f /etc/openvpn/ice-openvpn ]; then 
  echo "Configure openvpn"
  /etc/openvpn/ice-openvpn start
fi

if [ -e /dev/usbtmc0 ]; then 
  echo "Configure usbtmc port"
  chmod a+rw /dev/usbtmc*
fi

if [ -e /var/etc/chrony.conf ]; then 
  echo "Start chrony NTP time daemon"
  /usr/sbin/chronyd -f /var/etc/chrony.conf 
  chmod g+w /run/chrony /run/chrony/chronyd.sock
fi

if [ -e /var/etc/crontab ]; then 
  echo "Start cron daemon"
  /usr/sbin/crond
fi

echo "Start ICE daemon"
/etc/iceos/icedaemon &

echo "Start VNC session at $hostaddr:1 on tty2"
openvt -c 2 -s su -l iceman -c "/etc/iceos/vncserver 1" 

echo "Start ICE console on tty3"
openvt -c 3 -s /etc/iceos/runConsole

#echo "Start root terminal on tty4"
#openvt -c 4 -s bash

