diff options
author | Renato Botelho <renato@netgate.com> | 2016-08-01 16:49:15 -0300 |
---|---|---|
committer | Renato Botelho <renato@netgate.com> | 2016-08-01 16:49:15 -0300 |
commit | 468f236dab9eafa8c39403ce66c50b153fbb1d42 (patch) | |
tree | 7a3d5339db501d019fa970aea66c089276e238f9 | |
parent | 29cdd776aeb9531a745c773d7ebee84daaa891e5 (diff) | |
download | pfsense-468f236dab9eafa8c39403ce66c50b153fbb1d42.zip pfsense-468f236dab9eafa8c39403ce66c50b153fbb1d42.tar.gz |
Add install_freebsd.sh and use it
-rwxr-xr-x | build/scripts/install_freebsd.sh | 161 | ||||
-rw-r--r-- | tools/builder_common.sh | 47 |
2 files changed, 179 insertions, 29 deletions
diff --git a/build/scripts/install_freebsd.sh b/build/scripts/install_freebsd.sh new file mode 100755 index 0000000..19b04eb --- /dev/null +++ b/build/scripts/install_freebsd.sh @@ -0,0 +1,161 @@ +#!/bin/sh +# +# install_freebsd.sh +# +# part of pfSense (https://www.pfsense.org) +# Copyright (c) 2004-2016 Electric Sheep Fencing, LLC +# All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +export PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin + +scripts_path=$(dirname $(realpath $0)) + +if [ ! -f "${scripts_path}/common.subr" ]; then + echo >&2 "ERROR: common.subr is missing" + exit 1 +fi + +. ${scripts_path}/common.subr + +usage() { + cat >&2 <<END +Usage: $(basename $0) -s srcdir -d destdir [-o objdir] [-iWKDhz] + +Options: + -s srcdir -- Path to src directory + -d destdir -- Destination directory to install + -o objdir -- Obj directory used to build + -i -- Include BSDInstall + -W -- Skip installworld + -K -- Skip installkernel + -D -- Skip distribution + -h -- Show this help and exit + -z -- gzip kernel + +Environment: + __MAKE_CONF -- Path to make.conf + SRCCONF -- Path to src.conf + SRC_ENV_CONF -- Path to src-env.conf + KERNCONF -- Kernel names + MODULES_OVERRIDE -- List of kernel modules to install + TARGET -- Machine hardware name + TARGET_ARCH -- Machine processor arquitecture name +END + exit 1 +} + +unset with_bsdinstall +unset skip_world +unset skip_kernel +unset skip_distribution +unset gzip_kernel +while getopts s:d:o:iWKDhz opt; do + case "$opt" in + s) + srcdir=$OPTARG + ;; + d) + destdir=$OPTARG + ;; + o) + objdir=$OPTARG + ;; + i) + with_bsdinstall=1 + ;; + W) + skip_world=1 + ;; + K) + skip_kernel=1 + ;; + D) + skip_distribution=1 + ;; + z) + gzip_kernel=1 + ;; + *) + usage + ;; + esac +done + +# Default obj dir to src/../obj +: ${objdir=$(realpath ${srcdir}../obj)} + +[ -z "$srcdir" ] \ + && err "source directory is not defined" + +[ -e $srcdir -a ! -d $srcdir ] \ + && err "source path already exists and is not a directory" + +[ -z "$destdir" ] \ + && err "destination directory is not defined" + +[ -e $destdir -a ! -d $destdir ] \ + && err "destination path already exists and is not a directory" + +[ -n "$objdir" -a -e $objdir -a ! -d $objdir ] \ + && err "obj path already exists and is not a directory" + +for env_var in __MAKE_CONF SRCCONF SRC_ENV_CONF; do + eval "value=\${$env_var}" + [ -n "${value}" -a ! -f "${value}" ] \ + && err "${env_var} is pointing to a nonexistent file ${value}" +done + +[ ! -f ${srcdir}/sys/sys/param.h ] \ + && err "Source directory is missing sys/sys/param.h" + +ncpu=$(sysctl -n hw.ncpu) +njobs=$((ncpu*2)) +j="-j${njobs}" + +[ -n "${objdir}" ] \ + && export MAKEOBJDIRPREFIX=${objdir} + +[ -z "${with_bsdinstall}" ] \ + && export WITHOUT_BSDINSTALL=yes + +[ -d $destdir ] \ + && force_rm ${destdir} + +export DESTDIR=${destdir} + +make_cmd="make -C ${srcdir} -s ${j}" + +[ -z "${skip_world}" ] \ + && run "Installing world" \ + "${make_cmd} installworld" + +if [ -z "${skip_kernel}" ]; then + run "Installing kernel" \ + "${make_cmd} KERNCONF=${KERNCONF:-pfSense} installkernel" + + [ -n "${gzip_kernel}" ] \ + && run "Compressing kernel" \ + "gzip -f9 ${destdir}/boot/kernel/kernel" +fi + +[ -z "${skip_distribution}" ] \ + && run "Installing distribution" \ + "${make_cmd} distribution" + +[ -n "${with_bsdinstall}" ] \ + && run "Copying /etc/rc.local to start bsdinstall" \ + "cp ${srcdir}/release/rc.local ${destdir}/etc" + +exit 0 diff --git a/tools/builder_common.sh b/tools/builder_common.sh index d4ef70e..61b379a 100644 --- a/tools/builder_common.sh +++ b/tools/builder_common.sh @@ -326,37 +326,25 @@ make_world() { [ -d "${INSTALLER_CHROOT_DIR}" ] \ || mkdir -p ${INSTALLER_CHROOT_DIR} - makeargs="${MAKEJ} DESTDIR=${INSTALLER_CHROOT_DIR}" - echo ">>> Installing world for ${TARGET} architecture... (Starting - $(LC_ALL=C date))" | tee -a ${LOGFILE} - echo ">>> Builder is running the command: script -aq $LOGFILE make -C ${FREEBSD_SRC_DIR} ${makeargs} installworld" | tee -a ${LOGFILE} - (script -aq $LOGFILE make -C ${FREEBSD_SRC_DIR} ${makeargs} installworld || print_error_pfS;) | egrep '^>>>' | tee -a ${LOGFILE} - cp ${FREEBSD_SRC_DIR}/release/rc.local ${INSTALLER_CHROOT_DIR}/etc - echo ">>> Installing world for ${TARGET} architecture... (Finished - $(LC_ALL=C date))" | tee -a ${LOGFILE} - - echo ">>> Distribution world for ${TARGET} architecture... (Starting - $(LC_ALL=C date))" | tee -a ${LOGFILE} - echo ">>> Builder is running the command: script -aq $LOGFILE make -C ${FREEBSD_SRC_DIR} ${makeargs} distribution " | tee -a ${LOGFILE} - (script -aq $LOGFILE make -C ${FREEBSD_SRC_DIR} ${makeargs} distribution || print_error_pfS;) | egrep '^>>>' | tee -a ${LOGFILE} - echo ">>> Distribution world for ${TARGET} architecture... (Finished - $(LC_ALL=C date))" | tee -a ${LOGFILE} - - makeargs="${MAKEJ} WITHOUT_BSDINSTALL=1 DESTDIR=${STAGE_CHROOT_DIR}" - echo ">>> Installing world for ${TARGET} architecture... (Starting - $(LC_ALL=C date))" | tee -a ${LOGFILE} - echo ">>> Builder is running the command: script -aq $LOGFILE make -C ${FREEBSD_SRC_DIR} ${makeargs} installworld" | tee -a ${LOGFILE} - (script -aq $LOGFILE make -C ${FREEBSD_SRC_DIR} ${makeargs} installworld || print_error_pfS;) | egrep '^>>>' | tee -a ${LOGFILE} - echo ">>> Installing world for ${TARGET} architecture... (Finished - $(LC_ALL=C date))" | tee -a ${LOGFILE} - - echo ">>> Distribution world for ${TARGET} architecture... (Starting - $(LC_ALL=C date))" | tee -a ${LOGFILE} - echo ">>> Builder is running the command: script -aq $LOGFILE make -C ${FREEBSD_SRC_DIR} ${makeargs} distribution " | tee -a ${LOGFILE} - (script -aq $LOGFILE make -C ${FREEBSD_SRC_DIR} ${makeargs} distribution || print_error_pfS;) | egrep '^>>>' | tee -a ${LOGFILE} - echo ">>> Distribution world for ${TARGET} architecture... (Finished - $(LC_ALL=C date))" | tee -a ${LOGFILE} + echo ">>> Installing world with bsdinstall for ${TARGET} architecture..." | tee -a ${LOGFILE} + script -aq $LOGFILE ${SCRIPTS_DIR}/install_freebsd.sh -i -K \ + -s ${FREEBSD_SRC_DIR} \ + -d ${INSTALLER_CHROOT_DIR} \ + || print_error_pfS + + echo ">>> Installing world without bsdinstall for ${TARGET} architecture..." | tee -a ${LOGFILE} + script -aq $LOGFILE ${SCRIPTS_DIR}/install_freebsd.sh -K \ + -s ${FREEBSD_SRC_DIR} \ + -d ${STAGE_CHROOT_DIR} \ + || print_error_pfS + # XXX It must go to the scripts [ -d "${STAGE_CHROOT_DIR}/usr/local/bin" ] \ || mkdir -p ${STAGE_CHROOT_DIR}/usr/local/bin - makeargs="${MAKEJ} DESTDIR=${STAGE_CHROOT_DIR}" + makeargs="DESTDIR=${STAGE_CHROOT_DIR}" echo ">>> Building and installing crypto tools and athstats for ${TARGET} architecture... (Starting - $(LC_ALL=C date))" | tee -a ${LOGFILE} - echo ">>> Builder is running the command: script -aq $LOGFILE make -C ${FREEBSD_SRC_DIR}/tools/tools/crypto ${makeargs} clean all install " | tee -a ${LOGFILE} (script -aq $LOGFILE make -C ${FREEBSD_SRC_DIR}/tools/tools/crypto ${makeargs} clean all install || print_error_pfS;) | egrep '^>>>' | tee -a ${LOGFILE} # XXX FIX IT -# echo ">>> Builder is running the command: script -aq $LOGFILE make -C ${FREEBSD_SRC_DIR}/tools/tools/ath/athstats ${makeargs} clean all install" | tee -a ${LOGFILE} # (script -aq $LOGFILE make -C ${FREEBSD_SRC_DIR}/tools/tools/ath/athstats ${makeargs} clean all install || print_error_pfS;) | egrep '^>>>' | tee -a ${LOGFILE} echo ">>> Building and installing crypto tools and athstats for ${TARGET} architecture... (Finished - $(LC_ALL=C date))" | tee -a ${LOGFILE} @@ -1616,10 +1604,11 @@ installkernel() { fi mkdir -p ${STAGE_CHROOT_DIR}/boot - makeargs="${MAKEJ} DESTDIR=${_destdir}" - echo ">>> Builder is running the command: script -aq $LOGFILE make ${makeargs} installkernel KERNCONF=${KERNCONF}" | tee -a $LOGFILE - (script -aq $LOGFILE make -C ${FREEBSD_SRC_DIR} ${makeargs} installkernel KERNCONF=${KERNCONF} || print_error_pfS;) | egrep '^>>>' - gzip -f9 ${_destdir}/boot/kernel/kernel + echo ">>> Installing kernel (${KERNCONF}) for ${TARGET} architecture..." | tee -a ${LOGFILE} + script -aq $LOGFILE ${SCRIPTS_DIR}/install_freebsd.sh -W -D -z \ + -s ${FREEBSD_SRC_DIR} \ + -d ${_destdir} \ + || print_error_pfS } # Launch is ran first to setup a few variables that we need |