xref: /freebsd/usr.sbin/bsdinstall/scripts/auto (revision d512033e2a2279541ae3039d449eb2bcd7532208)
12118f387SNathan Whitehorn#!/bin/sh
22118f387SNathan Whitehorn#-
32118f387SNathan Whitehorn# Copyright (c) 2011 Nathan Whitehorn
4f0c98fdeSDevin Teske# Copyright (c) 2013-2018 Devin Teske
52118f387SNathan Whitehorn# All rights reserved.
62118f387SNathan Whitehorn#
72118f387SNathan Whitehorn# Redistribution and use in source and binary forms, with or without
82118f387SNathan Whitehorn# modification, are permitted provided that the following conditions
92118f387SNathan Whitehorn# are met:
102118f387SNathan Whitehorn# 1. Redistributions of source code must retain the above copyright
112118f387SNathan Whitehorn#    notice, this list of conditions and the following disclaimer.
122118f387SNathan Whitehorn# 2. Redistributions in binary form must reproduce the above copyright
132118f387SNathan Whitehorn#    notice, this list of conditions and the following disclaimer in the
142118f387SNathan Whitehorn#    documentation and/or other materials provided with the distribution.
152118f387SNathan Whitehorn#
162118f387SNathan Whitehorn# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
172118f387SNathan Whitehorn# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
182118f387SNathan Whitehorn# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
192118f387SNathan Whitehorn# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
202118f387SNathan Whitehorn# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
212118f387SNathan Whitehorn# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
222118f387SNathan Whitehorn# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
232118f387SNathan Whitehorn# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
242118f387SNathan Whitehorn# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
252118f387SNathan Whitehorn# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
262118f387SNathan Whitehorn# SUCH DAMAGE.
272118f387SNathan Whitehorn#
282118f387SNathan Whitehorn# $FreeBSD$
29bc4a673fSDevin Teske#
30bc4a673fSDevin Teske############################################################ INCLUDES
312118f387SNathan Whitehorn
32bc4a673fSDevin TeskeBSDCFG_SHARE="/usr/share/bsdconfig"
33bc4a673fSDevin Teske. $BSDCFG_SHARE/common.subr || exit 1
347059fa6fSAllan Judef_include $BSDCFG_SHARE/dialog.subr
35bc4a673fSDevin Teske
36f0c98fdeSDevin Teske############################################################ GLOBALS
372118f387SNathan Whitehorn
38f0c98fdeSDevin Teske#
39f0c98fdeSDevin Teske# Strings that should be moved to an i18n file and loaded with f_include_lang()
40f0c98fdeSDevin Teske#
417059fa6fSAllan Judehline_arrows_tab_enter="Press arrows, TAB or ENTER"
42f0c98fdeSDevin Teskehline_arrows_tab_space_enter="Press arrows, TAB, SPACE or ENTER"
43f0c98fdeSDevin Teskemsg_abort="Abort"
44f0c98fdeSDevin Teskemsg_exit="Exit"
45f0c98fdeSDevin Teskemsg_freebsd_installer="FreeBSD Installer"
46a7d5d8d9SAllan Judemsg_gpt_active_fix="Your hardware is known to have issues booting in CSM/Legacy/BIOS mode from GPT partitions that are not set active. Would you like the installer to apply this workaround for you?"
477059fa6fSAllan Judemsg_lenovo_fix="Your model of Lenovo is known to have a BIOS bug that prevents it booting from GPT partitions without UEFI. Would you like the installer to apply a workaround for you?"
48f0c98fdeSDevin Teskemsg_an_installation_step_has_been_aborted="An installation step has been aborted. Would you like\nto restart the installation or exit the installer?"
497059fa6fSAllan Judemsg_no="NO"
50f0c98fdeSDevin Teskemsg_restart="Restart"
517059fa6fSAllan Judemsg_yes="YES"
527059fa6fSAllan Jude
53f0c98fdeSDevin Teske############################################################ FUNCTIONS
54f0c98fdeSDevin Teske
55f0c98fdeSDevin Teske# error [$msg]
56f0c98fdeSDevin Teske#
57f0c98fdeSDevin Teske# Display generic error message when a script fails. An optional message
58f0c98fdeSDevin Teske# argument can preceed the generic message. User is given the choice of
59f0c98fdeSDevin Teske# restarting the installer or exiting.
60f0c98fdeSDevin Teske#
61f0c98fdeSDevin Teskeerror()
62f0c98fdeSDevin Teske{
63f0c98fdeSDevin Teske	local title="$msg_abort"
64f0c98fdeSDevin Teske	local btitle="$msg_freebsd_installer"
65f0c98fdeSDevin Teske	local prompt="${1:+$1\n\n}$msg_an_installation_step_has_been_aborted"
66f0c98fdeSDevin Teske	local hline="$hline_arrows_tab_space_enter"
67f0c98fdeSDevin Teske
68f0c98fdeSDevin Teske	[ "$DISTDIR_IS_UNIONFS" ] && umount -f "$BSDINSTALL_DISTDIR"
69f0c98fdeSDevin Teske	[ -f "$PATH_FSTAB" ] && bsdinstall umount
70f0c98fdeSDevin Teske
71f0c98fdeSDevin Teske	local height width
72f0c98fdeSDevin Teske	f_dialog_buttonbox_size height width \
73f0c98fdeSDevin Teske		"$title" "$btitle" "$prompt" "$hline"
74f0c98fdeSDevin Teske
75f0c98fdeSDevin Teske	if $DIALOG \
76f0c98fdeSDevin Teske		--title "$title"           \
77f0c98fdeSDevin Teske		--backtitle "$btitle"      \
78f0c98fdeSDevin Teske		--hline "$hline"           \
79f0c98fdeSDevin Teske		--no-label "$msg_exit"     \
80f0c98fdeSDevin Teske		--yes-label "$msg_restart" \
81f0c98fdeSDevin Teske		--yesno "$prompt" $height $width
82f0c98fdeSDevin Teske	then
83f0c98fdeSDevin Teske		exec $0
84f0c98fdeSDevin Teske		# NOTREACHED
85f0c98fdeSDevin Teske	fi
86f0c98fdeSDevin Teske	exit 1
87f0c98fdeSDevin Teske}
88f0c98fdeSDevin Teske
897059fa6fSAllan Jude# dialog_workaround
907059fa6fSAllan Jude#
917059fa6fSAllan Jude# Ask the user if they wish to apply a workaround
927059fa6fSAllan Jude#
937059fa6fSAllan Judedialog_workaround()
947059fa6fSAllan Jude{
957059fa6fSAllan Jude	local passed_msg="$1"
967059fa6fSAllan Jude	local title="$DIALOG_TITLE"
977059fa6fSAllan Jude	local btitle="$DIALOG_BACKTITLE"
987059fa6fSAllan Jude	local prompt # Calculated below
997059fa6fSAllan Jude	local hline="$hline_arrows_tab_enter"
1007059fa6fSAllan Jude
1017059fa6fSAllan Jude	local height=8 width=50 prefix="   "
1027059fa6fSAllan Jude	local plen=${#prefix} list= line=
1037059fa6fSAllan Jude	local max_width=$(( $width - 3 - $plen ))
1047059fa6fSAllan Jude
1057059fa6fSAllan Jude	local yes no defaultno extra_args format
1067059fa6fSAllan Jude	if [ "$USE_XDIALOG" ]; then
1077059fa6fSAllan Jude		yes=ok no=cancel defaultno=default-no
1087059fa6fSAllan Jude		extra_args="--wrap --left"
1097059fa6fSAllan Jude		format="$passed_msg"
1107059fa6fSAllan Jude	else
1117059fa6fSAllan Jude		yes=yes no=no defaultno=defaultno
1127059fa6fSAllan Jude		extra_args="--cr-wrap"
1137059fa6fSAllan Jude		format="$passed_msg"
1147059fa6fSAllan Jude	fi
1157059fa6fSAllan Jude
1167059fa6fSAllan Jude	# Add height for Xdialog(1)
1177059fa6fSAllan Jude	[ "$USE_XDIALOG" ] && height=$(( $height + $height / 5 + 3 ))
1187059fa6fSAllan Jude
1197059fa6fSAllan Jude	prompt=$( printf "$format" )
1207059fa6fSAllan Jude	f_dprintf "%s: Workaround prompt" "$0"
1217059fa6fSAllan Jude	$DIALOG \
1227059fa6fSAllan Jude		--title "$title"        \
1237059fa6fSAllan Jude		--backtitle "$btitle"   \
1247059fa6fSAllan Jude		--hline "$hline"        \
1257059fa6fSAllan Jude		--$yes-label "$msg_yes" \
1267059fa6fSAllan Jude		--$no-label "$msg_no"   \
1277059fa6fSAllan Jude		$extra_args             \
1287059fa6fSAllan Jude		--yesno "$prompt" $height $width
1297059fa6fSAllan Jude}
1307059fa6fSAllan Jude
131bc4a673fSDevin Teske############################################################ MAIN
132bc4a673fSDevin Teske
133bc4a673fSDevin Teskef_dprintf "Began Installation at %s" "$( date )"
1342118f387SNathan Whitehorn
1352118f387SNathan Whitehornrm -rf $BSDINSTALL_TMPETC
1362118f387SNathan Whitehornmkdir $BSDINSTALL_TMPETC
1372118f387SNathan Whitehorn
1382118f387SNathan Whitehorntrap true SIGINT	# This section is optional
1392118f387SNathan Whitehornbsdinstall keymap
1402118f387SNathan Whitehorn
1412118f387SNathan Whitehorntrap error SIGINT	# Catch cntrl-C here
1427041a67eSAndrew Thompsonbsdinstall hostname || error "Set hostname failed"
1432118f387SNathan Whitehorn
144b70047d4SNathan Whitehornexport DISTRIBUTIONS="base.txz kernel.txz"
145b70047d4SNathan Whitehornif [ -f $BSDINSTALL_DISTDIR/MANIFEST ]; then
14688343186SGlen Barber	DISTMENU=`awk -F'\t' '!/^(kernel\.txz|base\.txz)/{print $1,$5,$6}' $BSDINSTALL_DISTDIR/MANIFEST`
14788343186SGlen Barber	DISTMENU="$(echo ${DISTMENU} | sed -E 's/\.txz//g')"
148addc19a4SNathan Whitehorn
149addc19a4SNathan Whitehorn	exec 3>&1
1504ca6fb65SDevin Teske	EXTRA_DISTS=$( eval dialog \
1514ca6fb65SDevin Teske	    --backtitle \"FreeBSD Installer\" \
1524ca6fb65SDevin Teske	    --title \"Distribution Select\" --nocancel --separate-output \
1534ca6fb65SDevin Teske	    --checklist \"Choose optional system components to install:\" \
1544ca6fb65SDevin Teske	    0 0 0 $DISTMENU \
155addc19a4SNathan Whitehorn	2>&1 1>&3 )
156addc19a4SNathan Whitehorn	for dist in $EXTRA_DISTS; do
157addc19a4SNathan Whitehorn		export DISTRIBUTIONS="$DISTRIBUTIONS $dist.txz"
158addc19a4SNathan Whitehorn	done
159b70047d4SNathan Whitehornfi
160addc19a4SNathan Whitehorn
16188343186SGlen BarberLOCAL_DISTRIBUTIONS="MANIFEST"
1622118f387SNathan WhitehornFETCH_DISTRIBUTIONS=""
1632118f387SNathan Whitehornfor dist in $DISTRIBUTIONS; do
1642118f387SNathan Whitehorn	if [ ! -f $BSDINSTALL_DISTDIR/$dist ]; then
1652118f387SNathan Whitehorn		FETCH_DISTRIBUTIONS="$FETCH_DISTRIBUTIONS $dist"
16688343186SGlen Barber	else
16788343186SGlen Barber		LOCAL_DISTRIBUTIONS="$LOCAL_DISTRIBUTIONS $dist"
1682118f387SNathan Whitehorn	fi
1692118f387SNathan Whitehorndone
17088343186SGlen BarberLOCAL_DISTRIBUTIONS=`echo $LOCAL_DISTRIBUTIONS`	# Trim white space
1716dcef0cfSNathan WhitehornFETCH_DISTRIBUTIONS=`echo $FETCH_DISTRIBUTIONS`	# Trim white space
1722118f387SNathan Whitehorn
1736dcef0cfSNathan Whitehornif [ -n "$FETCH_DISTRIBUTIONS" -a -n "$BSDINSTALL_CONFIGCURRENT" ]; then
17488343186SGlen Barber	dialog --backtitle "FreeBSD Installer" --title "Network Installation" --msgbox "Some installation files were not found on the boot volume. The next few screens will allow you to configure networking so that they can be downloaded from the Internet." 0 0
1752118f387SNathan Whitehorn	bsdinstall netconfig || error
1762118f387SNathan Whitehorn	NETCONFIG_DONE=yes
1772118f387SNathan Whitehornfi
1782118f387SNathan Whitehorn
1795a038452SNathan Whitehornif [ -n "$FETCH_DISTRIBUTIONS" ]; then
1806dcef0cfSNathan Whitehorn	exec 3>&1
18126976226SNathan Whitehorn	BSDINSTALL_DISTSITE=$(`dirname $0`/mirrorselect 2>&1 1>&3)
1826dcef0cfSNathan Whitehorn	MIRROR_BUTTON=$?
1836dcef0cfSNathan Whitehorn	exec 3>&-
1847041a67eSAndrew Thompson	test $MIRROR_BUTTON -eq 0 || error "No mirror selected"
1856dcef0cfSNathan Whitehorn	export BSDINSTALL_DISTSITE
1866dcef0cfSNathan Whitehornfi
1876dcef0cfSNathan Whitehorn
1882d5cf580SDevin Teskerm -f $PATH_FSTAB
1892118f387SNathan Whitehorntouch $PATH_FSTAB
1902118f387SNathan Whitehorn
1917059fa6fSAllan Jude#
1927059fa6fSAllan Jude# Try to detect known broken platforms and apply their workarounds
1937059fa6fSAllan Jude#
1947059fa6fSAllan Jude
1957059fa6fSAllan Judeif f_interactive; then
1967059fa6fSAllan Jude	sys_maker=$( kenv -q smbios.system.maker )
1977059fa6fSAllan Jude	f_dprintf "smbios.system.maker=[%s]" "$sys_maker"
1987059fa6fSAllan Jude	sys_model=$( kenv -q smbios.system.product )
1997059fa6fSAllan Jude	f_dprintf "smbios.system.product=[%s]" "$sys_model"
2007059fa6fSAllan Jude	sys_version=$( kenv -q smbios.system.version )
2017059fa6fSAllan Jude	f_dprintf "smbios.system.version=[%s]" "$sys_version"
202a7d5d8d9SAllan Jude	sys_mb_maker=$( kenv -q smbios.planar.maker )
203a7d5d8d9SAllan Jude	f_dprintf "smbios.planar.maker=[%s]" "$sys_mb_maker"
204a7d5d8d9SAllan Jude	sys_mb_product=$( kenv -q smbios.planar.product )
205a7d5d8d9SAllan Jude	f_dprintf "smbios.planar.product=[%s]" "$sys_mb_product"
206a7d5d8d9SAllan Jude
207a7d5d8d9SAllan Jude	#
208a7d5d8d9SAllan Jude	# Laptop Models
209a7d5d8d9SAllan Jude	#
2107059fa6fSAllan Jude	case "$sys_maker" in
2117059fa6fSAllan Jude	"LENOVO")
2127059fa6fSAllan Jude		case "$sys_version" in
213229c92e7SAllan Jude		"ThinkPad X220"|"ThinkPad T420"|"ThinkPad T520"|"ThinkPad W520"|"ThinkPad X1")
2147059fa6fSAllan Jude			dialog_workaround "$msg_lenovo_fix"
2157059fa6fSAllan Jude			retval=$?
2167059fa6fSAllan Jude			f_dprintf "lenovofix_prompt=[%s]" "$retval"
2177059fa6fSAllan Jude			if [ $retval -eq $DIALOG_OK ]; then
2187059fa6fSAllan Jude				export ZFSBOOT_PARTITION_SCHEME="GPT + Lenovo Fix"
2197059fa6fSAllan Jude				export WORKAROUND_LENOVO=1
2207059fa6fSAllan Jude			fi
2217059fa6fSAllan Jude			;;
2227059fa6fSAllan Jude		esac
2237059fa6fSAllan Jude		;;
2247059fa6fSAllan Jude	"Dell Inc.")
2257059fa6fSAllan Jude		case "$sys_model" in
226e3026446SAllan Jude		"Latitude E6330"|"Latitude E7440"|"Latitude E7240"|"Precision Tower 5810")
227a7d5d8d9SAllan Jude			dialog_workaround "$msg_gpt_active_fix"
228a7d5d8d9SAllan Jude			retval=$?
229a7d5d8d9SAllan Jude			f_dprintf "gpt_active_fix_prompt=[%s]" "$retval"
230a7d5d8d9SAllan Jude			if [ $retval -eq $DIALOG_OK ]; then
231a7d5d8d9SAllan Jude				export ZFSBOOT_PARTITION_SCHEME="GPT + Active"
232a7d5d8d9SAllan Jude				export WORKAROUND_GPTACTIVE=1
233a7d5d8d9SAllan Jude			fi
234a7d5d8d9SAllan Jude			;;
235a7d5d8d9SAllan Jude		esac
236a7d5d8d9SAllan Jude		;;
2374c95e76aSAllan Jude	"Hewlett-Packard")
2384c95e76aSAllan Jude		case "$sys_model" in
2394c95e76aSAllan Jude		"HP ProBook 4330s")
2404c95e76aSAllan Jude			dialog_workaround "$msg_gpt_active_fix"
2414c95e76aSAllan Jude			retval=$?
2424c95e76aSAllan Jude			f_dprintf "gpt_active_fix_prompt=[%s]" "$retval"
2434c95e76aSAllan Jude			if [ $retval -eq $DIALOG_OK ]; then
2444c95e76aSAllan Jude				export ZFSBOOT_PARTITION_SCHEME="GPT + Active"
2454c95e76aSAllan Jude				export WORKAROUND_GPTACTIVE=1
2464c95e76aSAllan Jude			fi
2474c95e76aSAllan Jude			;;
2484c95e76aSAllan Jude		esac
2494c95e76aSAllan Jude		;;
250a7d5d8d9SAllan Jude	esac
251a7d5d8d9SAllan Jude	#
252a7d5d8d9SAllan Jude	# Motherboard Models
253a7d5d8d9SAllan Jude	#
254a7d5d8d9SAllan Jude	case "$sys_mb_maker" in
255a7d5d8d9SAllan Jude	"Intel Corporation")
256a7d5d8d9SAllan Jude		case "$sys_mb_product" in
2574c95e76aSAllan Jude		"DP965LT"|"D510MO")
2584c95e76aSAllan Jude			dialog_workaround "$msg_gpt_active_fix"
2594c95e76aSAllan Jude			retval=$?
2604c95e76aSAllan Jude			f_dprintf "gpt_active_fix_prompt=[%s]" "$retval"
2614c95e76aSAllan Jude			if [ $retval -eq $DIALOG_OK ]; then
2624c95e76aSAllan Jude				export ZFSBOOT_PARTITION_SCHEME="GPT + Active"
2634c95e76aSAllan Jude				export WORKAROUND_GPTACTIVE=1
2644c95e76aSAllan Jude			fi
2654c95e76aSAllan Jude			;;
2664c95e76aSAllan Jude		esac
2674c95e76aSAllan Jude		;;
2684c95e76aSAllan Jude	"Acer")
2694c95e76aSAllan Jude		case "$sys_mb_product" in
2704c95e76aSAllan Jude		"Veriton M6630G")
2717059fa6fSAllan Jude			dialog_workaround "$msg_gpt_active_fix"
2727059fa6fSAllan Jude			retval=$?
2737059fa6fSAllan Jude			f_dprintf "gpt_active_fix_prompt=[%s]" "$retval"
2747059fa6fSAllan Jude			if [ $retval -eq $DIALOG_OK ]; then
2757059fa6fSAllan Jude				export ZFSBOOT_PARTITION_SCHEME="GPT + Active"
2767059fa6fSAllan Jude				export WORKAROUND_GPTACTIVE=1
2777059fa6fSAllan Jude			fi
2787059fa6fSAllan Jude			;;
2797059fa6fSAllan Jude		esac
2807059fa6fSAllan Jude		;;
2817059fa6fSAllan Jude	esac
2827059fa6fSAllan Judefi
2837059fa6fSAllan Jude
284cd88b886SDevin TeskePMODES="\
2857c1db228SNathan Whitehorn\"Auto (UFS)\" \"Guided Disk Setup\" \
2867c1db228SNathan WhitehornManual \"Manual Disk Setup (experts)\" \
287cd88b886SDevin TeskeShell \"Open a shell and partition by hand\""
2882118f387SNathan Whitehorn
289cd88b886SDevin TeskeCURARCH=$( uname -m )
290cd88b886SDevin Teskecase $CURARCH in
2913735bba3SAllan Jude	amd64|arm64|i386)	# Booting ZFS Supported
292*d512033eSBen Woods		PMODES="\"Auto (ZFS)\" \"Guided Root-on-ZFS\" $PMODES"
293cd88b886SDevin Teske		;;
294cd88b886SDevin Teske	*)		# Booting ZFS Unspported
295cd88b886SDevin Teske		;;
296cd88b886SDevin Teskeesac
297cd88b886SDevin Teske
298cd88b886SDevin Teskeexec 3>&1
299cd88b886SDevin TeskePARTMODE=`echo $PMODES | xargs dialog --backtitle "FreeBSD Installer" \
300cd88b886SDevin Teske	--title "Partitioning" \
301cd88b886SDevin Teske	--menu "How would you like to partition your disk?" \
30231a0cf13SDevin Teske	0 0 0 2>&1 1>&3` || exit 1
303cd88b886SDevin Teskeexec 3>&-
304cd88b886SDevin Teske
305cd88b886SDevin Teskecase "$PARTMODE" in
306*d512033eSBen Woods"Auto (ZFS)")	# ZFS
307*d512033eSBen Woods	bsdinstall zfsboot || error "ZFS setup failed"
308*d512033eSBen Woods	bsdinstall mount || error "Failed to mount filesystem"
309*d512033eSBen Woods	;;
3107c1db228SNathan Whitehorn"Auto (UFS)")	# Guided
3117041a67eSAndrew Thompson	bsdinstall autopart || error "Partitioning error"
3127041a67eSAndrew Thompson	bsdinstall mount || error "Failed to mount filesystem"
3132118f387SNathan Whitehorn	;;
314cd88b886SDevin Teske"Shell")	# Shell
3152118f387SNathan Whitehorn	clear
3162118f387SNathan Whitehorn	echo "Use this shell to set up partitions for the new system. When finished, mount the system at $BSDINSTALL_CHROOT and place an fstab file for the new system at $PATH_FSTAB. Then type 'exit'. You can also enter the partition editor at any time by entering 'bsdinstall partedit'."
317809685bcSNathan Whitehorn	sh 2>&1
3182118f387SNathan Whitehorn	;;
319cd88b886SDevin Teske"Manual")	# Manual
320bc4a673fSDevin Teske	if f_isset debugFile; then
321bc4a673fSDevin Teske		# Give partedit the path to our logfile so it can append
3227041a67eSAndrew Thompson		BSDINSTALL_LOG="${debugFile#+}" bsdinstall partedit || error "Partitioning error"
323bc4a673fSDevin Teske	else
3247041a67eSAndrew Thompson		bsdinstall partedit || error "Partitioning error"
325bc4a673fSDevin Teske	fi
3267041a67eSAndrew Thompson	bsdinstall mount || error "Failed to mount filesystem"
3272118f387SNathan Whitehorn	;;
3282118f387SNathan Whitehorn*)
3297041a67eSAndrew Thompson	error "Unknown partitioning mode"
3302118f387SNathan Whitehorn	;;
3312118f387SNathan Whitehornesac
3322118f387SNathan Whitehorn
3332118f387SNathan Whitehornif [ ! -z "$FETCH_DISTRIBUTIONS" ]; then
3342118f387SNathan Whitehorn	ALL_DISTRIBUTIONS="$DISTRIBUTIONS"
33588343186SGlen Barber	WANT_DEBUG=
3362118f387SNathan Whitehorn
3372118f387SNathan Whitehorn	# Download to a directory in the new system as scratch space
33884b58c13SNathan Whitehorn	BSDINSTALL_FETCHDEST="$BSDINSTALL_CHROOT/usr/freebsd-dist"
3397041a67eSAndrew Thompson	mkdir -p "$BSDINSTALL_FETCHDEST" || error "Could not create directory $BSDINSTALL_FETCHDEST"
3402118f387SNathan Whitehorn
3412118f387SNathan Whitehorn	export DISTRIBUTIONS="$FETCH_DISTRIBUTIONS"
3422118f387SNathan Whitehorn	# Try to use any existing distfiles
3435a038452SNathan Whitehorn	if [ -d $BSDINSTALL_DISTDIR ]; then
3446dcef0cfSNathan Whitehorn		DISTDIR_IS_UNIONFS=1
345bfc3bab8SNathan Whitehorn		mount_nullfs -o union "$BSDINSTALL_FETCHDEST" "$BSDINSTALL_DISTDIR"
3466d02d4cbSNathan Whitehorn	else
34788343186SGlen Barber		export DISTRIBUTIONS="$FETCH_DISTRIBUTIONS"
3482118f387SNathan Whitehorn		export BSDINSTALL_DISTDIR="$BSDINSTALL_FETCHDEST"
3492118f387SNathan Whitehorn	fi
3502118f387SNathan Whitehorn
3516d02d4cbSNathan Whitehorn	export FTP_PASSIVE_MODE=YES
35288343186SGlen Barber	# Iterate through the distribution list and set a flag if debugging
35388343186SGlen Barber	# distributions have been selected.
35488343186SGlen Barber	for _DISTRIBUTION in $DISTRIBUTIONS; do
35588343186SGlen Barber		case $_DISTRIBUTION in
35688343186SGlen Barber			*-dbg.*)
35788343186SGlen Barber				[ -e $BSDINSTALL_DISTDIR/$_DISTRIBUTION ] \
35888343186SGlen Barber					&& continue
35988343186SGlen Barber				WANT_DEBUG=1
36088343186SGlen Barber				DEBUG_LIST="\n$DEBUG_LIST\n$_DISTRIBUTION"
36188343186SGlen Barber				;;
36288343186SGlen Barber			*)
36388343186SGlen Barber				;;
36488343186SGlen Barber		esac
36588343186SGlen Barber	done
36688343186SGlen Barber
36788343186SGlen Barber	# Fetch the distributions.
36888343186SGlen Barber	bsdinstall distfetch
36988343186SGlen Barber	rc=$?
37088343186SGlen Barber
37188343186SGlen Barber	if [ $rc -ne 0 ]; then
37288343186SGlen Barber		# If unable to fetch the remote distributions, recommend
37388343186SGlen Barber		# deselecting the debugging distributions, and retrying the
37488343186SGlen Barber		# installation, since failure to fetch *-dbg.txz should not
37588343186SGlen Barber		# be considered a fatal installation error.
37688343186SGlen Barber		msg="Failed to fetch remote distribution"
37788343186SGlen Barber		if [ ! -z "$WANT_DEBUG" ]; then
37888343186SGlen Barber			# Trim leading and trailing newlines.
37988343186SGlen Barber			DEBUG_LIST="${DEBUG_LIST%%\n}"
38088343186SGlen Barber			DEBUG_LIST="${DEBUG_LIST##\n}"
38188343186SGlen Barber			msg="$msg\n\nPlease deselect the following distributions"
38288343186SGlen Barber			msg="$msg and retry the installation:"
38388343186SGlen Barber			msg="$msg\n$DEBUG_LIST"
38488343186SGlen Barber		fi
38588343186SGlen Barber		error "$msg"
38688343186SGlen Barber	fi
3872118f387SNathan Whitehorn	export DISTRIBUTIONS="$ALL_DISTRIBUTIONS"
3882118f387SNathan Whitehornfi
3892118f387SNathan Whitehorn
39088343186SGlen Barberif [ ! -z "$LOCAL_DISTRIBUTIONS" ]; then
39188343186SGlen Barber	# Download to a directory in the new system as scratch space
39288343186SGlen Barber	BSDINSTALL_FETCHDEST="$BSDINSTALL_CHROOT/usr/freebsd-dist"
39388343186SGlen Barber	mkdir -p "$BSDINSTALL_FETCHDEST" || error "Could not create directory $BSDINSTALL_FETCHDEST"
39488343186SGlen Barber	# Try to use any existing distfiles
39588343186SGlen Barber	if [ -d $BSDINSTALL_DISTDIR ]; then
39688343186SGlen Barber		DISTDIR_IS_UNIONFS=1
39788343186SGlen Barber		mount_nullfs -o union "$BSDINSTALL_FETCHDEST" "$BSDINSTALL_DISTDIR"
39888343186SGlen Barber		export BSDINSTALL_DISTDIR="$BSDINSTALL_FETCHDEST"
39988343186SGlen Barber	fi
40088343186SGlen Barber	env DISTRIBUTIONS="$LOCAL_DISTRIBUTIONS" \
40188343186SGlen Barber		BSDINSTALL_DISTSITE="file:///usr/freebsd-dist" \
40288343186SGlen Barber		bsdinstall distfetch || \
40388343186SGlen Barber		error "Failed to fetch distribution from local media"
40488343186SGlen Barberfi
40588343186SGlen Barber
4067041a67eSAndrew Thompsonbsdinstall checksum || error "Distribution checksum failed"
4077041a67eSAndrew Thompsonbsdinstall distextract || error "Distribution extract failed"
4088befcf7bSNathan Whitehorn
4098befcf7bSNathan Whitehorn# Set up boot loader
4108befcf7bSNathan Whitehornbsdinstall bootconfig || error "Failed to configure bootloader"
4118befcf7bSNathan Whitehorn
4127041a67eSAndrew Thompsonbsdinstall rootpass || error "Could not set root password"
4132118f387SNathan Whitehorn
4142118f387SNathan Whitehorntrap true SIGINT	# This section is optional
4152118f387SNathan Whitehornif [ "$NETCONFIG_DONE" != yes ]; then
4162118f387SNathan Whitehorn	bsdinstall netconfig	# Don't check for errors -- the user may cancel
4172118f387SNathan Whitehornfi
4182118f387SNathan Whitehornbsdinstall time
4192118f387SNathan Whitehornbsdinstall services
4200e3f233fSBartek Rutkowskibsdinstall hardening
4212118f387SNathan Whitehorn
4222118f387SNathan Whitehorndialog --backtitle "FreeBSD Installer" --title "Add User Accounts" --yesno \
4232118f387SNathan Whitehorn    "Would you like to add users to the installed system now?" 0 0 && \
4242118f387SNathan Whitehorn    bsdinstall adduser
4252118f387SNathan Whitehorn
4262118f387SNathan Whitehornfinalconfig() {
4272118f387SNathan Whitehorn	exec 3>&1
4282118f387SNathan Whitehorn	REVISIT=$(dialog --backtitle "FreeBSD Installer" \
4292118f387SNathan Whitehorn	    --title "Final Configuration" --no-cancel --menu \
4306081c922SNathan Whitehorn	    "Setup of your FreeBSD system is nearly complete. You can now modify your configuration choices. After this screen, you will have an opportunity to make more complex changes using a shell." 0 0 0 \
43122a84ec9SKen Smith		"Exit" "Apply configuration and exit installer" \
4322118f387SNathan Whitehorn		"Add User" "Add a user to the system" \
4332118f387SNathan Whitehorn		"Root Password" "Change root password" \
4342118f387SNathan Whitehorn		"Hostname" "Set system hostname" \
4352118f387SNathan Whitehorn		"Network" "Networking configuration" \
4362118f387SNathan Whitehorn		"Services" "Set daemons to run on startup" \
4370e3f233fSBartek Rutkowski		"System Hardening" "Set security options" \
4382118f387SNathan Whitehorn		"Time Zone" "Set system timezone" \
4396081c922SNathan Whitehorn		"Handbook" "Install FreeBSD Handbook (requires network)" 2>&1 1>&3)
4402118f387SNathan Whitehorn	exec 3>&-
4412118f387SNathan Whitehorn
4422118f387SNathan Whitehorn	case "$REVISIT" in
4432118f387SNathan Whitehorn	"Add User")
4442118f387SNathan Whitehorn		bsdinstall adduser
4452118f387SNathan Whitehorn		finalconfig
4462118f387SNathan Whitehorn		;;
4472118f387SNathan Whitehorn	"Root Password")
4482118f387SNathan Whitehorn		bsdinstall rootpass
4492118f387SNathan Whitehorn		finalconfig
4502118f387SNathan Whitehorn		;;
4512118f387SNathan Whitehorn	"Hostname")
4522118f387SNathan Whitehorn		bsdinstall hostname
4532118f387SNathan Whitehorn		finalconfig
4542118f387SNathan Whitehorn		;;
4552118f387SNathan Whitehorn	"Network")
4562118f387SNathan Whitehorn		bsdinstall netconfig
4572118f387SNathan Whitehorn		finalconfig
4582118f387SNathan Whitehorn		;;
4592118f387SNathan Whitehorn	"Services")
4602118f387SNathan Whitehorn		bsdinstall services
4612118f387SNathan Whitehorn		finalconfig
4622118f387SNathan Whitehorn		;;
4630e3f233fSBartek Rutkowski	"System Hardening")
4640e3f233fSBartek Rutkowski		bsdinstall hardening
4650e3f233fSBartek Rutkowski		finalconfig
4660e3f233fSBartek Rutkowski		;;
4672118f387SNathan Whitehorn	"Time Zone")
4682118f387SNathan Whitehorn		bsdinstall time
4692118f387SNathan Whitehorn		finalconfig
4702118f387SNathan Whitehorn		;;
471bfc3bab8SNathan Whitehorn	"Handbook")
472bfc3bab8SNathan Whitehorn		bsdinstall docsinstall
473bfc3bab8SNathan Whitehorn		finalconfig
474bfc3bab8SNathan Whitehorn		;;
4752118f387SNathan Whitehorn	esac
4762118f387SNathan Whitehorn}
4772118f387SNathan Whitehorn
4782118f387SNathan Whitehorn# Allow user to change his mind
4792118f387SNathan Whitehornfinalconfig
4802118f387SNathan Whitehorn
4812118f387SNathan Whitehorntrap error SIGINT	# SIGINT is bad again
4827041a67eSAndrew Thompsonbsdinstall config  || error "Failed to save config"
4832118f387SNathan Whitehorn
484371ce0ebSRenato Botelhoif [ -n "$DISTDIR_IS_UNIONFS" ]; then
485371ce0ebSRenato Botelho	umount -f $BSDINSTALL_DISTDIR
486371ce0ebSRenato Botelhofi
487371ce0ebSRenato Botelho
4882118f387SNathan Whitehornif [ ! -z "$BSDINSTALL_FETCHDEST" ]; then
4892118f387SNathan Whitehorn	rm -rf "$BSDINSTALL_FETCHDEST"
4902118f387SNathan Whitehornfi
4912118f387SNathan Whitehorn
4926081c922SNathan Whitehorndialog --backtitle "FreeBSD Installer" --title "Manual Configuration" \
49344a25dd6SNathan Whitehorn    --default-button no --yesno \
49444a25dd6SNathan Whitehorn   "The installation is now finished. Before exiting the installer, would you like to open a shell in the new system to make any final manual modifications?" 0 0
4956081c922SNathan Whitehornif [ $? -eq 0 ]; then
4966081c922SNathan Whitehorn	clear
4976081c922SNathan Whitehorn	echo This shell is operating in a chroot in the new system. \
4986081c922SNathan Whitehorn	    When finished making configuration changes, type \"exit\".
4996081c922SNathan Whitehorn	chroot "$BSDINSTALL_CHROOT" /bin/sh 2>&1
5006081c922SNathan Whitehornfi
5016081c922SNathan Whitehorn
502dfc23ba5SDag-Erling Smørgravbsdinstall entropy
503dfc23ba5SDag-Erling Smørgravbsdinstall umount
504dfc23ba5SDag-Erling Smørgrav
505bc4a673fSDevin Teskef_dprintf "Installation Completed at %s" "$( date )"
5062118f387SNathan Whitehorn
507bc4a673fSDevin Teske################################################################################
508bc4a673fSDevin Teske# END
509bc4a673fSDevin Teske################################################################################
510