#!/bin/sh
# run as root at startup in maemo
# license: unlicense.org
set -e

test -e /tmp/.chroot || echo "stopped" >| /tmp/.chroot

STATUS=$( cat /tmp/.chroot )
if test "$STATUS" = "stopped" ; then
  echo starting >| /tmp/.chroot

  # maemo setup
  chmod g+r /dev/pts/*
  insmod /mnt/initfs/lib/modules/2.6.21-omap1/mbcache.ko || true
  insmod /mnt/initfs/lib/modules/2.6.21-omap1/jbd.ko || true
  insmod /mnt/initfs/lib/modules/2.6.21-omap1/ext3.ko || true
  echo 32 > /proc/sys/kernel/pty/max
  echo 2 > /proc/sys/vm/overcommit_memory
  echo 99 > /proc/sys/vm/overcommit_ratio

  # renice kicker, fsck chroot partition
  CHECK=false
  mount -o ro /dev/mmcblk0p1 /media/mmc2
  mount -t proc proc /media/mmc2/proc
  mount -o bind /dev /media/mmc2/dev
  mount -o bind /sys /media/mmc2/sys
  chroot /media/mmc2 sh -c 'renice -n -10 -p $(pgrep kicker)'
  chroot /media/mmc2 fsck -p /dev/mmcblk0p1 || CHECK=true
  umount /media/mmc2/sys
  umount /media/mmc2/dev
  umount /media/mmc2/proc
  umount /media/mmc2
  if test "$CHECK" = true ; then
   echo "fsck exited non-zero"
   exit 1
  fi

  # setup chroot
  mount -o noatime /dev/mmcblk0p1 /media/mmc2
  mount -t proc proc /media/mmc2/proc
  mount -o bind /dev /media/mmc2/dev
  mount -o bind /sys /media/mmc2/sys
  mount -t devpts none /media/mmc2/dev/pts
  mount -t tmpfs -o size=25m,remount tmpfs /tmp
  mount -o bind /tmp /media/mmc2/tmp
  chroot /media/mmc2 fsck -p /dev/mmcblk1p1
  chroot /media/mmc2 mount -o relatime /dev/mmcblk1p1 /home
  chroot /media/mmc2 swapon /home/swap
  #chroot /media/mmc2 invoke-rc.d ssh start # start desired daemons
  STATUS="started"
  echo $STATUS >| /tmp/.chroot
fi

if test "$STATUS" = started ; then
  chown root:tty /dev/pts/*
  chmod g=rw /dev/pts/*
  chroot /media/mmc2 su -l -c bash user
 else
  echo "bad chroot status: $STATUS"
fi
