svn commit: r364887 - user/gjb/thermite-git
Glen Barber
gjb at FreeBSD.org
Thu Aug 27 21:01:03 UTC 2020
Author: gjb
Date: Thu Aug 27 21:01:01 2020
New Revision: 364887
URL: https://svnweb.freebsd.org/changeset/base/364887
Log:
Copy primary scripts and configuration files from thermite to
thermite-git for 13.x.
Sponsored by: Rubicon Communications, LLC (netgate.com)
Added:
user/gjb/thermite-git/
user/gjb/thermite-git/builds-13.conf
- copied unchanged from r364886, user/gjb/thermite/builds-12.conf
user/gjb/thermite-git/defaults-13.conf
- copied unchanged from r364886, user/gjb/thermite/defaults-12.conf
user/gjb/thermite-git/main.conf
- copied unchanged from r364886, user/gjb/thermite/main.conf
user/gjb/thermite-git/thermite.sh
- copied unchanged from r364886, user/gjb/thermite/thermite.sh
user/gjb/thermite-git/zfs-cleanup.sh
- copied unchanged from r364886, user/gjb/thermite/zfs-cleanup.sh
Copied: user/gjb/thermite-git/builds-13.conf (from r364886, user/gjb/thermite/builds-12.conf)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/gjb/thermite-git/builds-13.conf Thu Aug 27 21:01:01 2020 (r364887, copy of r364886, user/gjb/thermite/builds-12.conf)
@@ -0,0 +1,28 @@
+#!/bin/sh
+#
+# $FreeBSD$
+#
+
+. "${__BUILDCONFDIR}/main.conf"
+
+releasesrc="head"
+heads="12"
+stables=
+
+revs="${heads} ${stables}"
+archs="amd64 i386 powerpc powerpc64 powerpcspe sparc64 arm armv6 armv7 aarch64"
+types="snap"
+
+x86_kernels="GENERIC"
+arm_kernels="ALLWINNER_UP BANANAPI BEAGLEBONE CUBIEBOARD CUBIEBOARD2 CUBOX-HUMMINGBOARD GUMSTIX"
+arm_kernels="${arm_kernels} RPI-B RPI2 RPI3 PANDABOARD WANDBOARD PINE64"
+kernels="${x86_kernels} GENERIC64 ${arm_kernels} MPC85XXSPE"
+
+case ${types} in
+ snap)
+ BUILDSVNREV="$(cat ${__BUILDCONFDIR}/svnrev_src)"
+ BUILDDATE="$(cat ${__BUILDCONFDIR}/builddate)"
+ ;;
+ *)
+ ;;
+esac
Copied: user/gjb/thermite-git/defaults-13.conf (from r364886, user/gjb/thermite/defaults-12.conf)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/gjb/thermite-git/defaults-13.conf Thu Aug 27 21:01:01 2020 (r364887, copy of r364886, user/gjb/thermite/defaults-12.conf)
@@ -0,0 +1,27 @@
+#!/bin/sh
+#
+# $FreeBSD$
+#
+
+. "${__BUILDCONFDIR}/main.conf"
+
+BUILDSVNREV="$(cat ${__BUILDCONFDIR}/svnrev_src)"
+BUILDDATE="$(cat ${__BUILDCONFDIR}/builddate)"
+BUILDTYPE="snap"
+
+SRCBRANCH="base/head@${BUILDSVNREV}"
+PORTBRANCH="ports/head at HEAD"
+DOCBRANCH="doc/head at HEAD"
+
+WITH_DVD=
+WITH_COMPRESSED_IMAGES=1
+XZ_THREADS=0
+
+case ${BUILDTYPE} in
+ snap)
+ NODOC=1
+ ;;
+ *)
+ NODOC=
+ ;;
+esac
Copied: user/gjb/thermite-git/main.conf (from r364886, user/gjb/thermite/main.conf)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/gjb/thermite-git/main.conf Thu Aug 27 21:01:01 2020 (r364887, copy of r364886, user/gjb/thermite/main.conf)
@@ -0,0 +1,66 @@
+#!/bin/sh
+#
+# $FreeBSD$
+#
+
+# Lowercase variables are used by the build script.
+# Uppercase variables are used by the individual build itself.
+
+use_zfs=1
+emailgoesto=
+emailsentfrom=
+scriptdir="$(dirname $(realpath ${0}))"
+srcdir="${scriptdir}/../release"
+logdir="${scriptdir}/../logs"
+chroots="${scriptdir}/../chroots"
+## To build all architectures in parallel, set the 'parallel' variable to
+## 'parallel'. Note, this puts extreme CPU load on the machine.
+#parallel="parallel"
+parallel=""
+
+ftpdir="/snap/ftp"
+
+zfs_root="zroot"
+zfs_mount="releng"
+zfs_parent="${zfs_root}/${zfs_mount}"
+__WRKDIR_PREFIX="/releng"
+
+if [ ! -e "${__BUILDCONFDIR}/svnrev_src" -o \
+ ! -e "${__BUILDCONFDIR}/builddate" ]; then
+ echo "svnrev or builddate file does not exist."
+ echo "Run 'setrev.sh -b <branch>' first."
+ exit 1
+fi
+
+load_stage_env() { }
+
+SVNROOT="svn://svn.FreeBSD.org/"
+
+KERNEL="GENERIC"
+WORLD_FLAGS="-j $(( $(( $(sysctl -n hw.ncpu) + 1 )) / 2 ))"
+KERNEL_FLAGS="-j $(( $(( $(sysctl -n hw.ncpu) + 1 )) / 2 ))"
+
+CHROOTBUILD_SKIP=1
+SRC_UPDATE_SKIP=1
+PORTS_UPDATE_SKIP=1
+DOC_UPDATE_SKIP=1
+# Hack to unset the exported BOARDNAME from sourced arm/armv6 configuration
+# files.
+unset BOARDNAME
+unset CHROOT_MAKEENV
+unset EMBEDDEDBUILD
+unset EMBEDDEDPORTS
+unset EMBEDDED_TARGET
+unset EMBEDDED_TARGET_ARCH
+unset WITH_VMIMAGES
+
+# Check if it is a 'releng' hostname. Do not set this special
+# variable if it is not.
+case "$(hostname -s)" in
+ releng*)
+ export EVERYTHINGISFINE=1
+ ;;
+ *)
+ export EVERYTHINGISFINE=
+ ;;
+esac
Copied: user/gjb/thermite-git/thermite.sh (from r364886, user/gjb/thermite/thermite.sh)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/gjb/thermite-git/thermite.sh Thu Aug 27 21:01:01 2020 (r364887, copy of r364886, user/gjb/thermite/thermite.sh)
@@ -0,0 +1,626 @@
+#!/bin/sh
+#-
+# Copyright (c) 2012, 2013 Glen Barber
+# Copyright (c) 2013-2019 The FreeBSD Foundation
+# Copyright (c) 2020 Rubicon Communications, LLC (netgate.com)
+# All rights reserved.
+#
+# Portions of this software were developed by Glen Barber
+# under sponsorship from the FreeBSD Foundation.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# Thermite is a pyrotechnic composition of shell script and zfs.
+# When executed, it generates a significant amount of heat.
+# Wrapper script for release.sh to automate mass release builds.
+#
+# $FreeBSD$
+#
+
+usage() {
+ echo "$(basename ${0}) -c /path/to/configuration/file"
+ exit 1
+}
+
+info() {
+ out="${@}"
+ printf "$(date +%Y%m%d-%H:%M:%S)\tINFO:\t${out}\n" >/dev/stdout
+ unset out
+}
+
+verbose() {
+ if [ -z ${debug} ] || [ ${debug} -eq 0 ]; then
+ return 0
+ fi
+ out="${@}"
+ printf "$(date +%Y%m%d-%H:%M:%S)\tDEBUG:\t${out}\n" >/dev/stdout
+ unset out
+}
+
+runcmd() {
+ verbose "${rev} ${arch} ${kernel} ${type}"
+ eval "$@"
+}
+
+loop_revs() {
+ verbose "loop_revs() start"
+ for rev in ${revs}; do
+ verbose "loop_revs() arguments: $@"
+ eval runcmd "$@"
+ done
+ unset rev
+ verbose "loop_revs() stop"
+}
+
+loop_archs() {
+ verbose "loop_archs() start"
+ for arch in ${archs}; do
+ verbose "loop_archs() arguments: $@"
+ eval runcmd "$@"
+ done
+ unset arch
+ verbose "loop_archs() stop"
+}
+
+loop_kernels() {
+ verbose "loop_kernels() start"
+ for kernel in ${kernels}; do
+ verbose "loop_kernels() arguments: $@"
+ eval runcmd "$@"
+ done
+ unset kernel
+ verbose "loop_kernel() stop"
+}
+
+loop_types() {
+ verbose "loop_types() start"
+ for type in ${types}; do
+ verbose "loop_types() arguments: $@"
+ eval runcmd "$@"
+ done
+ unset type
+ verbose "loop_types() stop"
+}
+
+runall() {
+ verbose "runall() start"
+ verbose "runall() arguments: $@"
+ eval loop_revs loop_archs loop_kernels loop_types "$@"
+ verbose "runall() stop"
+}
+
+check_use_zfs() {
+ if [ ! -c /dev/zfs ]; then
+ echo "ZFS is required."
+ exit 1
+ fi
+ return 0
+}
+
+truncate_logs() {
+ source_config || return 0
+ echo > ${logdir}/${rev}-${arch}-${kernel}-${type}.log
+ return 0
+}
+
+source_config() {
+ local configfile
+ configfile="${scriptdir}/${rev}-${arch}-${kernel}-${type}.conf"
+ if [ ! -e "${configfile}" ]; then
+ return 1
+ fi
+ . "${configfile}"
+ return 0
+}
+
+zfs_mount_tree() {
+ source_config || return 0
+ _tree=${1}
+ [ -z ${_tree} ] && return 0
+ seed_src=
+ case ${_tree} in
+ src)
+ seed_src=1
+ ;;
+ doc)
+ [ ! -z ${NODOC} ] && return 0
+ ;;
+ ports)
+ [ ! -z ${NOPORTS} ] && return 0
+ ;;
+ *)
+ info "Unknown source tree type: ${_tree}"
+ return 0
+ ;;
+ esac
+ _clone="${zfs_parent}/${rev}-${_tree}-${type}"
+ _mount="/${zfs_mount}/${rev}-${arch}-${kernel}-${type}"
+ _target="${zfs_parent}/${rev}-${arch}-${kernel}-${type}-${_tree}"
+ info "Cloning ${_clone}@clone to ${_target}"
+ zfs clone -p -o mountpoint=${_mount}/usr/${_tree} \
+ ${_clone}@clone ${_target}
+ unset _clone _mount _target _tree _seedmount _seedtarget
+}
+
+zfs_mount_src() {
+ source_config || return 0
+ _tree=src
+ _clone="${zfs_parent}/${rev}-${_tree}-${type}"
+ # Only create chroot seeds for x86.
+ case ${arch} in
+ amd64|i386)
+ ;;
+ *)
+ return 0
+ ;;
+ esac
+ _seedmount=${chroots}/${rev}/${arch}/${type}
+ _seedtarget="${zfs_parent}/${rev}-${arch}-${type}-chroot"
+ info "Creating ${_seedtarget} from ${_clone}"
+ zfs clone -p -o mountpoint=${_seedmount} \
+ ${_clone}@clone ${_seedtarget}
+ unset _clone _mount _target _tree _seedmount _seedtarget
+}
+
+zfs_create_tree() {
+ source_config || return 0
+ _tree=${1}
+ [ -z ${_tree} ] && return 0
+ [ ! -z $(eval echo \${zfs_${_tree}_seed_${rev}_${type}}) ] && return 0
+ case ${_tree} in
+ src)
+ _svnsrc="${SVNROOT}/${SRCBRANCH}"
+ ;;
+ doc)
+ [ ! -z ${NODOC} ] && return 0
+ _svnsrc="${SVNROOT}/${DOCBRANCH}"
+ ;;
+ ports)
+ [ ! -z ${NOPORTS} ] && return 0
+ _svnsrc="${SVNROOT}/${PORTBRANCH}"
+ ;;
+ *)
+ info "Unknown source tree type: ${_tree}"
+ return 0
+ ;;
+ esac
+ _clone="${zfs_parent}/${rev}-${_tree}-${type}"
+ _mount="/${zfs_mount}/${rev}-${_tree}-${type}"
+ info "Creating ${_clone}"
+ zfs create -o atime=off -o mountpoint=${_mount} ${_clone}
+ info "Source checkout ${_svnsrc} to ${_mount}"
+ svn co -q ${_svnsrc} ${_mount}
+ info "Creating ZFS snapshot ${_clone}@clone"
+ zfs snapshot ${_clone}@clone
+ eval zfs_${_tree}_seed_${rev}_${type}=1
+ unset _clone _mount _tree _svnsrc
+}
+
+zfs_bootstrap() {
+ [ -z ${use_zfs} ] && return 0
+ runall zfs_create_tree src
+ runall zfs_create_tree ports
+ runall zfs_create_tree doc
+ zfs_bootstrap_done=1
+}
+
+zfs_finish_bootstrap() {
+ runall zfs_mount_tree src
+ runall zfs_mount_tree ports
+ runall zfs_mount_tree doc
+}
+
+prebuild_setup() {
+ info "Creating ${logdir}"
+ mkdir -p ${logdir}
+ info "Creating ${srcdir}"
+ mkdir -p ${srcdir}
+ info "Creating ${chroots}"
+ mkdir -p ${chroots}
+ info "Checking out src/release to ${srcdir}"
+ svn co -q --force svn://svn.freebsd.org/base/${releasesrc}/release \
+ ${srcdir}
+ info "Reverting any changes to ${srcdir}"
+ svn revert -R ${srcdir}
+}
+
+# Email log output when a stage has completed
+send_logmail() {
+ [ -z "${emailgoesto}" ] && return 0
+ [ -z "${emailsentfrom}" ] && return 0
+ local _body
+ local _subject
+ _subject="${2}"
+ _body="$(tail -n 50 ${1})"
+
+ printf "From: ${emailsentfrom}\nTo: ${emailgoesto}\nSubject: ${_subject}\n\n${_body}\n\n" \
+ | /usr/sbin/sendmail -oi -f ${emailsentfrom} ${emailgoesto}
+ return 0
+}
+
+# Email completed output
+send_completed_email() {
+ [ -z "${emailgoesto}" ] && return 0
+ [ -z "${emailsentfrom}" ] && return 0
+ local _body
+ local _subject
+ _subject="$(hostname -s) snapshot builds completed"
+ _body="$(uname -r)"
+
+ printf "From: ${emailsentfrom}\nTo: ${emailgoesto}\nSubject: ${_subject}\n\n${_body}\n\n" \
+ | /usr/sbin/sendmail -oi -f ${emailsentfrom} ${emailgoesto}
+ return 0
+}
+
+# Stage builds for ftp propagation.
+ftp_stage() {
+ _build="${rev}-${arch}-${kernel}-${type}"
+ _conf="${scriptdir}/${_build}.conf"
+ source_config || return 0
+ [ -z "${EVERYTHINGISFINE}" ] && return 0
+
+ load_stage_env
+ info "Staging for ftp: ${_build}"
+ [ ! -z "${EMBEDDEDBUILD}" ] && export EMBEDDEDBUILD
+ [ ! -z "${BOARDNAME}" ] && export BOARDNAME
+ [ ! -z "${BUILDSVNREV}" ] && export SVNREVISION=${BUILDSVNREV}
+ [ ! -z "${BUILDDATE}" ] && export BUILDDATE
+ [ -z "${SVNREVISION}" -a -e "${scriptdir}/svnrev_src" ] && \
+ export SVNREVISION="$(cat ${scriptdir}/svnrev_src)"
+ [ -z "${BUILDDATE}" -a -e "${scriptdir}/builddate" ] && \
+ export BUILDDATE="$(cat ${scriptdir}/builddate)"
+ chroot ${CHROOTDIR} make -C /usr/src/release \
+ -f Makefile.mirrors \
+ TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH} \
+ KERNCONF=${KERNEL} WITH_VMIMAGES=${WITH_VMIMAGES} \
+ WITH_DVD=${WITH_DVD} \
+ ftp-stage >> ${logdir}/${_build}.log 2>&1
+
+ if [ -z "${ftpdir}" ]; then
+ info "FTP directory (ftpdir) not set."
+ info "Refusing to rsync(1) to the stage area."
+ return 0
+ fi
+
+ case ${type} in
+ release)
+ _type="releases"
+ ;;
+ *)
+ _type="snapshots"
+ ;;
+ esac
+
+ mkdir -p "${ftpdir}/${_type}"
+ rsync -avH ${CHROOTDIR}/R/ftp-stage/${_type}/* \
+ ${ftpdir}/${_type}/ >> ${logdir}/${_build}.log 2>&1
+ unset BOARDNAME BUILDDATE EMBEDDEDBUILD SVNREVISION WITH_VMIMAGES
+ return 0
+}
+
+# Run the release builds.
+build_release() {
+ _build="${rev}-${arch}-${kernel}-${type}"
+ _conf="${scriptdir}/${_build}.conf"
+ source_config || return 0
+ info "Building release: ${_build}"
+ set >> ${logdir}/${_build}.log
+ env -i __BUILDCONFDIR="${__BUILDCONFDIR}" \
+ /bin/sh ${srcdir}/release.sh -c ${_conf} \
+ >> ${logdir}/${_build}.log 2>&1
+
+ ftp_stage
+ ls -1 ${CHROOTDIR}/R/* >> ${logdir}/${_build}.log
+ send_logmail ${logdir}/${_build}.log ${_build}
+ unset _build _conf
+}
+
+# Run the release builds in parallel. CAUSES INSANE CPU LOAD.
+parallelbuild_release() {
+ _build="${rev}-${arch}-${kernel}-${type}"
+ _conf="${scriptdir}/${_build}.conf"
+ source_config || return 0
+ (
+ info "Building release: ${_build}"
+ set >> ${logdir}/${_build}.log
+ env -i __BUILDCONFDIR="${__BUILDCONFDIR}" \
+ /bin/sh ${srcdir}/release.sh -c ${_conf} \
+ >> ${logdir}/${_build}.log 2>&1
+
+ ftp_stage
+ ls -1 ${CHROOTDIR}/R/* >> ${logdir}/${_build}.log
+ send_logmail ${logdir}/${_build}.log ${_build}
+ ) &
+ unset _build _conf
+}
+
+# Upload AWS EC2 AMI images.
+upload_ec2_ami() {
+ _build="${rev}-${arch}-${kernel}-${type}"
+ _conf="${scriptdir}/${_build}.conf"
+ source_config || return 0
+ case ${arch}:${kernel} in
+ amd64:GENERIC)
+ _EC2TARGET=amd64
+ _EC2TARGET_ARCH=amd64
+ ;;
+ aarch64:GENERIC)
+ # XXX: temporary until support for stable/11 is added
+ case ${rev} in
+ 13|12)
+ _EC2TARGET=arm64
+ _EC2TARGET_ARCH=aarch64
+ ;;
+ *)
+ return 0
+ ;;
+ esac
+ # end XXX
+ ;;
+ *)
+ return 0
+ ;;
+ esac
+ info "Uploading EC2 AMI image for build: ${_build}"
+ if [ ! -e "${CHROOTDIR}/${AWSKEYFILE}" ]; then
+ cp -p ${AWSKEYFILE} ${CHROOTDIR}/${AWSKEYFILE}
+ if [ $? -ne 0 ]; then
+ info "Amazon EC2 key file not found."
+ return 0
+ fi
+ fi
+ if [ -z "${AWSREGION}" -o -z "${AWSBUCKET}" -o -z "${AWSKEYFILE}" ]; then
+ return 0
+ fi
+ mount -t devfs devfs ${CHROOTDIR}/dev
+ chroot ${CHROOTDIR} make -C /usr/src/release \
+ AWSREGION=${AWSREGION} \
+ AWSBUCKET=${AWSBUCKET} \
+ AWSKEYFILE=${AWSKEYFILE} \
+ EC2PUBLIC=${EC2PUBLIC} \
+ EC2PUBLICSNAP=${EC2PUBLICSNAP} \
+ EC2SNSTOPIC=${EC2SNSTOPIC} \
+ TARGET=${_EC2TARGET} \
+ TARGET_ARCH=${_EC2TARGET_ARCH} \
+ ec2ami \
+ >> ${logdir}/${_build}.ec2.log 2>&1
+ unset _build _conf AWSREGION AWSBUCKET AWSKEYFILE EC2PUBLIC EC2SNSTOPIC EC2PUBLICSNAP
+ unset _EC2TARGET _EC2TARGET_ARCH
+ umount ${CHROOTDIR}/dev
+ return 0
+} # upload_ec2_ami()
+
+# Upload Vagrant virtual machine images.
+upload_vagrant_image() {
+ _build="${rev}-${arch}-${kernel}-${type}"
+ _conf="${scriptdir}/${_build}.conf"
+ source_config || return 0
+ case ${arch} in
+ amd64)
+ ;;
+ *)
+ return 0
+ ;;
+ esac
+ if [ -z "${VAGRANT_UPLOAD_CONF}" ]; then
+ return 0
+ fi
+ info "Uploading Vagrant virtual machine image for build: ${_build}"
+ if [ ! -e "${CHROOTDIR}/${VAGRANT_UPLOAD_CONF}" ]; then
+ cp -p ${VAGRANT_UPLOAD_CONF} \
+ ${CHROOTDIR}/${VAGRANT_UPLOAD_CONF}
+ if [ $? -ne 0 ]; then
+ info "Vagrant key file not found."
+ return 0
+ fi
+ fi
+ mount -t devfs devfs ${CHROOTDIR}/dev
+ chroot ${CHROOTDIR} make -C /usr/src/release \
+ VAGRANT_UPLOAD_CONF=${VAGRANT_UPLOAD_CONF} \
+ vagrant-upload \
+ >> ${logdir}/${_build}.vagrant.log 2>&1
+ unset _build _conf VAGRANT_UPLOAD_CONF
+ umount ${CHROOTDIR}/dev
+ return 0
+} # upload_vagrant_image()
+
+# Upload Google Compute Engine virtual machine images.
+upload_gce_image() {
+ _build="${rev}-${arch}-${kernel}-${type}"
+ _conf="${scriptdir}/${_build}.conf"
+ source_config || return 0
+ case ${arch} in
+ amd64)
+ ;;
+ *)
+ return 0
+ ;;
+ esac
+ if [ -z "${GCE_LOGIN_SKIP}" -o -z "${GCE_BUCKET}" ]; then
+ return 0
+ fi
+ info "Uploading GCE virtual machine image for build: ${_build}"
+ if [ ! -d "${CHROOTDIR}/${GCE_CONFIG_DIR}" ]; then
+ if [ ! -e "${GCE_CONFIG_PKG}" ]; then
+ echo "Cannot locate config tarball."
+ return 0
+ fi
+ mkdir -p ${CHROOTDIR}/${GCE_CONFIG_LOC}
+ tar -xzf ${GCE_CONFIG_PKG} -C ${CHROOTDIR}/${GCE_CONFIG_LOC}
+ fi
+ mount -t devfs devfs ${CHROOTDIR}/dev
+ chroot ${CHROOTDIR} make -C /usr/src/release \
+ GCE_BUCKET=${GCE_BUCKET} \
+ GCE_LOGIN_SKIP=1 \
+ GCE_LICENSE="${GCE_LICENSE}" \
+ gce-upload \
+ >> ${logdir}/${_build}.gce 2>&1
+ unset _build _conf GCE_BUCKET GCE_CONFIG_DIR GCE_CONFIG_PKG
+ unset GCE_CONFIG_LOC GCE_LOGIN_SKIP
+ umount ${CHROOTDIR}/dev
+ return 0
+} # upload_gce_image()
+
+# Install amd64/i386 "seed" chroots for all branches being built.
+install_chroots() {
+ source_config || return 0
+ if [ ${rev} -le 8 ]; then
+ info "This script does not support rev=${rev}"
+ return 0
+ fi
+ case ${arch} in
+ i386)
+ _chrootarch="i386"
+ ;;
+ *)
+ _chrootarch="amd64"
+ ;;
+ esac
+ [ ! -z $(eval echo \${zfs_${_chrootarch}_seed_${rev}_${type}}) ] \
+ && return 0
+ _clone="${zfs_parent}/${rev}-${_chrootarch}-worldseed-${type}"
+ _mount="/${zfs_mount}/${rev}-${arch}-worldseed-${type}"
+ _build="${rev}-${arch}-${kernel}-${type}"
+ _dest="${__WRKDIR_PREFIX}/${_build}"
+ _srcdir="${chroots}/${rev}/${_chrootarch}/${type}"
+ _objdir="${chroots}/${rev}-obj/${_chrootarch}/${type}"
+ info "Creating ${_mount}"
+ zfs create -o atime=off -o mountpoint=${_mount} ${_clone}
+ info "Installing ${_mount}"
+ env MAKEOBJDIRPREFIX=${_objdir} \
+ make -C ${_srcdir} \
+ __MAKE_CONF=/dev/null SRCCONF=/dev/null \
+ TARGET=${_chrootarch} TARGET_ARCH=${_chrootarch} \
+ DESTDIR=${_mount} \
+ installworld distribution >> \
+ ${logdir}/${_build}.log 2>&1
+ zfs snapshot ${_clone}@clone
+ eval zfs_${_chrootarch}_seed_${rev}_${type}=1
+ unset _build _dest _objdir _srcdir _clone _mount
+
+ return 0
+}
+
+zfs_clone_chroots() {
+ source_config || return 0
+ case ${arch} in
+ i386)
+ _chrootarch="i386"
+ ;;
+ *)
+ _chrootarch="amd64"
+ ;;
+ esac
+ _clone="${zfs_parent}/${rev}-${_chrootarch}-worldseed-${type}"
+ _mount="/${zfs_mount}/${rev}-${arch}-worldseed-${type}"
+ _build="${rev}-${arch}-${kernel}-${type}"
+ _dest="${__WRKDIR_PREFIX}/${_build}"
+ info "Cloning ${_chrootarch} world to ${zfs_parent}/${_build}"
+ zfs clone -p -o mountpoint=${_dest} ${_clone}@clone ${zfs_parent}/${_build}
+ unset _clone _mount _build _dest
+
+ return 0
+}
+
+# Build amd64/i386 "seed" chroots for all branches being built.
+build_chroots() {
+ source_config || return 0
+ if [ ${rev} -le 9 ]; then
+ info "This script does not support rev ${rev}"
+ return 0
+ fi
+ case ${arch} in
+ i386)
+ _chrootarch="i386"
+ ;;
+ *)
+ _chrootarch="amd64"
+ ;;
+ esac
+ [ ! -z $(eval echo \${chroot_${_chrootarch}_build_${rev}_${type}}) ] && return 0
+ _build="${rev}-${_chrootarch}-${type}"
+ _srcdir="${chroots}/${rev}/${_chrootarch}/${type}"
+ _objdir="${chroots}/${rev}-obj/${_chrootarch}/${type}"
+ mkdir -p "${_srcdir}"
+ # Source the build configuration file to get
+ # the SRCBRANCH to use
+ if [ -z ${zfs_bootstrap_done} ]; then
+ # Skip svn checkout, the trees are there.
+ info "SVN checkout ${SRCBRANCH} for ${_chrootarch} ${type}"
+ svn co -q ${SVNROOT}/${SRCBRANCH} \
+ ${_srcdir} \
+ >> ${logdir}/${_build}.log 2>&1
+ fi
+ info "Building $(realpath ${_srcdir}) world"
+ env MAKEOBJDIRPREFIX=${_objdir} \
+ make -C ${_srcdir} ${WORLD_FLAGS} \
+ __MAKE_CONF=/dev/null SRCCONF=/dev/null \
+ TARGET=${_chrootarch} TARGET_ARCH=${_chrootarch} \
+ buildworld >> \
+ ${logdir}/${_build}.log 2>&1
+ eval chroot_${_chrootarch}_build_${rev}_${type}=1
+ unset _build _dest _objdir _srcdir
+
+ return 0
+}
+
+main() {
+ releasesrc="head"
+ export __BUILDCONFDIR="$(dirname $(realpath ${0}))"
+
+ while getopts "c:d" opt; do
+ case ${opt} in
+ c)
+ CONF=${OPTARG}
+ [ -e ${CONF} ] && . $(realpath ${CONF})
+ ;;
+ d)
+ debug=1
+ ;;
+ \?)
+ usage
+ ;;
+ esac
+ done
+ shift $(($OPTIND - 1))
+ [ -z ${CONF} ] && usage
+ use_zfs=1
+ check_use_zfs
+ zfs_bootstrap_done=
+ prebuild_setup
+ runall truncate_logs
+ zfs_bootstrap
+ runall zfs_mount_src
+ runall build_chroots
+ runall install_chroots
+ runall zfs_clone_chroots
+ zfs_finish_bootstrap
+ runall ${parallel}build_release
+ wait
+ runall upload_ec2_ami
+ runall upload_gce_image
+ runall upload_vagrant_image
+ send_completed_email
+}
+
+main "$@"
+
Copied: user/gjb/thermite-git/zfs-cleanup.sh (from r364886, user/gjb/thermite/zfs-cleanup.sh)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/gjb/thermite-git/zfs-cleanup.sh Thu Aug 27 21:01:01 2020 (r364887, copy of r364886, user/gjb/thermite/zfs-cleanup.sh)
@@ -0,0 +1,150 @@
+#!/bin/sh
+#
+# $FreeBSD$
+#
+
+usage() {
+ echo "$(basename ${0}) -d -c /path/to/configuration/file"
+ exit 1
+}
+
+zfs_teardown() {
+ for r in ${revs}; do
+ for a in ${archs}; do
+ for k in ${kernels}; do
+ for t in ${types}; do
+ s="${r}-${a}-${k}-${t}"
+ c="${r}-${a}-${t}"
+ if [ -e ${scriptdir}/${s}.conf ];
+ then
+ zfs list ${zfs_parent}/${s}-src >/dev/null 2>&1
+ rc=$?
+ if [ ${rc} -eq 0 ]; then
+ echo -n "${pfx} Destroying " \
+ >/dev/stdout
+ echo " ${zfs_parent}/${s}-src" \
+ >/dev/stdout
+ zfs destroy -f ${zfs_parent}/${s}-src
+ fi
+ zfs list ${zfs_parent}/${s}-ports >/dev/null 2>&1
+ rc=$?
+ if [ ${rc} -eq 0 ]; then
+ echo -n "${pfx} Destroying " \
+ >/dev/stdout
+ echo " ${zfs_parent}/${s}-ports" \
+ >/dev/stdout
+ zfs destroy -f ${zfs_parent}/${s}-ports
+ fi
+ zfs list ${zfs_parent}/${s}-doc >/dev/null 2>&1
+ rc=$?
+ if [ ${rc} -eq 0 ]; then
+ echo -n "${pfx} Destroying " \
+ >/dev/stdout
+ echo " ${zfs_parent}/${s}-doc" \
+ >/dev/stdout
+ zfs destroy -f ${zfs_parent}/${s}-doc
+ fi
+ zfs list ${zfs_parent}/${c}-chroot >/dev/null 2>&1
+ rc=$?
+ if [ ${rc} -eq 0 ]; then
+ echo -n "${pfx} Destroying " \
+ >/dev/stdout
+ echo " ${zfs_parent}/${c}-chroot" \
+ >/dev/stdout
+ zfs destroy -f ${zfs_parent}/${c}-chroot
+ fi
+ zfs list ${zfs_parent}/${s} >/dev/null 2>&1
+ rc=$?
+ if [ ${rc} -eq 0 ]; then
+ echo -n "${pfx} Destroying " \
+ >/dev/stdout
+ echo " ${zfs_parent}/${s}" \
+ >/dev/stdout
+ zfs destroy -f ${zfs_parent}/${s}
+ fi
+ fi
+ done
+ done
+ done
+ done
+
+ for r in ${revs}; do
+ for t in ${types}; do
+ for i in src doc ports; do
+ zfs list ${zfs_parent}/${r}-${i}-${t}@clone >/dev/null 2>&1
+ rc=$?
+ if [ ${rc} -eq 0 ]; then
+ echo -n "${pfx} Destroying " \
+ >/dev/stdout
+ echo " ${zfs_parent}/${r}-${i}-${t}@clone" \
+ >/dev/stdout
+ zfs destroy -f ${zfs_parent}/${r}-${i}-${t}@clone
+ fi
+ zfs list ${zfs_parent}/${r}-${i}-${t} >/dev/null 2>&1
+ rc=$?
+ if [ ${rc} -eq 0 ]; then
+ echo -n "${pfx} Destroying " \
+ >/dev/stdout
+ echo " ${zfs_parent}/${r}-${i}-${t}" \
+ >/dev/stdout
+ zfs destroy -f ${zfs_parent}/${r}-${i}-${t}
+ fi
+ done
+ done
+ done
+
+ zfs destroy ${zfs_parent}/${r}-amd64-worldseed-snap at clone
+ zfs destroy ${zfs_parent}/${r}-amd64-worldseed-snap
+ zfs destroy ${zfs_parent}/${r}-i386-worldseed-snap at clone
+ zfs destroy ${zfs_parent}/${r}-i386-worldseed-snap
+
+ echo -n "ZFS datasets were destroyed. They will be created"
+ echo " automatically via thermite.sh."
+
+ return 0
+}
+
+main() {
+ export __BUILDCONFDIR="$(dirname $(realpath ${0}))"
+ CSCONF=
+
+ while getopts "c:d" opt; do
+ case ${opt} in
+ c)
+ CSCONF="${OPTARG}"
+ ;;
+ d)
+ delete_only=1
+ ;;
+ *)
+ ;;
+ esac
+ done
+ shift $(( ${OPTIND} - 1 ))
+
+ if [ -z "${CSCONF}" ]; then
+ echo "Build configuration file is required."
+ usage
+ fi
+
+ CSCONF="$(realpath ${CSCONF})"
+
+ if [ ! -f "${CSCONF}" ]; then
+ echo "Build configuration is not a regular file."
+ exit 1
+ fi
+
+ . "${CSCONF}"
+
+ if [ ${use_zfs} -eq 0 ]; then
+ echo "== use_zfs is set to '0'; skipping." >/dev/stdout
+ exit 0
+ fi
+
+ pfx="==="
+
+ delete_only=1
+ zfs_teardown
+}
+
+main "$@"
More information about the svn-src-user
mailing list