#!/bin/bash

TARBALL="$1"

if [ -z "${TARBALL}" ]; then
    echo "usage: $0 <tarball>" >&2
    echo "  <tarball>  chroot tarball created with mmdebstrap" >&2
    exit 1
fi

WHOAMI="$(whoami)"

read -r SUBUID_START SUBUID_COUNT < <(awk -F: -v u="${WHOAMI}" '$1 == u { print $2, $3 }' /etc/subuid)
read -r SUBGID_START SUBGID_COUNT < <(awk -F: -v u="${WHOAMI}" '$1 == u { print $2, $3 }' /etc/subgid)

if [ -z "${SUBUID_START}" ] || [ -z "${SUBGID_START}" ]; then
    echo "error: no subuid/subgid range found for '${WHOAMI}' in /etc/subuid or /etc/subgid" >&2
    exit 1
fi

DESTDIR="$(mktemp --directory)"

unshare --map-user 0 --map-group 0 \
    --map-users ${SUBUID_START},1,1 --map-groups ${SUBGID_START},1,1 \
    chown 1:1 ${DESTDIR}

# extract with correct in-namespace ownership, same as ChrootUnshare.pm does
/usr/libexec/sbuild-usernsexec u:0:${SUBUID_START}:${SUBUID_COUNT} g:0:${SUBGID_START}:${SUBGID_COUNT} \
    -- tar --directory ${DESTDIR} --extract < "${TARBALL}" 2> /dev/null

# now enter it, exactly as _get_exec_argv builds the call
env PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" \
    USER=root LOGNAME=root \
    /usr/libexec/sbuild-usernsexec --pivotroot --nosetsid \
    u:0:${SUBUID_START}:${SUBUID_COUNT} g:0:${SUBGID_START}:${SUBGID_COUNT} \
    ${DESTDIR} root / -- /bin/bash

/usr/libexec/sbuild-usernsexec u:0:${SUBUID_START}:${SUBUID_COUNT} g:0:${SUBGID_START}:${SUBGID_COUNT} -- rm -rf -- ${DESTDIR}
