#!/bin/bash
source lib/function/echoes
source lib/source
validation
if [[ -f "board.txt" ]]; then . board.txt; else noboard; fi
sleep 1
source userdata.txt
source lib/function/rootfs
source lib/function/release
source custom.txt
# clean
if [[ -d "sysroot" ]] || [[ -d "p1" ]] || [[ -d "BOOT" ]] || [[ -f "shrink.img" ]]; then make clean; clear -x; fi
# verbosity
if [ $VERBOSE -eq 1 ]; then set -eux -o pipefail; else set -eu -o pipefail; fi
mirrors
# restrictions
if [[ "$HOST_ARCH" == "aarch64" ]] && [[ "$DISTRO" == "raspbian" ]]; then
	echo -e "Aarch64 is currently not supported."
	echo -e "To build an Raspbian IMG you need to use x86_64."
	echo -e ""
	read -p "Press enter to continue."
	exit 0
fi
if [[ "$ROOTFS_ARCH" == "rootfs-armel" ]] && [[ "$DISTRO" == "ubuntu" ]]; then
	echo -e "Ubuntu does not support ${ARCH_EXT}."
	echo -e ""
	read -p "Press enter to continue."
	exit 0
fi
if [[ "$ROOTFS_ARCH" == "rootfs-armel" || "$ROOTFS_ARCH" == "rootfs-arm64" ]] && [[ "$DISTRO" == "raspbian" ]]; then
	echo -e "Raspbian does not support ${ARCH_EXT}."
	echo -e ""
	read -p "Press enter to continue."
	exit 0
fi
# keyrings and setups
if [[ "$DISTRO" =~ ^(devuan||kali|raspbian)$ ]]; then ${DISTRO}_keyring; fi
if [[ "$HOST_MACHINE" == "Ubuntu" ]]; then :; else if [[ "$DISTRO" == "ubuntu" ]]; then ${DISTRO}_keyring; fi; fi
# check for qemu
if [[ `command -v ${STATIC}` ]]; then
	:;
else
	echo -e "Missing depends: ${STATIC}"
	echo -e "Run ./install.sh"
	exit 1
fi
if [[ `command -v mmdebstrap` ]]; then
	:;
else
	echo -e "Missing depends: mmdebstrap"
	apt install -y mmdebstrap
fi

ROOT="sysroot"
SOURCES_LIST="${ROOT}/etc/apt/sources.list"
RELEASE_TARBALL=${DISTRO}-${DISTRO_VERSION}-${ROOTFS_ARCH}.tar.xz
if [[ -f "$RELEASE_TARBALL" ]]; then ls -ls $RELEASE_TARBALL; exit 0; fi
CAP_DISTRO=`echo "${DISTRO}" | sed -e "s/\b\(.\)/\u\1/g"`
CAP_RELEASE=`echo "${DISTRO_VERSION}" | sed -e "s/\b\(.\)/\u\1/g"`
echo -e ""
echo -e "${WHT}Distribution${FIN} ${PNK}[${FIN}${GRN}${CAP_DISTRO} ${CAP_RELEASE}${FIN}${PNK}]${FIN}"
echo -e ""
echo -e "${WHT}Running bootstrap${FIN} ..."
# start bootstrap
if [ $DEVROOTFS -eq 1 ]; then
	RAM=0
	ROOTFS_FOLDER="img/"
	RELEASE_NAME=${DISTRO}-${DISTRO_VERSION}-${ROOTFS_ARCH}
	if [ $RAM -ne 0 ]; then IMAGE_FOLDER="ram/"; fi
	mkdir -p "$ROOTFS_FOLDER"
	if [ $RAM -ne 0 ]; then mount -t tmpfs -o size=4G tmpfs $ROOTFS_FOLDER; fi
	if [ $VERBOSE -eq 1 ]; then sysroot_partition; else sysroot_partition > /dev/null 2>&1; fi
fi
mkdir -p ${ROOT}/usr/bin
cp $(command -v "${STATIC}") ${ROOT}/usr/bin
run_debootstrap

# creating developer tarball
if [ $DEVROOTFS -eq 1 ]; then
	sysroot_setup
	mount -o bind /dev ${ROOT}/dev
	mount -o bind /dev/pts ${ROOT}/dev/pts
	cp -f lib/source ${ROOT}/root/source.txt
	cp -f {scripts/rootfs-extra,userdata.txt,board.txt} ${ROOT}/root/
	chroot ${ROOT} /root/rootfs-extra
	umount ${ROOT}/dev/pts
	umount ${ROOT}/dev
	rm -fr ${ROOT}/root/{rootfs-extra,*.txt}
	rm -f ${ROOT}/etc/dpkg/dpkg.cfg.d/dpkg-unsafe-io
	rm -f ${ROOT}/etc/apt/sources.list
fi

# clean up
rm -f ${ROOT}/usr/bin/${STATIC}
if [[ -e "${ROOT}/lost+found" ]]; then rm -fdr ${ROOT}/lost+found; fi
rm -fdr ${ROOT}/var/cache/debconf/*
rm -fdr ${ROOT}/*usr-is-merged*

# finish
echo ""
echo -e "── Archiving ${PNK}[${FIN}${WHT}${RELEASE_TARBALL}${FIN}${PNK}]${FIN}"
cd ${ROOT}
XZ_DEFAULTS="--threads=${CORES}"; export XZ_DEFAULTS;tar cfJ - * | (pv -terb > ../$RELEASE_TARBALL)
cd ..
if [ $DEVROOTFS -eq 1 ]; then
	losetup -d "${IMAGE_LOOP_DEV}"
	rm -f "${ROOTFS_FOLDER}${RELEASE_NAME}"
	if [ $RAM -ne 0 ]; then umount "${ROOTFS_FOLDER}"; fi
	rmdir "${ROOTFS_FOLDER}"
fi

if [[ -d "${ROOT}" ]]; then umount ${ROOT}; sleep .50; rm -fdr ${ROOT}; fi
if [[ "$HOST_MACHINE" =~ ^(Debian|Ubuntu)$ ]] && [[ "$DISTRO" == "devuan" ]]; then rm -f ${DEBOOTSTRAP_DIR}/{chimaera,daedalus,excalibur}; fi

exit 0
