#!/bin/sh
#

#
# Global environment
# 

CONSOLE=/dev/ttyS0
export CONSOLE

TERM=linux
export TERM

PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH

# prepare filesystems
/bin/mount -n none /proc -t proc
echo 1 > /proc/sys/kernel/printk
echo 3 > /proc/sys/kernel/panic
/bin/mount -t tmpfs tmpfs /dev -o size=102400
/bin/mkdir /dev/pts
/bin/mknod /dev/console c 5 1
/bin/mknod /dev/full c 1 7
/bin/mknod /dev/kmem c 1 2
/bin/mknod /dev/loop0 b 7 0
/bin/mknod /dev/mem c 1 1
/bin/mknod -m 664 /dev/mtd0 c 90 0
/bin/mknod -m 664 /dev/mtd1 c 90 2
/bin/mknod -m 664 /dev/mtd2 c 90 4
/bin/mknod -m 664 /dev/mtd3 c 90 6
/bin/mknod -m 664 /dev/mtd4 c 90 8
/bin/mknod -m 664 /dev/mtd5 c 90 10
/bin/mknod -m 664 /dev/mtd6 c 90 12
/bin/mknod -m 664 /dev/mtd7 c 90 14
/bin/mknod -m 664 /dev/mtd8 c 90 16
/bin/mknod -m 664 /dev/mtd9 c 90 18
/bin/mknod -m 664 /dev/mtdblock0 b 31 0
/bin/mknod -m 664 /dev/mtdblock1 b 31 1
/bin/mknod -m 664 /dev/mtdblock2 b 31 2
/bin/mknod -m 664 /dev/mtdblock3 b 31 3
/bin/mknod -m 664 /dev/mtdblock4 b 31 4
/bin/mknod -m 664 /dev/mtdblock5 b 31 5
/bin/mknod -m 664 /dev/mtdblock6 b 31 6
/bin/mknod -m 664 /dev/mtdblock7 b 31 7
/bin/mknod -m 664 /dev/mtdblock8 b 31 8
/bin/mknod -m 664 /dev/mtdblock9 b 31 9
/bin/mknod -m 666 /dev/null c 1 3
/bin/mknod /dev/port c 1 4
/bin/mknod /dev/random c 1 8
/bin/mknod /dev/rtc c 10 135
/bin/mknod /dev/tty c 5 0
/bin/mknod /dev/tty0 c 4 0
/bin/mknod /dev/tty1 c 4 1
/bin/mknod /dev/tty2 c 4 2
/bin/mknod /dev/tty3 c 4 3
/bin/mknod /dev/ttyS0 c 4 64
/bin/mknod /dev/urandom c 1 9
/bin/mknod /dev/zero c 1 5
/bin/mknod /dev/ptmx c 5 2
/bin/mknod /dev/watchdog c 10 130
/bin/mknod /dev/gpio c 127 0
/bin/mknod /dev/ppp c 108 0
/bin/mknod /dev/int c 69 0
/bin/mount -n pts /dev/pts -t devpts
/bin/mount -n tmpfs /var -t tmpfs -o size=4194304
/bin/mkdir -p /var/run /var/tmp /var/log /var/etc /var/etc/persistent
/bin/chmod 775 /var/run /var/tmp /var/log /var/etc /var/etc/persistent

# Set system date to fw built date
/sbin/date -s BUILD_DATE > /dev/null 2>&1

echo -n "Checking /etc..."
# making sure that critical files are in place
mkdir -p /etc/rc.d /etc/init.d
# forced update
for f in inittab rc.d/rc.sysinit rc.d/rc rc.d/rc.stop ppp; do
	cp -f -r /usr/etc/$f /etc/$f
done

mkdir -p /etc/udhcpc
# do not update if exist
for f in passwd group login.defs profile hosts host.conf \
fstab udhcpc/udhcpc startup.list udhcpc_services; do
    if ! [ -e /etc/$f ]; then
	cp -f /usr/etc/$f /etc/$f
    fi
done

mkdir -p /etc/sysinit
# make symlinks if do not exist
for f in services protocols shells mime.types ethertypes; do
    if ! [ -e /etc/$f ]; then
	ln -s /usr/etc/$f /etc/$f
    fi
done

mkdir -p /etc/boa
# check if we have uploaded certificates
for f in server.crt server.key; do
    if [ -e /etc/persistent/https/$f ]; then
	ln -s /etc/persistent/https/$f /etc/boa/$f
    else
	ln -s /usr/etc/$f /etc/boa/$f
    fi
done

echo "."

# required for 2.5 kernel, but won't hurt for 2.2
if [ -e /proc/sys/kernel/real-root-dev ]; then
    echo 256 > /proc/sys/kernel/real-root-dev
fi

# System configuration
mkdir -p /etc/sysinit/
/sbin/cfgmtd -r -p /etc/ -f /tmp/system.bak
if [ $? -ne 0 ]; then
/sbin/cfgmtd -r -p /etc/ -t 2 -f /tmp/system.bak
if [ $? -ne 0 ]; then
cp /usr/etc/system.cfg /tmp/system.bak
fi
fi
sort /tmp/system.bak > /tmp/system.cfg
rm /tmp/system.bak

# Run configuration parser
if [ -e /sbin/ubntconf ]; then
	/sbin/ubntconf
fi

echo "Executing init..."
exec /sbin/init -f

echo "INTERNAL ERROR!!! Cannot run /sbin/init."
