#!/bin/bash source $(dirname $(realpath $0))/utils.sh function unbox_outer_stage(){ echo "-----------FIRST STAGE-----------" apt install git util-linux if [ -e .repo_cache ]; then select chosen_repo in other $(cat .repo_cache | sort | uniq); do if [ "${chosen_repo}" = "other" ]; then echo -n "git repository url: " read REMOTE else REMOTE=$chosen_repo fi break done else echo -n "git repository url: " read REMOTE fi echo $REMOTE URL_CACHE=$( ( cat .repo_cache; echo $REMOTE;) ) for LINE in $URL_CACHE; do echo $LINE; done | sort | uniq > .repo_cache if [ -e repo ]; then (cd repo; git pull) else git clone "$REMOTE" repo fi if [[ ! -e repo/entry.sh ]]; then echo no entry found; exit 1; fi source repo/entry.sh mkdir -p target export TARGET=$(pwd)/target export UNBOX_ENV_FILE=$(pwd)/.env if [ -e .env ]; then rm .env fi if type -t first_stage > /dev/null; then (first_stage) || (echo first_stage failed; bash) else echo first stage not found fi if type -t chroot > /dev/null; then if type -t arch-chroot > /dev/null; then CHROOT=arch-chroot else CHROOT=chroot fi else echo ERROR: no chroot found 1>&2 exit 1 fi mkdir -p target/root/unbox mount -o bind . target/root/unbox mkdir -p target/root/unbox_data mount -o bind /data target/root/unbox_data $CHROOT target /root/unbox/unbox.sh unbox_inner_stage umount target/root/unbox target/root/unbox_data if type -t post_install_stage > /dev/null; then (post_install_stage) || (echo post_install_stage failed; bash) else echo no post_install_stage found fi if [ -e ${UNBOX_ENV_FILE} ]; then rm ${UNBOX_ENV_FILE} fi exit 0 } function unbox_inner_stage(){ echo "-----------SECOND STAGE-----------" export UNBOX_ENV_FILE=$(pwd)/.env if [ -e ${UNBOX_ENV_FILE} ]; then source ${UNBOX_ENV_FILE} fi if [ -e repo/entry.sh ]; then source repo/entry.sh else echo chosen repository does not contain entry.sh file fi if type -t second_stage > /dev/null; then (second_stage) || (echo second_stage failed; bash) else echo second stage not found fi if [ -e ${UNBOX_ENV_FILE} ]; then rm ${UNBOX_ENV_FILE} fi exit 0 } cd $(dirname $(realpath $0)) if [[ $# -ge 1 ]]; then CMD=$1 shift if type -t $CMD > /dev/null; then $CMD $@ else echo command $CMD found exit 1 fi else git pull $0 unbox_outer_stage fi