#!/bin/bash

# This script will mount a given image or sd card in loop mode.
# Make sure to change the path and offsets for the image you use. You can get
# the correct offsets using `file $PATH_TO_IMAGE` or fdisk.
# If you want to mount an SD card, unset $IMAGE.

# To make debugging easier
echo "KittenGroomer: in mount_image.sh" 1>&2

if [ "$(id -u)" != "0" ]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi
ls /usr/bin/qemu*arm*
if [ -z $? ]; then
    echo "You need qemu user static binaries." 1>&2
    exit 1
fi
if [ -z "$1" ]; then
    echo "Please tell me what do to after mounting everything..."
    exit
fi
COMMAND=${1}
COMMAND_OPT=${2}

set -e
set -x

# If you use a partition...
PARTITION_ROOTFS='/dev/mmcblk0p2'
PARTITION_BOOT='/dev/mmcblk0p1'
#PARTITION_ROOTFS='/dev/sdd2'
#PARTITION_BOOT='/dev/sdd1'

# If you use the img...
# Double check the path and offsets as noted above!
##### Debian
IMAGE='2017-02-02_CIRCLean.img'
OFFSET_BOOT=$((8192 * 512))
OFFSET_ROOTFS=$((137216 * 512))

CHROOT_PATH='/mnt/arm_rPi'

clean(){
    mv ${CHROOT_PATH}/etc/ld.so.preload_backup ${CHROOT_PATH}/etc/ld.so.preload
    rm ${CHROOT_PATH}/etc/resolv.conf
    rm ${CHROOT_PATH}/usr/bin/qemu*arm*

    umount ${CHROOT_PATH}/dev/pts
    #umount ${CHROOT_PATH}/dev/shm
    umount ${CHROOT_PATH}/dev
    umount ${CHROOT_PATH}/run
    umount ${CHROOT_PATH}/proc
    umount ${CHROOT_PATH}/sys
    umount ${CHROOT_PATH}/tmp
    umount ${CHROOT_PATH}/boot
    umount ${CHROOT_PATH}

    rm -rf ${CHROOT_PATH}
}

trap clean EXIT TERM INT

# enforce the CPU in order to have the armv6 instructions set (and compile working packages...)
export QEMU_CPU=arm1176
#export QEMU_STRACE=1

mkdir -p ${CHROOT_PATH}

if [ ! -z ${IMAGE} ]; then
    mount -o loop,offset=${OFFSET_ROOTFS} ${IMAGE} ${CHROOT_PATH}
    mount -o loop,offset=${OFFSET_BOOT} ${IMAGE} ${CHROOT_PATH}/boot
elif [ -a ${PARTITION_ROOTFS} ]; then
    mount ${PARTITION_ROOTFS} ${CHROOT_PATH}
    mount ${PARTITION_BOOT} ${CHROOT_PATH}/boot
else
    echo 'You need a SD card or an image'
    exit
fi

cp /usr/bin/qemu*arm* ${CHROOT_PATH}/usr/bin/

mount -o bind /run ${CHROOT_PATH}/run
mount -o bind /dev ${CHROOT_PATH}/dev
mount -t devpts pts ${CHROOT_PATH}/dev/pts
#mount -o bind /dev/shm ${CHROOT_PATH}/dev/shm
mount -t proc none ${CHROOT_PATH}/proc
mount -t sysfs none ${CHROOT_PATH}/sys
mount -o bind /tmp ${CHROOT_PATH}/tmp

cp -pf /etc/resolv.conf ${CHROOT_PATH}/etc

mv ${CHROOT_PATH}/etc/ld.so.preload ${CHROOT_PATH}/etc/ld.so.preload_backup

# To make debugging easier
echo "KittenGroomer: Image mounted, executing command from mount_image.sh" 1>&2

${COMMAND} ${CHROOT_PATH} ${COMMAND_OPT}
