aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/bsdinstall/scripts/fetchmissingdists
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/bsdinstall/scripts/fetchmissingdists')
-rw-r--r--usr.sbin/bsdinstall/scripts/fetchmissingdists131
1 files changed, 131 insertions, 0 deletions
diff --git a/usr.sbin/bsdinstall/scripts/fetchmissingdists b/usr.sbin/bsdinstall/scripts/fetchmissingdists
new file mode 100644
index 000000000000..f5da3ee45c39
--- /dev/null
+++ b/usr.sbin/bsdinstall/scripts/fetchmissingdists
@@ -0,0 +1,131 @@
+#!/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
+
+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 5>&1
+ BSDINSTALL_DISTSITE=$(`dirname $0`/mirrorselect 2>&1 1>&5)
+ MIRROR_BUTTON=$?
+ exec 5>&-
+ 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"
+else
+ FETCH_DISTRIBUTIONS="MANIFEST $FETCH_DISTRIBUTIONS"
+
+ # 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
+