#!/bin/sh -e

PREREQ=""

# Output pre-requisites
prereqs()
{
        echo "$PREREQ"
}

case "$1" in
    prereqs)
        prereqs
        exit 0
        ;;
esac

LOGFILE=/dev/.initramfs/jasper.log
# If we are already confiugured we dont want to run again
[ -e /root/etc/flash-kernel.conf ] && exit 0

ROOTDEV="mmcblk0p2"

if echo "$root" | grep -q '^UUID='; then
    VOLID=$root
else
    if echo $root| grep -q ^/;then
        ROOTDEV=$(basename $root)
    fi
    VOLID=$(blkid |grep ${ROOTDEV}|awk '{print $2}'|tr -d [\"])
fi

machine=$(grep "^Hardware" /proc/cpuinfo | sed 's/Hardware\s*:\s*//')

UBOOT_PART="/dev/mmcblk0p1"
TMPDIR="/dev/.initramfs/jasper-tmp"
BOOT_SCRIPT="/boot/boot.script"
CONSOLE=""
FBMODE="dvi:1280x720MR-16@60"

# make sure FS is writable
mount -o remount,rw /root

for x in $(cat /proc/cmdline); do
    case ${x} in
        console=tty[A-Z]*)
            CONSOLE="console=${x#*=}"
            echo "detected console= cmdline option, enabling serial console handling"
            cp /root/usr/share/jasper-initramfs/init/serial.conf /root/etc/init/
            ;;
        omapfb.mode=*)
            FBMODE=${x#*=}
            ;;
    esac
done

# create fstab in /root, we only support ext3 partitions atm
echo "setting up fstab"
if ! cat /root/etc/fstab | grep -v '^#' | awk '{print $3}' | grep -q ^proc; then
  echo "proc /proc proc defaults 0 0" >>/root/etc/fstab
fi
if ! grep -q ${VOLID} /root/etc/fstab; then
  echo "${VOLID} / ext3 defaults,noatime,errors=remount-ro 0 1" >>/root/etc/fstab
fi
echo "setting up swap, this will take a moment ..."
if ! grep -q swap /root/etc/fstab; then
    dd if=/dev/zero of=${DIR}/root/SWAP.swap bs=1048576 count=512 >>$LOGFILE 2>&1
    mkswap /root/SWAP.swap >>$LOGFILE 2>&1
    echo "/SWAP.swap  none  swap  sw  0 0" >>/root/etc/fstab
fi

echo "setting up loopback networking"
# create loopback networking device in /root
echo "auto lo" >/root/etc/network/interfaces
echo "iface lo inet loopback" >>/root/etc/network/interfaces

echo "enabling oem-config"
# switch oem-config on
mkdir -p /root/var/lib/oem-config
touch /root/var/lib/oem-config/run

# enable a PPA installation icon in favorites
enable_omap4_ppa()
{
    for suffix in list key eula; do
        cp /root/usr/share/jasper-initramfs/ppa/ti-omap4-ppa.$suffix /root/usr/share/app-install/channels/
    done
    cp /root/usr/share/jasper-initramfs/ppa/ti-omap4-ppa.desktop /root/usr/share/applications/ti-ppa.desktop
    cp /root/usr/share/jasper-initramfs/ppa/ti-ppa.svg /root/usr/share/pixmaps/ti-ppa.svg
}
# create new boot.scr file with root=${VOLID}
case "$machine" in
        "OMAP3 Beagle Board")
            BOARD_OPTS="elevator=noop vram=12M omapfb.mode=${FBMODE}"
        ;;
        "OMAP4430 Panda Board")
            BOARD_OPTS="elevator=noop vram=32M mem=460M@0x80000000 mem=256M@0xA0000000"
            enable_omap4_ppa
        ;;
        "OMAP4430 4430SDP board")
            BOARD_OPTS="elevator=noop vram=32M mem=460M@0x80000000 mem=256M@0xA0000000"
            enable_omap4_ppa
            UBOOT_PART="/dev/mmcblk1p1"
        ;;
esac

echo "writing flash-kernel.conf"
# create flash-kernel setup
echo "UBOOT_PART=${UBOOT_PART}" >/root/etc/flash-kernel.conf
echo "ROOT=${VOLID}" >>/root/etc/flash-kernel.conf

echo "creating boot.script"
cat >"/root${BOOT_SCRIPT}" <<EOF
        fatload mmc 0:1 0x80000000 uImage
        fatload mmc 0:1 0x81600000 uInitrd
        setenv bootargs quiet splash ro ${BOARD_OPTS} root=${VOLID} fixrtc ${CONSOLE}
        bootm 0x80000000 0x81600000
EOF
mkdir -p ${TMPDIR}
mount ${UBOOT_PART} ${TMPDIR}
/root/usr/bin/mkimage -A arm -T script -C none -n "Ubuntu boot script" -d /root${BOOT_SCRIPT} ${TMPDIR}/boot.scr >>$LOGFILE 2>&1
umount ${TMPDIR}
rm -rf ${TMPDIR}

echo "adding SD card optimizations"
cat >"/root/etc/sysctl.d/30-jasper-root-on-sd.conf" <<EOF
# The values below try to reduce disk writes, they were put in place
# by the jasper-initramfs package during first boot of this computer.
# If you encounter problems due to the settings please file a bug
# against the jasper-initramfs ubuntu package.
vm.swappiness = 0
vm.vfs_cache_pressure=50
vm.dirty_background_ratio = 20
vm.dirty_expire_centisecs = 0
vm.dirty_ratio = 80
vm.dirty_writeback_centisecs = 6000
EOF

echo "setting default session"
# default to 2D une session if it is installed
if [ -e /root/usr/share/xsessions/une-efl.desktop ] && [ -e /root/usr/lib/gdm/gdm-set-default-session ];then
    chroot /root /usr/lib/gdm/gdm-set-default-session une-efl >>$LOGFILE 2>&1 || true
fi

# move jasper.log to root filesystem
mv $LOGFILE /root/var/log/

# remount readonly
mount -o remount,ro /root

echo "reboot check"
if [ -e /dev/.initramfs/jasper-reboot ];then
    echo "Rebooting into configuration session ..."
    sleep 1
    reboot
fi
