#!/bin/sh
# $Id: pbulk-root.sh,v 4.6 2016/02/18 22:48:03 asau Stab asau $
set -e

_progname="${0##*/}"
usage="usage: ${0##*/} [-n] [-c mk.conf.fragment] [-l packages.list] [-p pkgsrc] [-d distdir] [-P packages] [-a agent-script] [path]"

while getopts "c:nl:p:d:P:a:" opt; do
   case $opt in
       c) mk_fragment="${OPTARG}";;
       n) native=yes;;
       l) limited_list="${OPTARG}";;
       p) PKGSRCDIR="${OPTARG}";;
       d) DISTDIR="${OPTARG}";;
       P) PACKAGES="${OPTARG}";;
       a) agent_script="${OPTARG}";;
       \?) echo "$usage" 1>&2; exit 1;;
   esac
done
shift $(expr $OPTIND - 1)

if [ $# -gt 1 ]; then echo "$usage" 1>&2; exit 1; fi

case "$1" in
   */*) JAIL="$1";;     # path
   *)   JAILNAME="$1";; # name
esac

: ${JAILNAME:=pbulk}
: ${JAILBASE:=/usr/jail}
: ${JAIL:=${JAILBASE}/${JAILNAME}}

: ${PKGSRCDIR:=/usr/pkgsrc}
: ${DISTDIR:=${PKGSRCDIR}/distfiles}
: ${PACKAGES:=${PKGSRCDIR}/packages}

: ${agent_script:=${PKGSRCDIR}/mk/pbulk/pbulk.sh}

if [ ! -f "${agent_script}" ]; then # require pbulk deployment script
   echo "${0##*/}: pbulk.sh script required" 1>&2; exit 1
fi

# Create environment, if it doesn't exist, and make it functional in general:
if [ ! -x ${JAIL}/bin/sh ]; then
create-root ${JAIL}
fi
cat /etc/resolv.conf > ${JAIL}/etc/resolv.conf
start-root ${JAIL}

mkdir -p ${DISTDIR}
mkdir -p ${PACKAGES}

mkdir -p ${JAIL}/usr/pkgsrc
mount -t null -o ro ${PKGSRCDIR} ${JAIL}/usr/pkgsrc
mount -t null -o rw ${DISTDIR} ${JAIL}/usr/pkgsrc/distfiles
mount -t null -o rw ${PACKAGES} ${JAIL}/usr/pkgsrc/packages

# Deploy bulk build tools, if not deployed already:
if [ ! -x ${JAIL}/usr/pbulk/bin/bulkbuild ]; then
cat "${agent_script}" > ${JAIL}/root/pbulk.sh
if [ -n "$mk_fragment" ]; then cat "$mk_fragment" > ${JAIL}/root/mk.conf.frag; fi
PACKAGES=/usr/pkgsrc/packages chroot ${JAIL} /bin/sh /root/pbulk.sh ${native:+-n} ${limited_list:+-l} ${mk_fragment:+-c /root/mk.conf.frag}
fi

# Configure limited list, if given:
if [ -n "$limited_list" ]; then cat "$limited_list" > ${JAIL}/usr/pbulk/etc/pbulk.list; fi

# Run:
(unset TMP; unset TEMP; unset TMPDIR; unset DISTDIR; unset PACKAGES; PACKAGES=/usr/pkgsrc/packages WRKOBJDIR=/tmp exec chroot ${JAIL} /usr/pbulk/bin/bulkbuild) ||:

umount ${JAIL}/usr/pkgsrc/packages
umount ${JAIL}/usr/pkgsrc/distfiles
umount ${JAIL}/usr/pkgsrc

# Stop:
stop-root ${JAIL}