#!/bin/sh

SYSTEM_RECOVERY_GUI="/usr/libexec/system-recovery/system-recovery.gui"
SYSTEM_RECOVERY_NON_GUI="/usr/libexec/system-recovery/system-recovery.non_gui"
FAKE_ROOT=/system

MOUNT="/usr/bin/mount"
BLKID="/usr/sbin/blkid"
REBOOT="/usr/libexec/initrd-recovery/minireboot"
SYNC="/usr/bin/sync"
UMOUNT="/usr/bin/umount"

#------------------------------------------------
#       get partition id
#------------------------------------------------
get_partition_id() {
    PART_ROOTFS=$("$BLKID" --match-token PARTLABEL=ROOTFS -o device || "$BLKID" --match-token LABEL=rootfs -o device)
    PART_SYSTEM_DATA=$("$BLKID" --match-token PARTLABEL=SYSTEM-DATA -o device || "$BLKID" --match-token LABEL=system-data -o device)
    PART_USER=$("$BLKID" --match-token PARTLABEL=USER -o device || "$BLKID" --match-token LABEL=user -o device)
}

#------------------------------------------------
#       mount_partitions
#------------------------------------------------
mount_partitions() {
    echo "mount partitions"
    get_partition_id

    "$MOUNT" -t ext4 ${PART_ROOTFS} ${FAKE_ROOT} -o ro
    "$MOUNT" -t ext4 ${PART_SYSTEM_DATA} ${FAKE_ROOT}/opt
    "$MOUNT" -t ext4 ${PART_USER} ${FAKE_ROOT}/opt/usr

    "$MOUNT" -t proc none ${FAKE_ROOT}/proc
    "$MOUNT" -t sysfs none ${FAKE_ROOT}/sys
    "$MOUNT" -t smackfs smackfs ${FAKE_ROOT}/sys/fs/smackfs
    "$MOUNT" -t devtmpfs devtmpfs ${FAKE_ROOT}/dev
    "$MOUNT" -t devpts devpts ${FAKE_ROOT}/dev/pts
    "$MOUNT" -t tmpfs tmpfs ${FAKE_ROOT}/tmp -o mode=1777,smackfsroot=*
}

#------------------------------------------------
#       umount_partitions
#------------------------------------------------
umount_partitions() {
    echo "umount partitions"
   "$SYNC"

    "$UMOUNT" ${FAKE_ROOT}/opt/usr
    "$UMOUNT" ${FAKE_ROOT}/opt
    "$UMOUNT" ${FAKE_ROOT}
}

#------------------------------------------------
#       do_reboot
#------------------------------------------------
do_reboot() {
    echo "Reboot"
    "$SYNC"
    "$REBOOT"
    while [ 1 ]
    do
        sleep 1
        echo "."
    done
}

#------------------------------------------------
#       system-recovery initrc
#------------------------------------------------
echo "Starting system recovery."
mount_partitions

# For debugging - It should be deleted on Release
/sbin/agetty -l /bin/sh -n --keep-baud 115200,38400,9600 ttyS1 linux &

if [ -x "${SYSTEM_RECOVERY_GUI}" ]; then
	export XDG_RUNTIME_DIR=/run
	export TBM_DISPLAY_SERVER=1
	"${SYSTEM_RECOVERY_GUI}"
else
	"${SYSTEM_RECOVERY_NON_GUI}"
fi

umount_partitions
do_reboot
