1*5a4dffacSNathan Whitehorn#!/bin/sh 2*5a4dffacSNathan Whitehorn#- 3*5a4dffacSNathan Whitehorn# Copyright (c) 2011 Nathan Whitehorn 4*5a4dffacSNathan Whitehorn# Copyright (c) 2013-2018 Devin Teske 5*5a4dffacSNathan Whitehorn# All rights reserved. 6*5a4dffacSNathan Whitehorn# 7*5a4dffacSNathan Whitehorn# Redistribution and use in source and binary forms, with or without 8*5a4dffacSNathan Whitehorn# modification, are permitted provided that the following conditions 9*5a4dffacSNathan Whitehorn# are met: 10*5a4dffacSNathan Whitehorn# 1. Redistributions of source code must retain the above copyright 11*5a4dffacSNathan Whitehorn# notice, this list of conditions and the following disclaimer. 12*5a4dffacSNathan Whitehorn# 2. Redistributions in binary form must reproduce the above copyright 13*5a4dffacSNathan Whitehorn# notice, this list of conditions and the following disclaimer in the 14*5a4dffacSNathan Whitehorn# documentation and/or other materials provided with the distribution. 15*5a4dffacSNathan Whitehorn# 16*5a4dffacSNathan Whitehorn# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17*5a4dffacSNathan Whitehorn# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18*5a4dffacSNathan Whitehorn# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19*5a4dffacSNathan Whitehorn# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20*5a4dffacSNathan Whitehorn# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21*5a4dffacSNathan Whitehorn# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22*5a4dffacSNathan Whitehorn# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23*5a4dffacSNathan Whitehorn# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24*5a4dffacSNathan Whitehorn# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25*5a4dffacSNathan Whitehorn# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26*5a4dffacSNathan Whitehorn# SUCH DAMAGE. 27*5a4dffacSNathan Whitehorn# 28*5a4dffacSNathan Whitehorn# $FreeBSD$ 29*5a4dffacSNathan Whitehorn# 30*5a4dffacSNathan Whitehorn 31*5a4dffacSNathan Whitehornerror() 32*5a4dffacSNathan Whitehorn{ 33*5a4dffacSNathan Whitehorn dialog --backtitle "FreeBSD Installer" --title "Error" --msgbox $1 0 0 34*5a4dffacSNathan Whitehorn exit 1 35*5a4dffacSNathan Whitehorn} 36*5a4dffacSNathan Whitehorn 37*5a4dffacSNathan WhitehornFETCH_DISTRIBUTIONS="" 38*5a4dffacSNathan WhitehornLOCAL_DISTRIBUTIONS="" 39*5a4dffacSNathan Whitehornfor dist in $DISTRIBUTIONS; do 40*5a4dffacSNathan Whitehorn if [ ! -f $BSDINSTALL_DISTDIR/$dist ]; then 41*5a4dffacSNathan Whitehorn FETCH_DISTRIBUTIONS="$FETCH_DISTRIBUTIONS $dist" 42*5a4dffacSNathan Whitehorn else 43*5a4dffacSNathan Whitehorn LOCAL_DISTRIBUTIONS="$LOCAL_DISTRIBUTIONS $dist" 44*5a4dffacSNathan Whitehorn fi 45*5a4dffacSNathan Whitehorndone 46*5a4dffacSNathan WhitehornLOCAL_DISTRIBUTIONS=`echo $LOCAL_DISTRIBUTIONS` # Trim white space 47*5a4dffacSNathan WhitehornFETCH_DISTRIBUTIONS=`echo $FETCH_DISTRIBUTIONS` # Trim white space 48*5a4dffacSNathan Whitehorn 49*5a4dffacSNathan Whitehornif [ -z "$FETCH_DISTRIBUTIONS" ]; then 50*5a4dffacSNathan Whitehorn echo $BSDINSTALL_DISTDIR >&2 51*5a4dffacSNathan Whitehorn exit 0 52*5a4dffacSNathan Whitehornfi 53*5a4dffacSNathan Whitehorn 54*5a4dffacSNathan WhitehornALL_DISTRIBUTIONS="$DISTRIBUTIONS" 55*5a4dffacSNathan WhitehornWANT_DEBUG= 56*5a4dffacSNathan Whitehorn 57*5a4dffacSNathan Whitehorn# Download to a directory in the new system as scratch space 58*5a4dffacSNathan WhitehornBSDINSTALL_FETCHDEST="$BSDINSTALL_CHROOT/usr/freebsd-dist" 59*5a4dffacSNathan Whitehornmkdir -p "$BSDINSTALL_FETCHDEST" || error "Could not create directory $BSDINSTALL_FETCHDEST" 60*5a4dffacSNathan Whitehorn 61*5a4dffacSNathan Whitehornif [ -z "$BSDINSTALL_DISTSITE" ]; then 62*5a4dffacSNathan Whitehorn exec 3>&1 63*5a4dffacSNathan Whitehorn BSDINSTALL_DISTSITE=$(`dirname $0`/mirrorselect 2>&1 1>&3) 64*5a4dffacSNathan Whitehorn MIRROR_BUTTON=$? 65*5a4dffacSNathan Whitehorn exec 3>&- 66*5a4dffacSNathan Whitehorn test $MIRROR_BUTTON -eq 0 || error "No mirror selected" 67*5a4dffacSNathan Whitehorn export BSDINSTALL_DISTSITE 68*5a4dffacSNathan Whitehornfi 69*5a4dffacSNathan Whitehorn 70*5a4dffacSNathan WhitehornBSDINSTALL_DISTDIR_ORIG="$BSDINSTALL_DISTDIR" 71*5a4dffacSNathan Whitehornexport BSDINSTALL_DISTDIR="$BSDINSTALL_FETCHDEST" 72*5a4dffacSNathan Whitehornexport FTP_PASSIVE_MODE=YES 73*5a4dffacSNathan Whitehorn 74*5a4dffacSNathan Whitehornif [ -f "$BSDINSTALL_DISTDIR_ORIG/MANIFEST" ]; then 75*5a4dffacSNathan Whitehorn cp "$BSDINSTALL_DISTDIR_ORIG/MANIFEST" "$BSDINSTALL_DISTDIR/MANIFEST" 76*5a4dffacSNathan Whitehorn VERIFY_MANIFEST_SIG=0 77*5a4dffacSNathan Whitehornelse 78*5a4dffacSNathan Whitehorn FETCH_DISTRIBUTIONS="MANIFEST $FETCH_DISTRIBUTIONS" 79*5a4dffacSNathan Whitehorn VERIFY_MANIFEST_SIG=1 80*5a4dffacSNathan Whitehorn 81*5a4dffacSNathan Whitehorn # XXX actually verify signature on manifest 82*5a4dffacSNathan Whitehorn dialog --backtitle "FreeBSD 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 83*5a4dffacSNathan Whitehornfi 84*5a4dffacSNathan Whitehorn 85*5a4dffacSNathan Whitehornif [ ! -z "$LOCAL_DISTRIBUTIONS" ]; then 86*5a4dffacSNathan Whitehorn # Copy local stuff first 87*5a4dffacSNathan Whitehorn env DISTRIBUTIONS="$LOCAL_DISTRIBUTIONS" \ 88*5a4dffacSNathan Whitehorn BSDINSTALL_DISTSITE="file://$BSDINSTALL_DISTDIR" \ 89*5a4dffacSNathan Whitehorn bsdinstall distfetch || \ 90*5a4dffacSNathan Whitehorn error "Failed to fetch distribution from local media" 91*5a4dffacSNathan Whitehornfi 92*5a4dffacSNathan Whitehorn 93*5a4dffacSNathan Whitehornexport DISTRIBUTIONS="$FETCH_DISTRIBUTIONS" 94*5a4dffacSNathan Whitehorn 95*5a4dffacSNathan Whitehorn# Iterate through the distribution list and set a flag if debugging 96*5a4dffacSNathan Whitehorn# distributions have been selected. 97*5a4dffacSNathan Whitehornfor _DISTRIBUTION in $DISTRIBUTIONS; do 98*5a4dffacSNathan Whitehorn case $_DISTRIBUTION in 99*5a4dffacSNathan Whitehorn *-dbg.*) 100*5a4dffacSNathan Whitehorn [ -e $BSDINSTALL_DISTDIR/$_DISTRIBUTION ] \ 101*5a4dffacSNathan Whitehorn && continue 102*5a4dffacSNathan Whitehorn WANT_DEBUG=1 103*5a4dffacSNathan Whitehorn DEBUG_LIST="\n$DEBUG_LIST\n$_DISTRIBUTION" 104*5a4dffacSNathan Whitehorn ;; 105*5a4dffacSNathan Whitehorn *) 106*5a4dffacSNathan Whitehorn ;; 107*5a4dffacSNathan Whitehorn esac 108*5a4dffacSNathan Whitehorndone 109*5a4dffacSNathan Whitehorn 110*5a4dffacSNathan Whitehorn# Fetch the distributions. 111*5a4dffacSNathan Whitehornbsdinstall distfetch 112*5a4dffacSNathan Whitehornrc=$? 113*5a4dffacSNathan Whitehorn 114*5a4dffacSNathan Whitehornif [ $rc -ne 0 ]; then 115*5a4dffacSNathan Whitehorn # If unable to fetch the remote distributions, recommend 116*5a4dffacSNathan Whitehorn # deselecting the debugging distributions, and retrying the 117*5a4dffacSNathan Whitehorn # installation, since failure to fetch *-dbg.txz should not 118*5a4dffacSNathan Whitehorn # be considered a fatal installation error. 119*5a4dffacSNathan Whitehorn msg="Failed to fetch remote distribution" 120*5a4dffacSNathan Whitehorn if [ ! -z "$WANT_DEBUG" ]; then 121*5a4dffacSNathan Whitehorn # Trim leading and trailing newlines. 122*5a4dffacSNathan Whitehorn DEBUG_LIST="${DEBUG_LIST%%\n}" 123*5a4dffacSNathan Whitehorn DEBUG_LIST="${DEBUG_LIST##\n}" 124*5a4dffacSNathan Whitehorn msg="$msg\n\nPlease deselect the following distributions" 125*5a4dffacSNathan Whitehorn msg="$msg and retry the installation:" 126*5a4dffacSNathan Whitehorn msg="$msg\n$DEBUG_LIST" 127*5a4dffacSNathan Whitehorn fi 128*5a4dffacSNathan Whitehorn error "$msg" 129*5a4dffacSNathan Whitehornfi 130*5a4dffacSNathan Whitehorn 131*5a4dffacSNathan Whitehornecho $BSDINSTALL_DISTDIR >&2 132*5a4dffacSNathan Whitehorn 133