#!/bin/sh #- # Copyright (c) 2011 Nathan Whitehorn # Copyright (c) 2013-2018 Devin Teske # 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 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. # # BSDCFG_SHARE="/usr/share/bsdconfig" . $BSDCFG_SHARE/common.subr || exit 1 error() { bsddialog --backtitle "$OSNAME Installer" --title "Error" --msgbox "$1" 0 0 exit 1 } FETCH_DISTRIBUTIONS="" LOCAL_DISTRIBUTIONS="" for dist in $DISTRIBUTIONS; do if [ ! -f $BSDINSTALL_DISTDIR/$dist ]; then FETCH_DISTRIBUTIONS="$FETCH_DISTRIBUTIONS $dist" else LOCAL_DISTRIBUTIONS="$LOCAL_DISTRIBUTIONS $dist" fi done LOCAL_DISTRIBUTIONS=`echo $LOCAL_DISTRIBUTIONS` # Trim white space FETCH_DISTRIBUTIONS=`echo $FETCH_DISTRIBUTIONS` # Trim white space if [ -z "$FETCH_DISTRIBUTIONS" ]; then echo $BSDINSTALL_DISTDIR >&2 exit 0 fi ALL_DISTRIBUTIONS="$DISTRIBUTIONS" WANT_DEBUG= # Download to a directory in the new system as scratch space BSDINSTALL_FETCHDEST="$BSDINSTALL_CHROOT/usr/freebsd-dist" mkdir -p "$BSDINSTALL_FETCHDEST" || error "Could not create directory $BSDINSTALL_FETCHDEST" if [ -z "$BSDINSTALL_DISTSITE" ]; then exec 3>&1 BSDINSTALL_DISTSITE=$(`dirname $0`/mirrorselect 2>&1 1>&3) MIRROR_BUTTON=$? exec 3>&- test $MIRROR_BUTTON -eq 0 || error "No mirror selected" export BSDINSTALL_DISTSITE fi BSDINSTALL_DISTDIR_ORIG="$BSDINSTALL_DISTDIR" export BSDINSTALL_DISTDIR="$BSDINSTALL_FETCHDEST" export FTP_PASSIVE_MODE=YES if [ -f "$BSDINSTALL_DISTDIR_ORIG/MANIFEST" ]; then cp "$BSDINSTALL_DISTDIR_ORIG/MANIFEST" "$BSDINSTALL_DISTDIR/MANIFEST" VERIFY_MANIFEST_SIG=0 else FETCH_DISTRIBUTIONS="MANIFEST $FETCH_DISTRIBUTIONS" VERIFY_MANIFEST_SIG=1 # XXX actually verify signature on manifest bsddialog --backtitle "$OSNAME Installer" --title "Warning" --msgbox "Manifest not found on local disk and will be fetched from an unverified source. This is a potential security risk. If you do not wish to proceed, press control-C now." 0 0 fi if [ ! -z "$LOCAL_DISTRIBUTIONS" ]; then # Copy local stuff first env DISTRIBUTIONS="$LOCAL_DISTRIBUTIONS" \ BSDINSTALL_DISTSITE="file://$BSDINSTALL_DISTDIR_ORIG" \ bsdinstall distfetch || \ error "Failed to fetch distribution from local media" fi export DISTRIBUTIONS="$FETCH_DISTRIBUTIONS" # Iterate through the distribution list and set a flag if debugging # distributions have been selected. for _DISTRIBUTION in $DISTRIBUTIONS; do case $_DISTRIBUTION in *-dbg.*) [ -e $BSDINSTALL_DISTDIR/$_DISTRIBUTION ] \ && continue WANT_DEBUG=1 DEBUG_LIST="\n$DEBUG_LIST\n$_DISTRIBUTION" ;; *) ;; esac done # Fetch the distributions. bsdinstall distfetch rc=$? if [ $rc -ne 0 ]; then # If unable to fetch the remote distributions, recommend # deselecting the debugging distributions, and retrying the # installation, since failure to fetch *-dbg.txz should not # be considered a fatal installation error. msg="Failed to fetch remote distribution" if [ ! -z "$WANT_DEBUG" ]; then # Trim leading and trailing newlines. DEBUG_LIST="${DEBUG_LIST%%\n}" DEBUG_LIST="${DEBUG_LIST##\n}" msg="$msg\n\nPlease deselect the following distributions" msg="$msg and retry the installation:" msg="$msg\n$DEBUG_LIST" fi error "$msg" fi echo $BSDINSTALL_DISTDIR >&2