summaryrefslogtreecommitdiffstats
path: root/tools/build_snapshots.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tools/build_snapshots.sh')
-rwxr-xr-xtools/build_snapshots.sh389
1 files changed, 389 insertions, 0 deletions
diff --git a/tools/build_snapshots.sh b/tools/build_snapshots.sh
new file mode 100755
index 0000000..e1fe313
--- /dev/null
+++ b/tools/build_snapshots.sh
@@ -0,0 +1,389 @@
+#!/bin/sh
+#
+# build_snapshots.sh
+#
+# Copyright (c) 2007-2015 Electric Sheep Fencing, LLC
+# All rights reserved
+#
+# 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 pfSense PROJECT ``AS IS'' AND ANY
+# EXPRESSED 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 pfSense PROJECT OR
+# ITS 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.
+#
+
+if [ ! -f ./build.conf ]; then
+ echo "You must first run ./set_version.sh !"
+ exit 1
+fi
+
+NO_UPLOAD=""
+LOOPED_SNAPSHOTS=""
+
+# Handle command line arguments
+while test "$1" != "" ; do
+ case $1 in
+ --noupload|-u)
+ NO_UPLOAD="-u"
+ ;;
+ --looped)
+ LOOPED_SNAPSHOTS="true"
+ esac
+ shift
+done
+
+# Source ${PRODUCT_NAME} / FreeSBIE variables
+# *** DO NOT SOURCE BUILDER_COMMON.SH!
+# *** IT WILL BREAK EVERYTHING FOR
+# *** SOME UNKNOWN LAYERING REASON.
+# *** 04/07/2008, 11/04/2009
+echo ">>> Execing build.conf"
+. ./builder_defaults.sh
+
+# Keeps track of how many time builder has looped
+BUILDCOUNTER=0
+
+# Local variables that are used by builder scripts
+STAGINGAREA=/tmp/staging
+RSYNCIP="snapshots.pfsense.org"
+RSYNCKBYTELIMIT="248000"
+
+export SNAPSHOTSLOGFILE=${SNAPSHOTSLOGFILE:-"$SCRATCHDIR/snapshots-build.log"}
+export SNAPSHOTSLASTUPDATE=${SNAPSHOTSLASTUPDATE:-"$SCRATCHDIR/snapshots-lastupdate.log"}
+export MASTER_BUILDER_SSH_LOG_DEST=${MASTER_BUILDER_SSH_LOG_DEST:-snapshots@${RSYNCIP}:/usr/local/www/snapshots/logs/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/${TARGET}/build.log}
+
+# Ensure directories exist
+mkdir -p $STAGINGAREA
+
+echo "" > $SNAPSHOTSLOGFILE
+echo "" > $SNAPSHOTSLASTUPDATE
+
+git_last_commit() {
+ if [ -d "${1}/.git" ]; then
+ (cd ${1} && git fetch origin && git rebase) >/dev/null
+ CURRENT_COMMIT=$(cd ${1} && git log -1 --format='%H')
+ echo "$CURRENT_COMMIT"
+ fi
+}
+
+# This routine is called in between runs. We
+# will sleep for a bit and check for new commits
+# in between sleeping for short durations.
+sleep_between_runs() {
+ COUNTER=0
+ while [ $COUNTER -lt $maxsleepvalue ]; do
+ sleep 60
+ PRODUCT_CURRENT_COMMIT=$(git_last_commit "${GIT_REPO_DIR}/${GIT_REPO_BRANCH_OR_TAG}")
+ if [ "${PRODUCT_LAST_COMMIT}" != "${PRODUCT_CURRENT_COMMIT}" ]; then
+ update_status ">>> New commit: $CURRENT_AUTHOR - $PRODUCT_CURRENT_COMMIT .. No longer sleepy."
+ COUNTER=$(($maxsleepvalue + 60))
+ export PRODUCT_LAST_COMMIT="${PRODUCT_CURRENT_COMMIT}"
+ fi
+ TOOLS_CURRENT_COMMIT=$(git_last_commit "${BUILDER_TOOLS}")
+ if [ "${TOOLS_LAST_COMMIT}" != "${TOOLS_CURRENT_COMMIT}" ]; then
+ update_status ">>> New commit: $CURRENT_AUTHOR - $TOOLS_CURRENT_COMMIT .. No longer sleepy."
+ COUNTER=$(($maxsleepvalue + 60))
+ export TOOLS_LAST_COMMIT="${TOOLS_CURRENT_COMMIT}"
+ fi
+ COUNTER=$(($COUNTER + 60))
+ done
+ if [ $COUNTER -ge $maxsleepvalue ]; then
+ update_status ">>> Sleep timer expired. Restarting build."
+ maxsleepvalue=0
+ COUNTER=0
+ fi
+}
+
+# This routine is called to write out to stdout
+# a string. The string is appended to $SNAPSHOTSLOGFILE
+# and we scp the log file to the builder host if
+# needed for the real time logging functions.
+update_status() {
+ if [ "$1" = "" ]; then
+ return
+ fi
+ echo $1
+ echo "`date` -|- $1" >> $SNAPSHOTSLOGFILE
+ if [ -n "$MASTER_BUILDER_SSH_LOG_DEST" -a -z "${NO_UPLOAD}" ]; then
+ LU=`cat $SNAPSHOTSLASTUPDATE`
+ CT=`date "+%H%M%S"`
+ # Only update every minute
+ if [ "$LU" != "$CT" ]; then
+ scp -q $SNAPSHOTSLOGFILE $MASTER_BUILDER_SSH_LOG_DEST
+ date "+%H%M%S" > $SNAPSHOTSLASTUPDATE
+ fi
+ fi
+}
+
+# Copy the current log file to $filename.old on
+# the snapshot www server (real time logs)
+rotate_logfile() {
+ if [ -n "$MASTER_BUILDER_SSH_LOG_DEST" -a -z "${NO_UPLOAD}" ]; then
+ scp -q $SNAPSHOTSLOGFILE $MASTER_BUILDER_SSH_LOG_DEST.old
+ fi
+
+ # Cleanup log file
+ echo "" > $SNAPSHOTSLOGFILE
+}
+
+dobuilds() {
+
+ cd $BUILDER_SCRIPTS
+ # Build images
+ ./build.sh --flash-size '1g 2g 4g' "iso memstick memstickserial memstickadi fullupdate nanobsd nanobsd-vga"
+ # Copy files
+ copy_to_staging_iso_updates
+ copy_to_staging_nanobsd '1g 2g 4g'
+}
+
+copy_to_staging_nanobsd() {
+ cd $BUILDER_SCRIPTS
+
+ for NANOTYPE in nanobsd nanobsd-vga; do
+ for FILESIZE in ${1}; do
+ FILENAMEFULL="${PRODUCT_NAME}-${PRODUCT_VERSION}-${FILESIZE}-${TARGET}-${NANOTYPE}-${DATESTRING}.img.gz"
+ FILENAMEUPGRADE="${PRODUCT_NAME}-${PRODUCT_VERSION}-${FILESIZE}-${TARGET}-${NANOTYPE}-upgrade-${DATESTRING}.img.gz"
+ mkdir -p $STAGINGAREA/nanobsd
+ mkdir -p $STAGINGAREA/nanobsdupdates
+
+ cp $MAKEOBJDIRPREFIXFINAL/$FILENAMEFULL $STAGINGAREA/nanobsd/ 2>/dev/null
+ cp $MAKEOBJDIRPREFIXFINAL/$FILENAMEUPGRADE $STAGINGAREA/nanobsdupdates 2>/dev/null
+
+ if [ -f $STAGINGAREA/nanobsd/$FILENAMEFULL ]; then
+ md5 $STAGINGAREA/nanobsd/$FILENAMEFULL > $STAGINGAREA/nanobsd/$FILENAMEFULL.md5 2>/dev/null
+ sha256 $STAGINGAREA/nanobsd/$FILENAMEFULL > $STAGINGAREA/nanobsd/$FILENAMEFULL.sha256 2>/dev/null
+ fi
+ if [ -f $STAGINGAREA/nanobsdupdates/$FILENAMEUPGRADE ]; then
+ md5 $STAGINGAREA/nanobsdupdates/$FILENAMEUPGRADE > $STAGINGAREA/nanobsdupdates/$FILENAMEUPGRADE.md5 2>/dev/null
+ sha256 $STAGINGAREA/nanobsdupdates/$FILENAMEUPGRADE > $STAGINGAREA/nanobsdupdates/$FILENAMEUPGRADE.sha256 2>/dev/null
+ fi
+
+ # Copy NanoBSD auto update:
+ if [ -f $STAGINGAREA/nanobsdupdates/$FILENAMEUPGRADE ]; then
+ cp $STAGINGAREA/nanobsdupdates/$FILENAMEUPGRADE $STAGINGAREA/latest-${NANOTYPE}-$FILESIZE.img.gz 2>/dev/null
+ sha256 $STAGINGAREA/latest-${NANOTYPE}-$FILESIZE.img.gz > $STAGINGAREA/latest-${NANOTYPE}-$FILESIZE.img.gz.sha256 2>/dev/null
+ # NOTE: Updates need a file with output similar to date output
+ # Use the file generated at start of dobuilds() to be consistent on times
+ cp $BUILTDATESTRINGFILE $STAGINGAREA/version-${NANOTYPE}-$FILESIZE
+ fi
+ done
+ done
+}
+
+copy_to_staging_iso_updates() {
+ cd $BUILDER_SCRIPTS
+
+ # Copy ISOs
+ md5 ${ISOPATH}.gz > ${ISOPATH}.md5
+ sha256 ${ISOPATH}.gz > ${ISOPATH}.sha256
+ cp ${ISOPATH}* $STAGINGAREA/ 2>/dev/null
+
+ # Copy memstick items
+ md5 ${MEMSTICKPATH}.gz > ${MEMSTICKPATH}.md5
+ sha256 ${MEMSTICKPATH}.gz > ${MEMSTICKPATH}.sha256
+ cp ${MEMSTICKPATH}* $STAGINGAREA/ 2>/dev/null
+
+ md5 ${MEMSTICKSERIALPATH}.gz > ${MEMSTICKSERIALPATH}.md5
+ sha256 ${MEMSTICKSERIALPATH}.gz > ${MEMSTICKSERIALPATH}.sha256
+ cp ${MEMSTICKSERIALPATH}* $STAGINGAREA/ 2>/dev/null
+
+ md5 ${MEMSTICKADIPATH}.gz > ${MEMSTICKADIPATH}.md5
+ sha256 ${MEMSTICKADIPATH}.gz > ${MEMSTICKADIPATH}.sha256
+ cp ${MEMSTICKADIPATH}* $STAGINGAREA/ 2>/dev/null
+
+ md5 ${UPDATES_TARBALL_FILENAME} > ${UPDATES_TARBALL_FILENAME}.md5
+ sha256 ${UPDATES_TARBALL_FILENAME} > ${UPDATES_TARBALL_FILENAME}.sha256
+ cp ${UPDATES_TARBALL_FILENAME}* $STAGINGAREA/ 2>/dev/null
+ # NOTE: Updates need a file with output similar to date output
+ # Use the file generated at start of dobuilds() to be consistent on times
+ cp $BUILTDATESTRINGFILE $STAGINGAREA/version 2>/dev/null
+}
+
+scp_files() {
+ cd $BUILDER_SCRIPTS
+ if [ -z "${RSYNC_COPY_ARGUMENTS:-}" ]; then
+ RSYNC_COPY_ARGUMENTS="-ave ssh --timeout=60 --bwlimit=${RSYNCKBYTELIMIT}" #--bwlimit=50
+ fi
+ update_status ">>> Copying files to ${RSYNCIP}"
+ if [ ! -f /usr/local/bin/rsync ]; then
+ update_status ">>> Could not find rsync, installing from ports..."
+ (cd /usr/ports/net/rsync && make install clean)
+ fi
+ rm -f $SCRATCHDIR/ssh-snapshots*
+
+ # Ensure directory(s) are available
+ ssh snapshots@${RSYNCIP} "mkdir -p /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/livecd_installer"
+ ssh snapshots@${RSYNCIP} "mkdir -p /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/updates"
+ ssh snapshots@${RSYNCIP} "mkdir -p /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/nanobsd"
+ if [ -d $STAGINGAREA/virtualization ]; then
+ ssh snapshots@${RSYNCIP} "mkdir -p /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/virtualization"
+ fi
+ ssh snapshots@${RSYNCIP} "mkdir -p /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/.updaters"
+ # ensure permissions are correct for r+w
+ ssh snapshots@${RSYNCIP} "chmod -R ug+rw /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/."
+ ssh snapshots@${RSYNCIP} "chmod -R ug+rw /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/."
+ ssh snapshots@${RSYNCIP} "chmod -R ug+rw /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/*/."
+ rsync $RSYNC_COPY_ARGUMENTS $STAGINGAREA/${PRODUCT_NAME}-*iso* \
+ snapshots@${RSYNCIP}:/usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/livecd_installer/
+ rsync $RSYNC_COPY_ARGUMENTS $STAGINGAREA/${PRODUCT_NAME}-memstick* \
+ snapshots@${RSYNCIP}:/usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/livecd_installer/
+ rsync $RSYNC_COPY_ARGUMENTS $STAGINGAREA/${PRODUCT_NAME}-*Update* \
+ snapshots@${RSYNCIP}:/usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/updates/
+ rsync $RSYNC_COPY_ARGUMENTS $STAGINGAREA/nanobsd/* \
+ snapshots@${RSYNCIP}:/usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/nanobsd/
+ rsync $RSYNC_COPY_ARGUMENTS $STAGINGAREA/nanobsdupdates/* \
+ snapshots@${RSYNCIP}:/usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/updates/
+ if [ -d $STAGINGAREA/virtualization ]; then
+ rsync $RSYNC_COPY_ARGUMENTS $STAGINGAREA/virtualization/* \
+ snapshots@${RSYNCIP}:/usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/virtualization/
+ fi
+
+ # Rather than copy these twice, use ln to link to the latest one.
+
+ ssh snapshots@${RSYNCIP} "rm -f /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/.updaters/latest.tgz"
+ ssh snapshots@${RSYNCIP} "rm -f /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/.updaters/latest.tgz.sha256"
+
+ LATESTFILENAME="`ls $UPDATESDIR/*.tgz | grep Full | grep -v md5 | grep -v sha256 | tail -n1`"
+ LATESTFILENAME=`basename ${LATESTFILENAME}`
+ ssh snapshots@${RSYNCIP} "ln -s /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/updates/${LATESTFILENAME} \
+ /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/.updaters/latest.tgz"
+ ssh snapshots@${RSYNCIP} "ln -s /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/updates/${LATESTFILENAME}.sha256 \
+ /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/.updaters/latest.tgz.sha256"
+
+ for i in 1g 2g 4g
+ do
+ ssh snapshots@${RSYNCIP} "rm -f /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/.updaters/latest-nanobsd-${i}.img.gz"
+ ssh snapshots@${RSYNCIP} "rm -f /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/.updaters/latest-nanobsd-${i}.img.gz.sha256"
+ ssh snapshots@${RSYNCIP} "rm -f /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/.updaters/latest-nanobsd-vga-${i}.img.gz"
+ ssh snapshots@${RSYNCIP} "rm -f /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/.updaters/latest-nanobsd-vga-${i}.img.gz.sha256"
+
+ FILENAMEUPGRADE="${PRODUCT_NAME}-${PRODUCT_VERSION}-${i}-${TARGET}-nanobsd-upgrade-${DATESTRING}.img.gz"
+ ssh snapshots@${RSYNCIP} "ln -s /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/updates/${FILENAMEUPGRADE} \
+ /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/.updaters/latest-nanobsd-${i}.img.gz"
+ ssh snapshots@${RSYNCIP} "ln -s /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/updates/${FILENAMEUPGRADE}.sha256 \
+ /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/.updaters/latest-nanobsd-${i}.img.gz.sha256"
+
+ FILENAMEUPGRADE="${PRODUCT_NAME}-${PRODUCT_VERSION}-${i}-${TARGET}-nanobsd-vga-upgrade-${DATESTRING}.img.gz"
+ ssh snapshots@${RSYNCIP} "ln -s /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/updates/${FILENAMEUPGRADE} \
+ /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/.updaters/latest-nanobsd-vga-${i}.img.gz"
+ ssh snapshots@${RSYNCIP} "ln -s /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/updates/${FILENAMEUPGRADE}.sha256 \
+ /usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/.updaters/latest-nanobsd-vga-${i}.img.gz.sha256"
+ done
+
+ rsync $RSYNC_COPY_ARGUMENTS $STAGINGAREA/version* \
+ snapshots@${RSYNCIP}:/usr/local/www/snapshots/FreeBSD_${FREEBSD_PARENT_BRANCH}/${TARGET}/${PRODUCT_NAME}_${GIT_REPO_BRANCH_OR_TAG}/.updaters
+ update_status ">>> Finished copying files."
+}
+
+cleanup_builds() {
+ cd $BUILDER_SCRIPTS
+ # Remove prior builds
+ update_status ">>> Cleaning up after prior builds..."
+ rm -rf $STAGINGAREA/*
+ rm -f $UPDATESDIR/* # Keep updates dir slimmed down
+ rm -rf $MAKEOBJDIRPREFIXFINAL/*
+ ./build.sh --clean-builder
+}
+
+build_loop_operations() {
+ cd $BUILDER_SCRIPTS
+ update_status ">>> Starting build loop operations"
+ # --- Items we need to run for a complete build run ---
+ # Cleanup prior builds
+ cleanup_builds
+ # Update pkgs if necessary
+ if pkg update -r ${PRODUCT_NAME} >/dev/null 2>&1; then
+ update_status ">>> Updating builder packages... "
+ pkg upgrade -r ${PRODUCT_NAME} -y -q >/dev/null 2>&1
+ fi
+ # Do the builds
+ dobuilds
+ # SCP files to snapshot web hosting area
+ if [ -z "${NO_UPLOAD}" ]; then
+ scp_files
+ fi
+ # Alert the world that we have some snapshots ready.
+ update_status ">>> Builder run is complete."
+}
+
+if [ -z "${LOOPED_SNAPSHOTS}" ]; then
+ build_loop_operations
+else
+ # Main builder loop
+ while [ /bin/true ]; do
+ BUILDCOUNTER=`expr $BUILDCOUNTER + 1`
+ update_status ">>> Starting builder run #${BUILDCOUNTER}..."
+
+ # Launch the snapshots builder script and pipe its
+ # contents to the while loop so we can record the
+ # script progress in real time to the public facing
+ # snapshot server (${RSYNCIP}).
+ ( build_loop_operations ) | while read LINE
+ do
+ update_status "$LINE"
+ done
+
+ export minsleepvalue=28800
+ export maxsleepvalue=86400
+
+ # Initialize variables that keep track of last commit
+ [ -z "${PRODUCT_LAST_COMMIT}" ] \
+ && export PRODUCT_LAST_COMMIT="$(cd "${GIT_REPO_DIR}/${GIT_REPO_BRANCH_OR_TAG}" && git log | head -n1 | cut -d' ' -f2)"
+ [ -z "${TOOLS_LAST_COMMIT}" ] \
+ && export TOOLS_LAST_COMMIT="$(cd "${BUILDER_SCRIPTS}" && git log | head -n1 | cut -d' ' -f2)"
+
+ update_status ">>> Sleeping for at least $minsleepvalue, at most $maxsleepvalue in between snapshot builder runs. Last known commit ${PRODUCT_LAST_COMMIT}/${TOOLS_LAST_COMMIT}"
+ update_status ">>> Freezing build process at `date`."
+ sleep $minsleepvalue
+ update_status ">>> Thawing build process and resuming checks for pending commits at `date`."
+
+ # Count some sheep or wait until a new commit turns up
+ # for one days time. We will wake up if a new commit
+ # is detected during sleepy time.
+ sleep_between_runs $maxsleepvalue
+
+ # If REBOOT_AFTER_SNAPSHOT_RUN is defined reboot
+ # the box after the run.
+ if [ ! -z "${REBOOT_AFTER_SNAPSHOT_RUN:-}" ]; then
+ update_status ">>> Rebooting `hostname` due to \$REBOOT_AFTER_SNAPSHOT_RUN"
+ shutdown -r now
+ kill $$
+ fi
+ # Rotate log file (.old)
+ rotate_logfile
+
+ # Set a common DATESTRING for the build if not set from builder_defaults.sh.
+ # Rely on builder_defaults.sh doing the right job the first time included from this script.
+ # NOTE: This is needed to have autoupdate detect a new version.
+ # Override it here to have continuous builds with proper labels
+ rm -f $DATESTRINGFILE
+ rm -f $BUILTDATESTRINGFILE
+ unset DATESTRING
+ unset BUILTDATESTRING
+ unset ISOPATH
+ unset MEMSTICKPATH
+ unset MEMSTICKSERIALPATH
+ unset MEMSTICKADIPATH
+ unset UPDATES_TARBALL_FILENAME
+ # builder_defaults.sh will set variables with correct timestamp
+ . ./builder_defaults.sh
+ done
+fi
OpenPOWER on IntegriCloud