summaryrefslogtreecommitdiffstats
path: root/build.sh
diff options
context:
space:
mode:
Diffstat (limited to 'build.sh')
-rwxr-xr-xbuild.sh372
1 files changed, 372 insertions, 0 deletions
diff --git a/build.sh b/build.sh
new file mode 100755
index 0000000..1801ae9
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,372 @@
+#!/bin/sh
+#
+# build.sh
+#
+# Copyright (c) 2004-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.
+#
+# 3. All advertising materials mentioning features or use of this software
+# must display the following acknowledgment:
+# "This product includes software developed by the pfSense Project
+# for use in the pfSense® software distribution. (http://www.pfsense.org/).
+#
+# 4. The names "pfSense" and "pfSense Project" must not be used to
+# endorse or promote products derived from this software without
+# prior written permission. For written permission, please contact
+# coreteam@pfsense.org.
+#
+# 5. Products derived from this software may not be called "pfSense"
+# nor may "pfSense" appear in their names without prior written
+# permission of the Electric Sheep Fencing, LLC.
+#
+# 6. Redistributions of any form whatsoever must retain the following
+# acknowledgment:
+#
+# "This product includes software developed by the pfSense Project
+# for use in the pfSense software distribution (http://www.pfsense.org/).
+#
+# 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.
+#
+
+set +e
+usage() {
+ echo "Usage $0 [options] [ iso | nanobsd | ova | nanobsd-vga | memstick | memstickserial | memstickadi | fullupdate | all ]"
+ echo " all = iso nanobsd nanobsd-vga memstick memstickserial memstickadi fullupdate"
+ echo " [ options ]: "
+ echo " --flash-size|-f size(s) - a list of flash sizes to build with nanobsd i.e. '512m 1g'. Default: 512m"
+ echo " --flash-vendor|-m vendor - flash vendor type. check the code for supported vendors. Default: sandisk"
+ echo " --no-buildworld|-c - Will set NO_BUILDWORLD NO_BUILDKERNEL to not build kernel and world"
+ echo " --no-cleanobjdir|--no-cleanrepos|-d - Will not clean FreeBSD object built dir to allow restarting a build with NO_CLEAN"
+ echo " --resume-image-build|-r - Includes -c -d and also will just move directly to image creation using pre-staged data"
+ echo " --setup - Install required repo and ports builder require to work"
+ echo " --update-sources - Refetch all sources"
+ echo " --print-flags - Show current builder configuration"
+ echo " --clean-builder - clean all builder used data/resources"
+ echo " --build-kernels - build all configured kernels"
+ echo " --build-kernel argument - build specified kernel. Example --build-kernel KERNEL_NAME"
+ echo " --install-extra-kernels argument - Put extra kernel(s) under /kernel image directory. Example --install-extra-kernels KERNEL_NAME_WRAP"
+ echo " --enable-memorydisks - This will put stage_dir and iso_dir as MFS filesystems"
+ echo " --disable-memorydisks - Will just teardown these filesystems created by --enable-memorydisks"
+ echo " --setup-poudriere - Install poudriere and create necessary jails and ports tree"
+ echo " --create-unified-patch - Create a big patch with all changes done on FreeBSD"
+ echo " --update-poudriere-jails [-a ARCH_LIST] - Update poudriere jails using current patch versions"
+ echo " --update-poudriere-ports - Update poudriere ports tree"
+ echo " --update-pkg-repo - Rebuild necessary ports on poudriere and update pkg repo"
+ echo " --do-not-upload|-U - Do not send updated pkg repo to PKG_RSYNC_HOSTNAME"
+ echo " -V VARNAME - print value of variable VARNAME"
+ exit 1
+}
+
+export BUILDER_SCRIPTS=$(realpath $(dirname ${0}))
+
+unset _SKIP_REBUILD_PRESTAGE
+unset _USE_OLD_DATESTRING
+unset pfPORTTOBUILD
+unset IMAGETYPE
+unset DO_NOT_UPLOAD
+BUILDACTION="images"
+
+# Maybe use options for nocleans etc?
+while test "$1" != ""; do
+ case "${1}" in
+ --no-buildworld|-c)
+ export NO_BUILDWORLD=YES
+ export NO_BUILDKERNEL=YES
+ ;;
+ --no-cleanobjdir|--no-cleanrepos|-d)
+ export NO_CLEANFREEBSDOBJDIR=YES
+ export NO_CLEANREPOS=YES
+ ;;
+ --flash-size|-f)
+ shift
+ if [ $# -eq 0 ]; then
+ echo "--flash-size needs extra parameter."
+ echo
+ usage
+ fi
+ export FLASH_SIZE="${1}"
+ ;;
+ --resume-image-build|-r)
+ export NO_BUILDWORLD=YES
+ export NO_BUILDKERNEL=YES
+ export NO_CLEANFREEBSDOBJDIR=YES
+ export NO_CLEANREPOS=YES
+ _SKIP_REBUILD_PRESTAGE=YES
+ _USE_OLD_DATESTRING=YES
+ ;;
+ --setup)
+ BUILDACTION="builder_setup"
+ ;;
+ --build-kernels)
+ BUILDACTION="buildkernels"
+ ;;
+ --install-extra-kernels)
+ shift
+ if [ $# -eq 0 ]; then
+ echo "--build-kernel needs extra parameter."
+ echo
+ usage
+ fi
+ export INSTALL_EXTRA_KERNELS="${1}"
+ ;;
+ --build-kernel)
+ BUILDACTION="buildkernel"
+ shift
+ if [ $# -eq 0 ]; then
+ echo "--build-kernel needs extra parameter."
+ echo
+ usage
+ fi
+ export BUILD_KERNELS="${1}"
+ ;;
+ --update-sources)
+ BUILDACTION="updatesources"
+ ;;
+ --print-flags)
+ BUILDACTION="printflags"
+ ;;
+ --clean-builder)
+ BUILDACTION="cleanbuilder"
+ ;;
+ --enable-memorydisks)
+ BUILDACTION="enablememorydisk"
+ ;;
+ --disable-memorydisks)
+ BUILDACTION="disablememorydisk"
+ ;;
+ --setup-poudriere)
+ BUILDACTION="setup_poudriere"
+ ;;
+ --create-unified-patch)
+ BUILDACTION="create_unified_patch"
+ ;;
+ --update-poudriere-jails)
+ BUILDACTION="update_poudriere_jails"
+ shift
+ unset ARCH_LIST
+ if [ "${1}" = "-a" ]; then
+ shift
+ if [ $# -eq 0 ]; then
+ echo "-a needs extra parameter."
+ echo
+ usage
+ fi
+ export ARCH_LIST="${1}"
+ fi
+ ;;
+ --update-poudriere-ports)
+ BUILDACTION="update_poudriere_ports"
+ ;;
+ --update-pkg-repo)
+ BUILDACTION="update_pkg_repo"
+ ;;
+ --do-not-upload|-U)
+ export DO_NOT_UPLOAD=1
+ ;;
+ all|*iso*|*ova*|*memstick*|*memstickserial*|*memstickadi*|*nanobsd*|*nanobsd-vga*|*fullupdate*)
+ BUILDACTION="images"
+ IMAGETYPE="${1}"
+ ;;
+ -V)
+ shift
+ [ -n "${1}" ] \
+ && var_to_print="${1}"
+ ;;
+ *)
+ usage
+ esac
+ shift
+done
+
+# Suck in local vars
+. ${BUILDER_SCRIPTS}/builder_defaults.sh
+
+# Suck in script helper functions
+. ${BUILDER_SCRIPTS}/builder_common.sh
+
+# Print var required with -V and exit
+if [ -n "${var_to_print}" ]; then
+ eval "echo \$${var_to_print}"
+ exit 0
+fi
+
+# This should be run first
+launch
+
+case $BUILDACTION in
+ builder_setup)
+ builder_setup
+ ;;
+ buildkernels)
+ update_freebsd_sources
+ build_all_kernels
+ ;;
+ buildkernel)
+ update_freebsd_sources
+ build_all_kernels
+ ;;
+ cleanbuilder)
+ clean_obj_dir
+ ;;
+ printflags)
+ print_flags
+ ;;
+ images)
+ # It will be handled below
+ ;;
+ updatesources)
+ ensure_source_directories_present
+ ;;
+ enablememorydisk)
+ prestage_on_ram_setup
+ ;;
+ disablememorydisk)
+ prestage_on_ram_cleanup
+ ;;
+ setup_poudriere)
+ poudriere_init
+ ;;
+ create_unified_patch)
+ poudriere_create_patch
+ ;;
+ update_poudriere_jails)
+ poudriere_update_jails
+ ;;
+ update_poudriere_ports)
+ poudriere_update_ports
+ ;;
+ update_pkg_repo)
+ poudriere_bulk
+ ;;
+ *)
+ usage
+ ;;
+esac
+
+if [ "${BUILDACTION}" != "images" ]; then
+ finish
+ exit 0
+fi
+
+if [ $# -gt 1 ]; then
+ echo "ERROR: Too many arguments given."
+ echo
+ usage
+fi
+if [ -z "${IMAGETYPE}" ]; then
+ echo "ERROR: Need to specify image type to build."
+ echo
+ usage
+fi
+
+if [ "$IMAGETYPE" = "all" ]; then
+ _IMAGESTOBUILD="iso fullupdate nanobsd nanobsd-vga memstick memstickserial"
+ if [ "${TARGET}" = "amd64" ]; then
+ _IMAGESTOBUILD="${_IMAGESTOBUILD} memstickadi"
+ fi
+else
+ _IMAGESTOBUILD="${IMAGETYPE}"
+fi
+
+echo ">>> Building image type(s): ${_IMAGESTOBUILD}"
+
+if [ -z "${_SKIP_REBUILD_PRESTAGE}" ]; then
+ [ -n "${CORE_PKG_TMP}" -a -d "${CORE_PKG_TMP}" ] \
+ && rm -rf ${CORE_PKG_TMP}
+ [ -n "${CORE_PKG_PATH}" -a -d "${CORE_PKG_PATH}" ] \
+ && rm -rf ${CORE_PKG_PATH}
+
+ # Cleanup environment before start
+ clean_obj_dir
+
+ # Make sure source directories are present.
+ ensure_source_directories_present
+ git_last_commit
+
+ # Ensure binaries are present that builder system requires
+ builder_setup
+
+ # Output build flags
+ print_flags
+
+ # Check to see if pre-staging will be hosted on ram
+ prestage_on_ram_setup
+
+ # Build world, kernel and install
+ echo ">>> Building world for ISO... $FREEBSD_BRANCH ..."
+ make_world
+
+ # Build kernels
+ echo ">>> Building kernel configs: $BUILD_KERNELS for FreeBSD: $FREEBSD_BRANCH ..."
+ build_all_kernels
+
+ # Prepare pre-final staging area
+ clone_to_staging_area
+
+ # Install packages needed for Product
+ install_pkg_install_ports
+fi
+
+export DEFAULT_KERNEL=${DEFAULT_KERNEL_ISO:-"${PRODUCT_NAME}"}
+
+for _IMGTOBUILD in $_IMAGESTOBUILD; do
+ # Clean up items that should be cleaned each run
+ staginareas_clean_each_run
+
+ if [ "${_IMGTOBUILD}" = "iso" ]; then
+ (create_iso_image)
+ elif [ "${_IMGTOBUILD}" = "memstick" ]; then
+ (create_memstick_image)
+ elif [ "${_IMGTOBUILD}" = "memstickserial" ]; then
+ (create_memstick_serial_image)
+ elif [ "${_IMGTOBUILD}" = "memstickadi" ]; then
+ (create_memstick_adi_image)
+ elif [ "${_IMGTOBUILD}" = "fullupdate" ]; then
+ create_Full_update_tarball
+ elif [ "${_IMGTOBUILD}" = "nanobsd" -o "${_IMGTOBUILD}" = "nanobsd-vga" ]; then
+ if [ "${TARGET}" = "i386" -a "${_IMGTOBUILD}" = "nanobsd" ]; then
+ export DEFAULT_KERNEL=${DEFAULT_KERNEL_NANOBSD:-"${PRODUCT_NAME}_wrap"}
+ elif [ "${TARGET}" = "i386" -a "${_IMGTOBUILD}" = "nanobsd-vga" ]; then
+ export DEFAULT_KERNEL=${DEFAULT_KERNEL_NANOBSDVGA:-"${PRODUCT_NAME}_wrap_vga"}
+ elif [ "${TARGET}" = "amd64" ]; then
+ export DEFAULT_KERNEL=${DEFAULT_KERNEL_NANOBSD:-"${PRODUCT_NAME}"}
+ fi
+ # Create the NanoBSD disk image
+ create_nanobsd_diskimage ${_IMGTOBUILD} "${FLASH_SIZE}"
+ elif [ "${_IMGTOBUILD}" = "ova" ]; then
+ install_pkg_install_ports ${PRODUCT_NAME}-vm
+ (create_ova_image)
+ install_pkg_install_ports
+ fi
+done
+
+echo ">>> NOTE: waiting for jobs: `jobs -l` to finish..."
+wait
+
+echo ">>> $MAKEOBJDIRPREFIXFINAL now contains:"
+ls -lah $MAKEOBJDIRPREFIXFINAL
+
+set -e
+# Run final finish routines
+finish
OpenPOWER on IntegriCloud