#!/bin/sh

# this script sets up the buildozer build environment in a chroot/vserver

program=${0##*/}

mirror=${MIRROR:-"http://dev.alpinelinux.org/alpine/v1.9"}
apk_path=${REPO_URL:-"$mirror/packages/core"}

usage() {
	echo "usage: $program DIR"
	echo "set up a buildozer chroot environment in directory DIR"
	echo ""
	exit 1
}


apkurl() {
	file=$(wget -q -O - $apk_path/INDEX.md5.gz | gunzip -c \
		| awk '$2 ~/^'$1'-[0-9]/ {print $2}') || return 1
	[ -n "$file" ] && echo $apk_path/$file
}


vserver_start() {	vserver start "${dir%/*}";	}
vserver_exec() {	vserver "${dir%/*}" exec "$@";	}
vserver_stop() {	vserver stop "${dir%/*}";	}

chroot_start() { 	mount --bind /proc "$dir/proc";	}
chroot_exec() {		chroot "$dir" "$@";		}
chroot_stop() {		umount "$dir/proc";		}

start=chroot_start
exec=chroot_exec
stop=chroot_stop

	
while getopts "hv" opt; do
	case "$opt" in
		h) usage >&2;;
		v) use_vserver=1;;
	esac
done
shift $(($OPTIND - 1))

dir=$1
[ -z "$dir" ] && usage >&2

if [ -n "$use_vserver" ]; then
	start=vserver_start
	exec=vserver_exec
	stop=vserver_stop
fi

mkdir -p "$dir"
rm -f apk.static
wget $mirror/apk.static
chmod +x apk.static
./apk.static --repo "$apk_path" --root $(readlink -f "$dir") add --initdb \
	alpine-baselayout alpine-sdk

cp /etc/resolv.conf $dir/etc/
rm -f $dir/etc/mtab
touch $dir/etc/mtab
mkdir -p $dir/etc/rcL.d $dir/etc/rcK.d $dir/etc/apk $dir/dev/pts $dir/proc \
	$dir/var/run $dir/var/lock

ln -sf ../init.d/syslog $dir/etc/rcL.d/S10syslog
ln -sf ../init.d/syslog $dir/etc/rcK.d/K10syslog
mknod -m 666 $dir/dev/full c 1 7
mknod -m 666 $dir/dev/ptmx c 5 2
mknod -m 644 $dir/dev/random c 1 8 
mknod -m 644 $dir/dev/urandom c 1 9
mknod -m 666 $dir/dev/zero c 1 5
mknod -m 666 $dir/dev/tty c 5 0
echo "$apk_path" >$dir/etc/apk/repositories

$start
$exec /bin/sh -c "adduser -h /var/lib/buildozer -D buildozer"
echo "%wheel        ALL=(ALL)       ALL" >> $dir/etc/sudoers
sed -i -e 's/\(^wheel:.*\)/\1,buildozer/' $dir/etc/group
$stop

