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"
44595373ddSBen Woodsmsg_an_installation_step_has_been_aborted="An installation step has been aborted. Would you like\nto restart the installation or exit the installer?"
45595373ddSBen Woodsmsg_auto_ufs="Auto (UFS)"
46595373ddSBen Woodsmsg_auto_ufs_desc="Guided UFS Disk Setup"
47595373ddSBen Woodsmsg_auto_ufs_help="Menu options help choose which disk to setup using UFS and standard partitions"
48595373ddSBen Woodsmsg_auto_zfs="Auto (ZFS)"
49595373ddSBen Woodsmsg_auto_zfs_desc="Guided Root-on-ZFS"
50595373ddSBen Woodsmsg_auto_zfs_help="To use ZFS with less than 8GB RAM, see https://wiki.freebsd.org/ZFSTuningGuide"
51f0c98fdeSDevin Teskemsg_exit="Exit"
52f0c98fdeSDevin Teskemsg_freebsd_installer="FreeBSD Installer"
53a7d5d8d9SAllan 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?"
547059fa6fSAllan 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?"
55595373ddSBen Woodsmsg_manual="Manual"
56595373ddSBen Woodsmsg_manual_desc="Manual Disk Setup (experts)"
57595373ddSBen Woodsmsg_manual_help="Create customized partitions from menu options"
587059fa6fSAllan Judemsg_no="NO"
59f0c98fdeSDevin Teskemsg_restart="Restart"
60595373ddSBen Woodsmsg_shell="Shell"
61595373ddSBen Woodsmsg_shell_desc="Open a shell and partition by hand"
62595373ddSBen Woodsmsg_shell_help="Create customized partitions using command-line utilities"
637059fa6fSAllan Judemsg_yes="YES"
647059fa6fSAllan Jude
65f0c98fdeSDevin Teske############################################################ FUNCTIONS
66f0c98fdeSDevin Teske
67f0c98fdeSDevin Teske# error [$msg]
68f0c98fdeSDevin Teske#
69f0c98fdeSDevin Teske# Display generic error message when a script fails. An optional message
70f0c98fdeSDevin Teske# argument can preceed the generic message. User is given the choice of
71f0c98fdeSDevin Teske# restarting the installer or exiting.
72f0c98fdeSDevin Teske#
73f0c98fdeSDevin Teskeerror()
74f0c98fdeSDevin Teske{
75f0c98fdeSDevin Teske	local title="$msg_abort"
76f0c98fdeSDevin Teske	local btitle="$msg_freebsd_installer"
77f0c98fdeSDevin Teske	local prompt="${1:+$1\n\n}$msg_an_installation_step_has_been_aborted"
78f0c98fdeSDevin Teske	local hline="$hline_arrows_tab_space_enter"
79f0c98fdeSDevin Teske
80f0c98fdeSDevin Teske	[ -f "$PATH_FSTAB" ] && bsdinstall umount
81f0c98fdeSDevin Teske
82f0c98fdeSDevin Teske	local height width
83f0c98fdeSDevin Teske	f_dialog_buttonbox_size height width \
84f0c98fdeSDevin Teske		"$title" "$btitle" "$prompt" "$hline"
85f0c98fdeSDevin Teske
86f0c98fdeSDevin Teske	if $DIALOG \
87f0c98fdeSDevin Teske		--title "$title"           \
88f0c98fdeSDevin Teske		--backtitle "$btitle"      \
89f0c98fdeSDevin Teske		--hline "$hline"           \
90f0c98fdeSDevin Teske		--no-label "$msg_exit"     \
91f0c98fdeSDevin Teske		--yes-label "$msg_restart" \
92f0c98fdeSDevin Teske		--yesno "$prompt" $height $width
93f0c98fdeSDevin Teske	then
94f0c98fdeSDevin Teske		exec $0
95f0c98fdeSDevin Teske		# NOTREACHED
96f0c98fdeSDevin Teske	fi
97f0c98fdeSDevin Teske	exit 1
98f0c98fdeSDevin Teske}
99f0c98fdeSDevin Teske
1007059fa6fSAllan Jude# dialog_workaround
1017059fa6fSAllan Jude#
1027059fa6fSAllan Jude# Ask the user if they wish to apply a workaround
1037059fa6fSAllan Jude#
1047059fa6fSAllan Judedialog_workaround()
1057059fa6fSAllan Jude{
1067059fa6fSAllan Jude	local passed_msg="$1"
1077059fa6fSAllan Jude	local title="$DIALOG_TITLE"
1087059fa6fSAllan Jude	local btitle="$DIALOG_BACKTITLE"
1097059fa6fSAllan Jude	local prompt # Calculated below
1107059fa6fSAllan Jude	local hline="$hline_arrows_tab_enter"
1117059fa6fSAllan Jude
1127059fa6fSAllan Jude	local height=8 width=50 prefix="   "
1137059fa6fSAllan Jude	local plen=${#prefix} list= line=
1147059fa6fSAllan Jude	local max_width=$(( $width - 3 - $plen ))
1157059fa6fSAllan Jude
1167059fa6fSAllan Jude	local yes no defaultno extra_args format
1177059fa6fSAllan Jude	if [ "$USE_XDIALOG" ]; then
1187059fa6fSAllan Jude		yes=ok no=cancel defaultno=default-no
1197059fa6fSAllan Jude		extra_args="--wrap --left"
1207059fa6fSAllan Jude		format="$passed_msg"
1217059fa6fSAllan Jude	else
1227059fa6fSAllan Jude		yes=yes no=no defaultno=defaultno
1237059fa6fSAllan Jude		extra_args="--cr-wrap"
1247059fa6fSAllan Jude		format="$passed_msg"
1257059fa6fSAllan Jude	fi
1267059fa6fSAllan Jude
1277059fa6fSAllan Jude	# Add height for Xdialog(1)
1287059fa6fSAllan Jude	[ "$USE_XDIALOG" ] && height=$(( $height + $height / 5 + 3 ))
1297059fa6fSAllan Jude
1307059fa6fSAllan Jude	prompt=$( printf "$format" )
1317059fa6fSAllan Jude	f_dprintf "%s: Workaround prompt" "$0"
1327059fa6fSAllan Jude	$DIALOG \
1337059fa6fSAllan Jude		--title "$title"        \
1347059fa6fSAllan Jude		--backtitle "$btitle"   \
1357059fa6fSAllan Jude		--hline "$hline"        \
1367059fa6fSAllan Jude		--$yes-label "$msg_yes" \
1377059fa6fSAllan Jude		--$no-label "$msg_no"   \
1387059fa6fSAllan Jude		$extra_args             \
1397059fa6fSAllan Jude		--yesno "$prompt" $height $width
1407059fa6fSAllan Jude}
1417059fa6fSAllan Jude
142bc4a673fSDevin Teske############################################################ MAIN
143bc4a673fSDevin Teske
144bc4a673fSDevin Teskef_dprintf "Began Installation at %s" "$( date )"
1452118f387SNathan Whitehorn
1462118f387SNathan Whitehornrm -rf $BSDINSTALL_TMPETC
1472118f387SNathan Whitehornmkdir $BSDINSTALL_TMPETC
1482118f387SNathan Whitehorn
1492118f387SNathan Whitehorntrap true SIGINT	# This section is optional
1502118f387SNathan Whitehornbsdinstall keymap
1512118f387SNathan Whitehorn
1522118f387SNathan Whitehorntrap error SIGINT	# Catch cntrl-C here
1537041a67eSAndrew Thompsonbsdinstall hostname || error "Set hostname failed"
1542118f387SNathan Whitehorn
155b70047d4SNathan Whitehornexport DISTRIBUTIONS="base.txz kernel.txz"
156b70047d4SNathan Whitehornif [ -f $BSDINSTALL_DISTDIR/MANIFEST ]; then
15788343186SGlen Barber	DISTMENU=`awk -F'\t' '!/^(kernel\.txz|base\.txz)/{print $1,$5,$6}' $BSDINSTALL_DISTDIR/MANIFEST`
15888343186SGlen Barber	DISTMENU="$(echo ${DISTMENU} | sed -E 's/\.txz//g')"
159addc19a4SNathan Whitehorn
160*c3c458ceSRenato Botelho	if [ -n "$DISTMENU" ]; then
161addc19a4SNathan Whitehorn		exec 3>&1
1624ca6fb65SDevin Teske		EXTRA_DISTS=$( eval dialog \
1634ca6fb65SDevin Teske		    --backtitle \"FreeBSD Installer\" \
1644ca6fb65SDevin Teske		    --title \"Distribution Select\" --nocancel --separate-output \
1654ca6fb65SDevin Teske		    --checklist \"Choose optional system components to install:\" \
1664ca6fb65SDevin Teske		    0 0 0 $DISTMENU \
167addc19a4SNathan Whitehorn		2>&1 1>&3 )
168addc19a4SNathan Whitehorn		for dist in $EXTRA_DISTS; do
169addc19a4SNathan Whitehorn			export DISTRIBUTIONS="$DISTRIBUTIONS $dist.txz"
170addc19a4SNathan Whitehorn		done
171b70047d4SNathan Whitehorn	fi
172*c3c458ceSRenato Botelhofi
173addc19a4SNathan Whitehorn
1742118f387SNathan WhitehornFETCH_DISTRIBUTIONS=""
1752118f387SNathan Whitehornfor dist in $DISTRIBUTIONS; do
1762118f387SNathan Whitehorn	if [ ! -f $BSDINSTALL_DISTDIR/$dist ]; then
1772118f387SNathan Whitehorn		FETCH_DISTRIBUTIONS="$FETCH_DISTRIBUTIONS $dist"
1782118f387SNathan Whitehorn	fi
1792118f387SNathan Whitehorndone
1802118f387SNathan Whitehorn
1816dcef0cfSNathan Whitehornif [ -n "$FETCH_DISTRIBUTIONS" -a -n "$BSDINSTALL_CONFIGCURRENT" ]; then
18288343186SGlen 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
1832118f387SNathan Whitehorn	bsdinstall netconfig || error
1842118f387SNathan Whitehorn	NETCONFIG_DONE=yes
1852118f387SNathan Whitehornfi
1862118f387SNathan Whitehorn
1872d5cf580SDevin Teskerm -f $PATH_FSTAB
1882118f387SNathan Whitehorntouch $PATH_FSTAB
1892118f387SNathan Whitehorn
1907059fa6fSAllan Jude#
1917059fa6fSAllan Jude# Try to detect known broken platforms and apply their workarounds
1927059fa6fSAllan Jude#
1937059fa6fSAllan Jude
1947059fa6fSAllan Judeif f_interactive; then
1957059fa6fSAllan Jude	sys_maker=$( kenv -q smbios.system.maker )
1967059fa6fSAllan Jude	f_dprintf "smbios.system.maker=[%s]" "$sys_maker"
1977059fa6fSAllan Jude	sys_model=$( kenv -q smbios.system.product )
1987059fa6fSAllan Jude	f_dprintf "smbios.system.product=[%s]" "$sys_model"
1997059fa6fSAllan Jude	sys_version=$( kenv -q smbios.system.version )
2007059fa6fSAllan Jude	f_dprintf "smbios.system.version=[%s]" "$sys_version"
201a7d5d8d9SAllan Jude	sys_mb_maker=$( kenv -q smbios.planar.maker )
202a7d5d8d9SAllan Jude	f_dprintf "smbios.planar.maker=[%s]" "$sys_mb_maker"
203a7d5d8d9SAllan Jude	sys_mb_product=$( kenv -q smbios.planar.product )
204a7d5d8d9SAllan Jude	f_dprintf "smbios.planar.product=[%s]" "$sys_mb_product"
205a7d5d8d9SAllan Jude
206a7d5d8d9SAllan Jude	#
207a7d5d8d9SAllan Jude	# Laptop Models
208a7d5d8d9SAllan Jude	#
2097059fa6fSAllan Jude	case "$sys_maker" in
2107059fa6fSAllan Jude	"LENOVO")
2117059fa6fSAllan Jude		case "$sys_version" in
212229c92e7SAllan Jude		"ThinkPad X220"|"ThinkPad T420"|"ThinkPad T520"|"ThinkPad W520"|"ThinkPad X1")
2137059fa6fSAllan Jude			dialog_workaround "$msg_lenovo_fix"
2147059fa6fSAllan Jude			retval=$?
2157059fa6fSAllan Jude			f_dprintf "lenovofix_prompt=[%s]" "$retval"
2167059fa6fSAllan Jude			if [ $retval -eq $DIALOG_OK ]; then
2177059fa6fSAllan Jude				export ZFSBOOT_PARTITION_SCHEME="GPT + Lenovo Fix"
2187059fa6fSAllan Jude				export WORKAROUND_LENOVO=1
2197059fa6fSAllan Jude			fi
2207059fa6fSAllan Jude			;;
2217059fa6fSAllan Jude		esac
2227059fa6fSAllan Jude		;;
2237059fa6fSAllan Jude	"Dell Inc.")
2247059fa6fSAllan Jude		case "$sys_model" in
225e3026446SAllan Jude		"Latitude E6330"|"Latitude E7440"|"Latitude E7240"|"Precision Tower 5810")
226a7d5d8d9SAllan Jude			dialog_workaround "$msg_gpt_active_fix"
227a7d5d8d9SAllan Jude			retval=$?
228a7d5d8d9SAllan Jude			f_dprintf "gpt_active_fix_prompt=[%s]" "$retval"
229a7d5d8d9SAllan Jude			if [ $retval -eq $DIALOG_OK ]; then
230a7d5d8d9SAllan Jude				export ZFSBOOT_PARTITION_SCHEME="GPT + Active"
231a7d5d8d9SAllan Jude				export WORKAROUND_GPTACTIVE=1
232a7d5d8d9SAllan Jude			fi
233a7d5d8d9SAllan Jude			;;
234a7d5d8d9SAllan Jude		esac
235a7d5d8d9SAllan Jude		;;
2364c95e76aSAllan Jude	"Hewlett-Packard")
2374c95e76aSAllan Jude		case "$sys_model" in
2384c95e76aSAllan Jude		"HP ProBook 4330s")
2394c95e76aSAllan Jude			dialog_workaround "$msg_gpt_active_fix"
2404c95e76aSAllan Jude			retval=$?
2414c95e76aSAllan Jude			f_dprintf "gpt_active_fix_prompt=[%s]" "$retval"
2424c95e76aSAllan Jude			if [ $retval -eq $DIALOG_OK ]; then
2434c95e76aSAllan Jude				export ZFSBOOT_PARTITION_SCHEME="GPT + Active"
2444c95e76aSAllan Jude				export WORKAROUND_GPTACTIVE=1
2454c95e76aSAllan Jude			fi
2464c95e76aSAllan Jude			;;
2474c95e76aSAllan Jude		esac
2484c95e76aSAllan Jude		;;
249a7d5d8d9SAllan Jude	esac
250a7d5d8d9SAllan Jude	#
251a7d5d8d9SAllan Jude	# Motherboard Models
252a7d5d8d9SAllan Jude	#
253a7d5d8d9SAllan Jude	case "$sys_mb_maker" in
254a7d5d8d9SAllan Jude	"Intel Corporation")
255a7d5d8d9SAllan Jude		case "$sys_mb_product" in
2564c95e76aSAllan Jude		"DP965LT"|"D510MO")
2574c95e76aSAllan Jude			dialog_workaround "$msg_gpt_active_fix"
2584c95e76aSAllan Jude			retval=$?
2594c95e76aSAllan Jude			f_dprintf "gpt_active_fix_prompt=[%s]" "$retval"
2604c95e76aSAllan Jude			if [ $retval -eq $DIALOG_OK ]; then
2614c95e76aSAllan Jude				export ZFSBOOT_PARTITION_SCHEME="GPT + Active"
2624c95e76aSAllan Jude				export WORKAROUND_GPTACTIVE=1
2634c95e76aSAllan Jude			fi
2644c95e76aSAllan Jude			;;
2654c95e76aSAllan Jude		esac
2664c95e76aSAllan Jude		;;
2674c95e76aSAllan Jude	"Acer")
2684c95e76aSAllan Jude		case "$sys_mb_product" in
2694c95e76aSAllan Jude		"Veriton M6630G")
2707059fa6fSAllan Jude			dialog_workaround "$msg_gpt_active_fix"
2717059fa6fSAllan Jude			retval=$?
2727059fa6fSAllan Jude			f_dprintf "gpt_active_fix_prompt=[%s]" "$retval"
2737059fa6fSAllan Jude			if [ $retval -eq $DIALOG_OK ]; then
2747059fa6fSAllan Jude				export ZFSBOOT_PARTITION_SCHEME="GPT + Active"
2757059fa6fSAllan Jude				export WORKAROUND_GPTACTIVE=1
2767059fa6fSAllan Jude			fi
2777059fa6fSAllan Jude			;;
2787059fa6fSAllan Jude		esac
2797059fa6fSAllan Jude		;;
2807059fa6fSAllan Jude	esac
2817059fa6fSAllan Judefi
2827059fa6fSAllan Jude
283595373ddSBen WoodsPMODES="
284595373ddSBen Woods	'$msg_auto_ufs' '$msg_auto_ufs_desc' '$msg_auto_ufs_help'
285595373ddSBen Woods	'$msg_manual' '$msg_manual_desc' '$msg_manual_help'
286595373ddSBen Woods	'$msg_shell' '$msg_shell_desc' '$msg_shell_help'
287595373ddSBen Woods" # END-QUOTE
2882118f387SNathan Whitehorn
289cd88b886SDevin TeskeCURARCH=$( uname -m )
290cd88b886SDevin Teskecase $CURARCH in
291c415d0dfSMitchell Horne	amd64|arm64|i386|riscv)	# Booting ZFS Supported
292595373ddSBen Woods		PMODES="
293595373ddSBen Woods			'$msg_auto_zfs' '$msg_auto_zfs_desc' '$msg_auto_zfs_help'
294595373ddSBen Woods			$PMODES
295595373ddSBen Woods		" # END-QUOTE
296cd88b886SDevin Teske		;;
297595373ddSBen Woods	*)			# Booting ZFS Unsupported
298cd88b886SDevin Teske		;;
299cd88b886SDevin Teskeesac
300cd88b886SDevin Teske
301cd88b886SDevin Teskeexec 3>&1
302cd88b886SDevin TeskePARTMODE=`echo $PMODES | xargs dialog --backtitle "FreeBSD Installer" \
303cd88b886SDevin Teske	--title "Partitioning" \
304595373ddSBen Woods	--item-help \
305cd88b886SDevin Teske	--menu "How would you like to partition your disk?" \
30631a0cf13SDevin Teske	0 0 0 2>&1 1>&3` || exit 1
307cd88b886SDevin Teskeexec 3>&-
308cd88b886SDevin Teske
309cd88b886SDevin Teskecase "$PARTMODE" in
310595373ddSBen Woods"$msg_auto_zfs")	# ZFS
311d512033eSBen Woods	bsdinstall zfsboot || error "ZFS setup failed"
312d512033eSBen Woods	bsdinstall mount || error "Failed to mount filesystem"
313d512033eSBen Woods	;;
314595373ddSBen Woods"$msg_auto_ufs")	# Guided UFS
3157041a67eSAndrew Thompson	bsdinstall autopart || error "Partitioning error"
3167041a67eSAndrew Thompson	bsdinstall mount || error "Failed to mount filesystem"
3172118f387SNathan Whitehorn	;;
318595373ddSBen Woods"$msg_shell")		# Shell
3192118f387SNathan Whitehorn	clear
3202118f387SNathan 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'."
321809685bcSNathan Whitehorn	sh 2>&1
3222118f387SNathan Whitehorn	;;
323595373ddSBen Woods"$msg_manual")		# Manual
324bc4a673fSDevin Teske	if f_isset debugFile; then
325bc4a673fSDevin Teske		# Give partedit the path to our logfile so it can append
3267041a67eSAndrew Thompson		BSDINSTALL_LOG="${debugFile#+}" bsdinstall partedit || error "Partitioning error"
327bc4a673fSDevin Teske	else
3287041a67eSAndrew Thompson		bsdinstall partedit || error "Partitioning error"
329bc4a673fSDevin Teske	fi
3307041a67eSAndrew Thompson	bsdinstall mount || error "Failed to mount filesystem"
3312118f387SNathan Whitehorn	;;
3322118f387SNathan Whitehorn*)
3337041a67eSAndrew Thompson	error "Unknown partitioning mode"
3342118f387SNathan Whitehorn	;;
3352118f387SNathan Whitehornesac
3362118f387SNathan Whitehorn
3375a4dffacSNathan Whitehornif [ -n "$FETCH_DISTRIBUTIONS" ]; then
3385a4dffacSNathan Whitehorn	exec 3>&1
3395a4dffacSNathan Whitehorn	export BSDINSTALL_DISTDIR=$(`dirname $0`/fetchmissingdists 2>&1 1>&3)
3405a4dffacSNathan Whitehorn	FETCH_RESULT=$?
3415a4dffacSNathan Whitehorn	exec 3>&-
3422118f387SNathan Whitehorn
3435a4dffacSNathan Whitehorn	[ $FETCH_RESULT -ne 0 ] && error "Could not fetch remote distributions"
3442118f387SNathan Whitehornfi
3457041a67eSAndrew Thompsonbsdinstall checksum || error "Distribution checksum failed"
3467041a67eSAndrew Thompsonbsdinstall distextract || error "Distribution extract failed"
3478befcf7bSNathan Whitehorn
3488befcf7bSNathan Whitehorn# Set up boot loader
3498befcf7bSNathan Whitehornbsdinstall bootconfig || error "Failed to configure bootloader"
3508befcf7bSNathan Whitehorn
3517041a67eSAndrew Thompsonbsdinstall rootpass || error "Could not set root password"
3522118f387SNathan Whitehorn
3532118f387SNathan Whitehorntrap true SIGINT	# This section is optional
3542118f387SNathan Whitehornif [ "$NETCONFIG_DONE" != yes ]; then
3552118f387SNathan Whitehorn	bsdinstall netconfig	# Don't check for errors -- the user may cancel
3562118f387SNathan Whitehornfi
3572118f387SNathan Whitehornbsdinstall time
3582118f387SNathan Whitehornbsdinstall services
3590e3f233fSBartek Rutkowskibsdinstall hardening
3602118f387SNathan Whitehorn
3612118f387SNathan Whitehorndialog --backtitle "FreeBSD Installer" --title "Add User Accounts" --yesno \
3622118f387SNathan Whitehorn    "Would you like to add users to the installed system now?" 0 0 && \
3632118f387SNathan Whitehorn    bsdinstall adduser
3642118f387SNathan Whitehorn
3652118f387SNathan Whitehornfinalconfig() {
3662118f387SNathan Whitehorn	exec 3>&1
3672118f387SNathan Whitehorn	REVISIT=$(dialog --backtitle "FreeBSD Installer" \
3682118f387SNathan Whitehorn	    --title "Final Configuration" --no-cancel --menu \
3696081c922SNathan 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 \
37022a84ec9SKen Smith		"Exit" "Apply configuration and exit installer" \
3712118f387SNathan Whitehorn		"Add User" "Add a user to the system" \
3722118f387SNathan Whitehorn		"Root Password" "Change root password" \
3732118f387SNathan Whitehorn		"Hostname" "Set system hostname" \
3742118f387SNathan Whitehorn		"Network" "Networking configuration" \
3752118f387SNathan Whitehorn		"Services" "Set daemons to run on startup" \
3760e3f233fSBartek Rutkowski		"System Hardening" "Set security options" \
3772118f387SNathan Whitehorn		"Time Zone" "Set system timezone" \
3786081c922SNathan Whitehorn		"Handbook" "Install FreeBSD Handbook (requires network)" 2>&1 1>&3)
3792118f387SNathan Whitehorn	exec 3>&-
3802118f387SNathan Whitehorn
3812118f387SNathan Whitehorn	case "$REVISIT" in
3822118f387SNathan Whitehorn	"Add User")
3832118f387SNathan Whitehorn		bsdinstall adduser
3842118f387SNathan Whitehorn		finalconfig
3852118f387SNathan Whitehorn		;;
3862118f387SNathan Whitehorn	"Root Password")
3872118f387SNathan Whitehorn		bsdinstall rootpass
3882118f387SNathan Whitehorn		finalconfig
3892118f387SNathan Whitehorn		;;
3902118f387SNathan Whitehorn	"Hostname")
3912118f387SNathan Whitehorn		bsdinstall hostname
3922118f387SNathan Whitehorn		finalconfig
3932118f387SNathan Whitehorn		;;
3942118f387SNathan Whitehorn	"Network")
3952118f387SNathan Whitehorn		bsdinstall netconfig
3962118f387SNathan Whitehorn		finalconfig
3972118f387SNathan Whitehorn		;;
3982118f387SNathan Whitehorn	"Services")
3992118f387SNathan Whitehorn		bsdinstall services
4002118f387SNathan Whitehorn		finalconfig
4012118f387SNathan Whitehorn		;;
4020e3f233fSBartek Rutkowski	"System Hardening")
4030e3f233fSBartek Rutkowski		bsdinstall hardening
4040e3f233fSBartek Rutkowski		finalconfig
4050e3f233fSBartek Rutkowski		;;
4062118f387SNathan Whitehorn	"Time Zone")
4072118f387SNathan Whitehorn		bsdinstall time
4082118f387SNathan Whitehorn		finalconfig
4092118f387SNathan Whitehorn		;;
410bfc3bab8SNathan Whitehorn	"Handbook")
411bfc3bab8SNathan Whitehorn		bsdinstall docsinstall
412bfc3bab8SNathan Whitehorn		finalconfig
413bfc3bab8SNathan Whitehorn		;;
4142118f387SNathan Whitehorn	esac
4152118f387SNathan Whitehorn}
4162118f387SNathan Whitehorn
4172118f387SNathan Whitehorn# Allow user to change his mind
4182118f387SNathan Whitehornfinalconfig
4192118f387SNathan Whitehorn
4202118f387SNathan Whitehorntrap error SIGINT	# SIGINT is bad again
4217041a67eSAndrew Thompsonbsdinstall config  || error "Failed to save config"
4222118f387SNathan Whitehorn
4232118f387SNathan Whitehornif [ ! -z "$BSDINSTALL_FETCHDEST" ]; then
4242118f387SNathan Whitehorn	rm -rf "$BSDINSTALL_FETCHDEST"
4252118f387SNathan Whitehornfi
4262118f387SNathan Whitehorn
4276081c922SNathan Whitehorndialog --backtitle "FreeBSD Installer" --title "Manual Configuration" \
42844a25dd6SNathan Whitehorn    --default-button no --yesno \
42944a25dd6SNathan 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
4306081c922SNathan Whitehornif [ $? -eq 0 ]; then
4316081c922SNathan Whitehorn	clear
4326081c922SNathan Whitehorn	echo This shell is operating in a chroot in the new system. \
4336081c922SNathan Whitehorn	    When finished making configuration changes, type \"exit\".
4346081c922SNathan Whitehorn	chroot "$BSDINSTALL_CHROOT" /bin/sh 2>&1
4356081c922SNathan Whitehornfi
4366081c922SNathan Whitehorn
437dfc23ba5SDag-Erling Smørgravbsdinstall entropy
438dfc23ba5SDag-Erling Smørgravbsdinstall umount
439dfc23ba5SDag-Erling Smørgrav
440bc4a673fSDevin Teskef_dprintf "Installation Completed at %s" "$( date )"
4412118f387SNathan Whitehorn
442bc4a673fSDevin Teske################################################################################
443bc4a673fSDevin Teske# END
444bc4a673fSDevin Teske################################################################################
445