#!/bin/sh
#
# Simple wrapper for debootstrap, run in the docker build context
#
FAKEROOT=`which fakeroot 2> /dev/null`

exit_and_skip()
{
    exit 3
}

#
# fakeroot is needed to run the bootstrap stage
#
if [ -z $FAKEROOT ]; then
    echo "Please install fakeroot to enable bootstraping"
    exit_and_skip
fi

# We check in order for
#
#  - DEBOOTSTRAP_DIR pointing at a development checkout
#  - PATH for the debootstrap script (installed)
#
# If neither option works then we checkout debootstrap from its
# upstream SCM and run it from there.
#

if [ -z $DEBOOTSTRAP_DIR ]; then
    DEBOOTSTRAP=`which debootstrap 2> /dev/null`
    if [ -z $DEBOOTSTRAP ]; then
        echo "No debootstrap installed, attempting to install from SCM"
        DEBOOTSTRAP_SOURCE=https://anonscm.debian.org/git/d-i/debootstrap.git
        git clone ${DEBOOTSTRAP_SOURCE} ./debootstrap.git
        export DEBOOTSTRAP_DIR=./debootstrap.git
        DEBOOTSTRAP=./debootstrap.git/debootstrap
    fi
else
    DEBOOTSTRAP=${DEBOOTSTRAP_DIR}/debootstrap
    if [ ! -f $DEBOOTSTRAP ]; then
        echo "Couldn't find script at ${DEBOOTSTRAP}"
        exit_and_skip
    fi
fi

#
# Finally check to see if any qemu's are installed
#
BINFMT_DIR=/proc/sys/fs/binfmt_misc
if [ ! -e $BINFMT_DIR ]; then
   echo "binfmt_misc needs enabling for a QEMU bootstrap to work"
   exit_and_skip
else
    # DEB_ARCH and QEMU arch names are not totally aligned
    case "${DEB_ARCH}" in
        amd64)
            QEMU=qemu-i386
            ;;
        armel|armhf)
            QEMU=qemu-arm
            ;;
        arm64)
            QEMU=qemu-aarch64
            ;;
        powerpc)
            QEMU=qemu-ppc
            ;;
        ppc64el)
            QEMU=qemu-ppc64le
            ;;
        s390)
            QEMU=qemu-s390x
            ;;
        *)
            QEMU=qemu-${DEB_ARCH}
        ;;
    esac
    if [ ! -e "${BINFMT_DIR}/$QEMU" ]; then
        echo "No binfmt_misc rule to run $QEMU, can't bootstrap"
        exit_and_skip
    fi
fi

echo "Building a rootfs using ${FAKEROOT} and ${DEBOOTSTRAP} ${DEB_ARCH}/${DEB_TYPE}"

${FAKEROOT} ${DEBOOTSTRAP} --variant=buildd --foreign --arch=$DEB_ARCH $DEB_TYPE . http://httpredir.debian.org/debian || exit 1
exit 0
