sudo sh <<"EOF"
meh() { printf " \033[1;32m*\033[0m %s\n" "${*}"; }
omg() { printf " \033[1;33m*\033[0m %s\n" "${*}"; }
wtf() { printf " \033[1;31m* FAIL\033[0m %s\n" "${*}"; exit 1; }
makeopts=-j8
target=amd64
config=GENERIC
home="/usr/home/cyberleo/worlds"
world="${home}/${target}/$(echo "${config}" | tr 'A-Z' 'a-z')"
seed="${home}/seed/src"
build="${home}/seed/root"
date="$(date +%Y%m%d)"
prepare() {
meh "Preparing build environment"
[ -d "${build}" ] && wtf "${build}: directory exists"
mkdir -p "${build}" || wtf
cat "${seed}"/base.?? | tar xCf "${build}" - || wtf
mkdir -p "${build}/usr/obj" || wtf
meh "Mounting chroot directories"
mkdir -p "${worlds}/root"
mount -t devfs devfs "${build}/dev" || wtf
mount -t nullfs /usr/src "${build}/usr/src" || wtf
mount -t nullfs /usr/obj "${build}/usr/obj" || wtf
mount -t nullfs "${world}/root" "${build}/mnt" || wtf
}
cleanup() {
meh "Cleaning up"
umount -f "${build}/mnt"
umount -f "${build}/usr/obj"
umount -f "${build}/usr/src"
umount -f "${build}/dev"
mount | grep -q "${build}" && wtf "Stuff is still mounted under ${build}; not removing"
chflags -R noschg "${build}"
rm -Rf "${build}"
}
trap "cleanup" exit hup int term kill
mount | grep -q "${build}" && wtf "Stuff is mounted under ${build}"
if [ -d "${build}" ]
then
omg "${build}: directory exists; purging"
cleanup
fi
prepare
meh "==> Building in seed ${seed} for ${target}-${config} in ${build}; destdir is ${worlds}"
for phase in buildworld buildkernel distrib-dirs installworld installkernel distribution
do
meh "==> Phase: ${phase}"
script "${world}/${date}-${phase}.log" chroot "${build}" sh -c \
"cd /usr/src; time make ${makeopts} ${phase} TARGET=${target} KERNCONF=${config} DESTDIR=/mnt" || wtf
done
EOF