From 6f73c36226d8583b90ddcff50850701c06de2ee2 Mon Sep 17 00:00:00 2001 From: Renato Botelho Date: Tue, 25 Aug 2015 08:21:15 -0300 Subject: Import build scripts from pfSense-tools repo --- build.sh | 372 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 372 insertions(+) create mode 100755 build.sh (limited to 'build.sh') 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 -- cgit v1.1