xref: /freebsd/usr.sbin/bsdinstall/scripts/auto (revision c0e249d32c780ee8240fe8b3b8144078a8eec41f)
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#
28bc4a673fSDevin Teske#
29bc4a673fSDevin Teske############################################################ INCLUDES
302118f387SNathan Whitehorn
31bc4a673fSDevin TeskeBSDCFG_SHARE="/usr/share/bsdconfig"
32bc4a673fSDevin Teske. $BSDCFG_SHARE/common.subr || exit 1
337059fa6fSAllan Judef_include $BSDCFG_SHARE/dialog.subr
34bc4a673fSDevin Teske
35f0c98fdeSDevin Teske############################################################ GLOBALS
362118f387SNathan Whitehorn
37f0c98fdeSDevin Teske#
38f0c98fdeSDevin Teske# Strings that should be moved to an i18n file and loaded with f_include_lang()
39f0c98fdeSDevin Teske#
407059fa6fSAllan Judehline_arrows_tab_enter="Press arrows, TAB or ENTER"
41f0c98fdeSDevin Teskehline_arrows_tab_space_enter="Press arrows, TAB, SPACE or ENTER"
42f0c98fdeSDevin Teskemsg_abort="Abort"
43595373ddSBen Woodsmsg_an_installation_step_has_been_aborted="An installation step has been aborted. Would you like\nto restart the installation or exit the installer?"
44595373ddSBen Woodsmsg_auto_ufs="Auto (UFS)"
45595373ddSBen Woodsmsg_auto_ufs_desc="Guided UFS Disk Setup"
46595373ddSBen Woodsmsg_auto_ufs_help="Menu options help choose which disk to setup using UFS and standard partitions"
47595373ddSBen Woodsmsg_auto_zfs="Auto (ZFS)"
48595373ddSBen Woodsmsg_auto_zfs_desc="Guided Root-on-ZFS"
49595373ddSBen Woodsmsg_auto_zfs_help="To use ZFS with less than 8GB RAM, see https://wiki.freebsd.org/ZFSTuningGuide"
50f0c98fdeSDevin Teskemsg_exit="Exit"
51cc42ef53SBrad Davismsg_freebsd_installer="$OSNAME Installer"
52a7d5d8d9SAllan 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?"
537059fa6fSAllan 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?"
54595373ddSBen Woodsmsg_manual="Manual"
55595373ddSBen Woodsmsg_manual_desc="Manual Disk Setup (experts)"
56595373ddSBen Woodsmsg_manual_help="Create customized partitions from menu options"
577059fa6fSAllan Judemsg_no="NO"
58f0c98fdeSDevin Teskemsg_restart="Restart"
59595373ddSBen Woodsmsg_shell="Shell"
60595373ddSBen Woodsmsg_shell_desc="Open a shell and partition by hand"
61595373ddSBen Woodsmsg_shell_help="Create customized partitions using command-line utilities"
627059fa6fSAllan Judemsg_yes="YES"
637059fa6fSAllan Jude
64f0c98fdeSDevin Teske############################################################ FUNCTIONS
65f0c98fdeSDevin Teske
66f0c98fdeSDevin Teske# error [$msg]
67f0c98fdeSDevin Teske#
68f0c98fdeSDevin Teske# Display generic error message when a script fails. An optional message
69f0c98fdeSDevin Teske# argument can preceed the generic message. User is given the choice of
70f0c98fdeSDevin Teske# restarting the installer or exiting.
71f0c98fdeSDevin Teske#
72f0c98fdeSDevin Teskeerror()
73f0c98fdeSDevin Teske{
74f0c98fdeSDevin Teske	local title="$msg_abort"
75f0c98fdeSDevin Teske	local btitle="$msg_freebsd_installer"
76f0c98fdeSDevin Teske	local prompt="${1:+$1\n\n}$msg_an_installation_step_has_been_aborted"
77f0c98fdeSDevin Teske	local hline="$hline_arrows_tab_space_enter"
78f0c98fdeSDevin Teske
79f0c98fdeSDevin Teske	[ -f "$PATH_FSTAB" ] && bsdinstall umount
80f0c98fdeSDevin Teske
81f0c98fdeSDevin Teske	local height width
82f0c98fdeSDevin Teske	f_dialog_buttonbox_size height width \
83f0c98fdeSDevin Teske		"$title" "$btitle" "$prompt" "$hline"
84f0c98fdeSDevin Teske
85f0c98fdeSDevin Teske	if $DIALOG \
86f0c98fdeSDevin Teske		--title "$title"           \
87f0c98fdeSDevin Teske		--backtitle "$btitle"      \
88f0c98fdeSDevin Teske		--hline "$hline"           \
89f0c98fdeSDevin Teske		--no-label "$msg_exit"     \
90f0c98fdeSDevin Teske		--yes-label "$msg_restart" \
91f0c98fdeSDevin Teske		--yesno "$prompt" $height $width
92f0c98fdeSDevin Teske	then
93f0c98fdeSDevin Teske		exec $0
94f0c98fdeSDevin Teske		# NOTREACHED
95f0c98fdeSDevin Teske	fi
96f0c98fdeSDevin Teske	exit 1
97f0c98fdeSDevin Teske}
98f0c98fdeSDevin Teske
997059fa6fSAllan Jude# dialog_workaround
1007059fa6fSAllan Jude#
1017059fa6fSAllan Jude# Ask the user if they wish to apply a workaround
1027059fa6fSAllan Jude#
1037059fa6fSAllan Judedialog_workaround()
1047059fa6fSAllan Jude{
1057059fa6fSAllan Jude	local passed_msg="$1"
1067059fa6fSAllan Jude	local title="$DIALOG_TITLE"
1077059fa6fSAllan Jude	local btitle="$DIALOG_BACKTITLE"
1087059fa6fSAllan Jude	local prompt # Calculated below
1097059fa6fSAllan Jude	local hline="$hline_arrows_tab_enter"
1107059fa6fSAllan Jude
1117059fa6fSAllan Jude	local height=8 width=50 prefix="   "
1127059fa6fSAllan Jude	local plen=${#prefix} list= line=
1137059fa6fSAllan Jude	local max_width=$(( $width - 3 - $plen ))
1147059fa6fSAllan Jude
1157059fa6fSAllan Jude	local yes no defaultno extra_args format
1167059fa6fSAllan Jude	if [ "$USE_XDIALOG" ]; then
1177059fa6fSAllan Jude		yes=ok no=cancel defaultno=default-no
1187059fa6fSAllan Jude		extra_args="--wrap --left"
1197059fa6fSAllan Jude		format="$passed_msg"
1207059fa6fSAllan Jude	else
1217059fa6fSAllan Jude		yes=yes no=no defaultno=defaultno
1227059fa6fSAllan Jude		extra_args="--cr-wrap"
1237059fa6fSAllan Jude		format="$passed_msg"
1247059fa6fSAllan Jude	fi
1257059fa6fSAllan Jude
1267059fa6fSAllan Jude	# Add height for Xdialog(1)
1277059fa6fSAllan Jude	[ "$USE_XDIALOG" ] && height=$(( $height + $height / 5 + 3 ))
1287059fa6fSAllan Jude
1297059fa6fSAllan Jude	prompt=$( printf "$format" )
1307059fa6fSAllan Jude	f_dprintf "%s: Workaround prompt" "$0"
1317059fa6fSAllan Jude	$DIALOG \
1327059fa6fSAllan Jude		--title "$title"        \
1337059fa6fSAllan Jude		--backtitle "$btitle"   \
1347059fa6fSAllan Jude		--hline "$hline"        \
1357059fa6fSAllan Jude		--$yes-label "$msg_yes" \
1367059fa6fSAllan Jude		--$no-label "$msg_no"   \
1377059fa6fSAllan Jude		$extra_args             \
1387059fa6fSAllan Jude		--yesno "$prompt" $height $width
1397059fa6fSAllan Jude}
1407059fa6fSAllan Jude
141bc4a673fSDevin Teske############################################################ MAIN
142bc4a673fSDevin Teske
143bc4a673fSDevin Teskef_dprintf "Began Installation at %s" "$( date )"
1442118f387SNathan Whitehorn
1452118f387SNathan Whitehornrm -rf $BSDINSTALL_TMPETC
1462118f387SNathan Whitehornmkdir $BSDINSTALL_TMPETC
1472118f387SNathan Whitehorn
14803d66186SBrad Davis[ -f /usr/libexec/bsdinstall/local.pre-everything ] && f_dprintf "Running local.pre-everything" && sh /usr/libexec/bsdinstall/local.pre-everything "$BSDINSTALL_CHROOT"
14903d66186SBrad Davis
1502118f387SNathan Whitehorntrap true SIGINT	# This section is optional
15117f4ded5SBrad Davis[ -z "$BSDINSTALL_SKIP_KEYMAP" ] && bsdinstall keymap
1522118f387SNathan Whitehorn
1532118f387SNathan Whitehorntrap error SIGINT	# Catch cntrl-C here
15417f4ded5SBrad Davisif [ -z "$BSDINSTALL_SKIP_HOSTNAME" ]; then bsdinstall hostname || error "Set hostname failed"; fi
1552118f387SNathan Whitehorn
1563bcd2612SBrad Davisexport DISTRIBUTIONS="${DISTRIBUTIONS:-base.txz kernel.txz}"
157b70047d4SNathan Whitehornif [ -f $BSDINSTALL_DISTDIR/MANIFEST ]; then
15888343186SGlen Barber	DISTMENU=`awk -F'\t' '!/^(kernel\.txz|base\.txz)/{print $1,$5,$6}' $BSDINSTALL_DISTDIR/MANIFEST`
15988343186SGlen Barber	DISTMENU="$(echo ${DISTMENU} | sed -E 's/\.txz//g')"
160addc19a4SNathan Whitehorn
16195f0da5bSRenato Botelho	if [ -n "$DISTMENU" ]; then
162*c0e249d3SLars Kellogg-Stedman		exec 5>&1
1634ca6fb65SDevin Teske		EXTRA_DISTS=$( eval dialog \
164cc42ef53SBrad Davis		    --backtitle \"$OSNAME Installer\" \
1654ca6fb65SDevin Teske		    --title \"Distribution Select\" --nocancel --separate-output \
1664ca6fb65SDevin Teske		    --checklist \"Choose optional system components to install:\" \
1674ca6fb65SDevin Teske		    0 0 0 $DISTMENU \
168*c0e249d3SLars Kellogg-Stedman		2>&1 1>&5 )
169addc19a4SNathan Whitehorn		for dist in $EXTRA_DISTS; do
170addc19a4SNathan Whitehorn			export DISTRIBUTIONS="$DISTRIBUTIONS $dist.txz"
171addc19a4SNathan Whitehorn		done
172b70047d4SNathan Whitehorn	fi
17395f0da5bSRenato Botelhofi
174addc19a4SNathan Whitehorn
1752118f387SNathan WhitehornFETCH_DISTRIBUTIONS=""
1762118f387SNathan Whitehornfor dist in $DISTRIBUTIONS; do
1772118f387SNathan Whitehorn	if [ ! -f $BSDINSTALL_DISTDIR/$dist ]; then
1782118f387SNathan Whitehorn		FETCH_DISTRIBUTIONS="$FETCH_DISTRIBUTIONS $dist"
1792118f387SNathan Whitehorn	fi
1802118f387SNathan Whitehorndone
1812118f387SNathan Whitehorn
1826dcef0cfSNathan Whitehornif [ -n "$FETCH_DISTRIBUTIONS" -a -n "$BSDINSTALL_CONFIGCURRENT" ]; then
183cc42ef53SBrad Davis	dialog --backtitle "$OSNAME 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
1842118f387SNathan Whitehorn	bsdinstall netconfig || error
1852118f387SNathan Whitehorn	NETCONFIG_DONE=yes
1862118f387SNathan Whitehornfi
1872118f387SNathan Whitehorn
1882d5cf580SDevin Teskerm -f $PATH_FSTAB
1892118f387SNathan Whitehorntouch $PATH_FSTAB
1902118f387SNathan Whitehorn
19103d66186SBrad Davis[ -f /usr/libexec/bsdinstall/local.pre-partition ] && f_dprintf "Running local.pre-partition" && sh /usr/libexec/bsdinstall/local.pre-partition "$BSDINSTALL_CHROOT"
19203d66186SBrad Davis
1937059fa6fSAllan Jude#
1947059fa6fSAllan Jude# Try to detect known broken platforms and apply their workarounds
1957059fa6fSAllan Jude#
1967059fa6fSAllan Jude
1977059fa6fSAllan Judeif f_interactive; then
1987059fa6fSAllan Jude	sys_maker=$( kenv -q smbios.system.maker )
1997059fa6fSAllan Jude	f_dprintf "smbios.system.maker=[%s]" "$sys_maker"
2007059fa6fSAllan Jude	sys_model=$( kenv -q smbios.system.product )
2017059fa6fSAllan Jude	f_dprintf "smbios.system.product=[%s]" "$sys_model"
2027059fa6fSAllan Jude	sys_version=$( kenv -q smbios.system.version )
2037059fa6fSAllan Jude	f_dprintf "smbios.system.version=[%s]" "$sys_version"
204a7d5d8d9SAllan Jude	sys_mb_maker=$( kenv -q smbios.planar.maker )
205a7d5d8d9SAllan Jude	f_dprintf "smbios.planar.maker=[%s]" "$sys_mb_maker"
206a7d5d8d9SAllan Jude	sys_mb_product=$( kenv -q smbios.planar.product )
207a7d5d8d9SAllan Jude	f_dprintf "smbios.planar.product=[%s]" "$sys_mb_product"
208a7d5d8d9SAllan Jude
209a7d5d8d9SAllan Jude	#
210a7d5d8d9SAllan Jude	# Laptop Models
211a7d5d8d9SAllan Jude	#
2127059fa6fSAllan Jude	case "$sys_maker" in
2137059fa6fSAllan Jude	"LENOVO")
2147059fa6fSAllan Jude		case "$sys_version" in
215229c92e7SAllan Jude		"ThinkPad X220"|"ThinkPad T420"|"ThinkPad T520"|"ThinkPad W520"|"ThinkPad X1")
2167059fa6fSAllan Jude			dialog_workaround "$msg_lenovo_fix"
2177059fa6fSAllan Jude			retval=$?
2187059fa6fSAllan Jude			f_dprintf "lenovofix_prompt=[%s]" "$retval"
2197059fa6fSAllan Jude			if [ $retval -eq $DIALOG_OK ]; then
2207059fa6fSAllan Jude				export ZFSBOOT_PARTITION_SCHEME="GPT + Lenovo Fix"
2217059fa6fSAllan Jude				export WORKAROUND_LENOVO=1
2227059fa6fSAllan Jude			fi
2237059fa6fSAllan Jude			;;
2247059fa6fSAllan Jude		esac
2257059fa6fSAllan Jude		;;
2267059fa6fSAllan Jude	"Dell Inc.")
2277059fa6fSAllan Jude		case "$sys_model" in
228e3026446SAllan Jude		"Latitude E6330"|"Latitude E7440"|"Latitude E7240"|"Precision Tower 5810")
229a7d5d8d9SAllan Jude			dialog_workaround "$msg_gpt_active_fix"
230a7d5d8d9SAllan Jude			retval=$?
231a7d5d8d9SAllan Jude			f_dprintf "gpt_active_fix_prompt=[%s]" "$retval"
232a7d5d8d9SAllan Jude			if [ $retval -eq $DIALOG_OK ]; then
233a7d5d8d9SAllan Jude				export ZFSBOOT_PARTITION_SCHEME="GPT + Active"
234a7d5d8d9SAllan Jude				export WORKAROUND_GPTACTIVE=1
235a7d5d8d9SAllan Jude			fi
236a7d5d8d9SAllan Jude			;;
237a7d5d8d9SAllan Jude		esac
238a7d5d8d9SAllan Jude		;;
2394c95e76aSAllan Jude	"Hewlett-Packard")
2404c95e76aSAllan Jude		case "$sys_model" in
2414c95e76aSAllan Jude		"HP ProBook 4330s")
2424c95e76aSAllan Jude			dialog_workaround "$msg_gpt_active_fix"
2434c95e76aSAllan Jude			retval=$?
2444c95e76aSAllan Jude			f_dprintf "gpt_active_fix_prompt=[%s]" "$retval"
2454c95e76aSAllan Jude			if [ $retval -eq $DIALOG_OK ]; then
2464c95e76aSAllan Jude				export ZFSBOOT_PARTITION_SCHEME="GPT + Active"
2474c95e76aSAllan Jude				export WORKAROUND_GPTACTIVE=1
2484c95e76aSAllan Jude			fi
2494c95e76aSAllan Jude			;;
2504c95e76aSAllan Jude		esac
2514c95e76aSAllan Jude		;;
252a7d5d8d9SAllan Jude	esac
253a7d5d8d9SAllan Jude	#
254a7d5d8d9SAllan Jude	# Motherboard Models
255a7d5d8d9SAllan Jude	#
256a7d5d8d9SAllan Jude	case "$sys_mb_maker" in
257a7d5d8d9SAllan Jude	"Intel Corporation")
258a7d5d8d9SAllan Jude		case "$sys_mb_product" in
2594c95e76aSAllan Jude		"DP965LT"|"D510MO")
2604c95e76aSAllan Jude			dialog_workaround "$msg_gpt_active_fix"
2614c95e76aSAllan Jude			retval=$?
2624c95e76aSAllan Jude			f_dprintf "gpt_active_fix_prompt=[%s]" "$retval"
2634c95e76aSAllan Jude			if [ $retval -eq $DIALOG_OK ]; then
2644c95e76aSAllan Jude				export ZFSBOOT_PARTITION_SCHEME="GPT + Active"
2654c95e76aSAllan Jude				export WORKAROUND_GPTACTIVE=1
2664c95e76aSAllan Jude			fi
2674c95e76aSAllan Jude			;;
2684c95e76aSAllan Jude		esac
2694c95e76aSAllan Jude		;;
2704c95e76aSAllan Jude	"Acer")
2714c95e76aSAllan Jude		case "$sys_mb_product" in
2724c95e76aSAllan Jude		"Veriton M6630G")
2737059fa6fSAllan Jude			dialog_workaround "$msg_gpt_active_fix"
2747059fa6fSAllan Jude			retval=$?
2757059fa6fSAllan Jude			f_dprintf "gpt_active_fix_prompt=[%s]" "$retval"
2767059fa6fSAllan Jude			if [ $retval -eq $DIALOG_OK ]; then
2777059fa6fSAllan Jude				export ZFSBOOT_PARTITION_SCHEME="GPT + Active"
2787059fa6fSAllan Jude				export WORKAROUND_GPTACTIVE=1
2797059fa6fSAllan Jude			fi
2807059fa6fSAllan Jude			;;
2817059fa6fSAllan Jude		esac
2827059fa6fSAllan Jude		;;
2837059fa6fSAllan Jude	esac
2847059fa6fSAllan Judefi
2857059fa6fSAllan Jude
286595373ddSBen WoodsPMODES="
287595373ddSBen Woods	'$msg_auto_ufs' '$msg_auto_ufs_desc' '$msg_auto_ufs_help'
288595373ddSBen Woods	'$msg_manual' '$msg_manual_desc' '$msg_manual_help'
289595373ddSBen Woods	'$msg_shell' '$msg_shell_desc' '$msg_shell_help'
290595373ddSBen Woods" # END-QUOTE
2912118f387SNathan Whitehorn
292cd88b886SDevin TeskeCURARCH=$( uname -m )
293cd88b886SDevin Teskecase $CURARCH in
2947b08a307SMitchell Horne	amd64|arm64|i386|riscv)	# Booting ZFS Supported
295595373ddSBen Woods		PMODES="
296595373ddSBen Woods			'$msg_auto_zfs' '$msg_auto_zfs_desc' '$msg_auto_zfs_help'
297595373ddSBen Woods			$PMODES
298595373ddSBen Woods		" # END-QUOTE
299cd88b886SDevin Teske		;;
300595373ddSBen Woods	*)			# Booting ZFS Unsupported
301cd88b886SDevin Teske		;;
302cd88b886SDevin Teskeesac
303cd88b886SDevin Teske
304*c0e249d3SLars Kellogg-Stedmanexec 5>&1
305cc42ef53SBrad DavisPARTMODE=`echo $PMODES | xargs dialog --backtitle "$OSNAME Installer" \
306cd88b886SDevin Teske	--title "Partitioning" \
307595373ddSBen Woods	--item-help \
308cd88b886SDevin Teske	--menu "How would you like to partition your disk?" \
309*c0e249d3SLars Kellogg-Stedman	0 0 0 2>&1 1>&5` || exit 1
310*c0e249d3SLars Kellogg-Stedmanexec 5>&-
311cd88b886SDevin Teske
312cd88b886SDevin Teskecase "$PARTMODE" in
313595373ddSBen Woods"$msg_auto_zfs")	# ZFS
314d512033eSBen Woods	bsdinstall zfsboot || error "ZFS setup failed"
315d512033eSBen Woods	bsdinstall mount || error "Failed to mount filesystem"
316d512033eSBen Woods	;;
317595373ddSBen Woods"$msg_auto_ufs")	# Guided UFS
3187041a67eSAndrew Thompson	bsdinstall autopart || error "Partitioning error"
3197041a67eSAndrew Thompson	bsdinstall mount || error "Failed to mount filesystem"
3202118f387SNathan Whitehorn	;;
321595373ddSBen Woods"$msg_shell")		# Shell
3222118f387SNathan Whitehorn	clear
3232118f387SNathan 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'."
324809685bcSNathan Whitehorn	sh 2>&1
3252118f387SNathan Whitehorn	;;
326595373ddSBen Woods"$msg_manual")		# Manual
327bc4a673fSDevin Teske	if f_isset debugFile; then
328bc4a673fSDevin Teske		# Give partedit the path to our logfile so it can append
3297041a67eSAndrew Thompson		BSDINSTALL_LOG="${debugFile#+}" bsdinstall partedit || error "Partitioning error"
330bc4a673fSDevin Teske	else
3317041a67eSAndrew Thompson		bsdinstall partedit || error "Partitioning error"
332bc4a673fSDevin Teske	fi
3337041a67eSAndrew Thompson	bsdinstall mount || error "Failed to mount filesystem"
3342118f387SNathan Whitehorn	;;
3352118f387SNathan Whitehorn*)
3367041a67eSAndrew Thompson	error "Unknown partitioning mode"
3372118f387SNathan Whitehorn	;;
3382118f387SNathan Whitehornesac
3392118f387SNathan Whitehorn
34003d66186SBrad Davis[ -f /usr/libexec/bsdinstall/local.pre-fetch ] && f_dprintf "Running local.pre-fetch" && sh /usr/libexec/bsdinstall/local.pre-fetch "$BSDINSTALL_CHROOT"
34103d66186SBrad Davis
34240923b0cSNathan Whitehornif [ -n "$FETCH_DISTRIBUTIONS" ]; then
343*c0e249d3SLars Kellogg-Stedman	exec 5>&1
344*c0e249d3SLars Kellogg-Stedman	export BSDINSTALL_DISTDIR=$(`dirname $0`/fetchmissingdists 2>&1 1>&5)
34540923b0cSNathan Whitehorn	FETCH_RESULT=$?
346*c0e249d3SLars Kellogg-Stedman	exec 5>&-
3472118f387SNathan Whitehorn
34840923b0cSNathan Whitehorn	[ $FETCH_RESULT -ne 0 ] && error "Could not fetch remote distributions"
3492118f387SNathan Whitehornfi
3507041a67eSAndrew Thompsonbsdinstall checksum || error "Distribution checksum failed"
3517041a67eSAndrew Thompsonbsdinstall distextract || error "Distribution extract failed"
3528befcf7bSNathan Whitehorn
3538befcf7bSNathan Whitehorn# Set up boot loader
3548befcf7bSNathan Whitehornbsdinstall bootconfig || error "Failed to configure bootloader"
3558befcf7bSNathan Whitehorn
35603d66186SBrad Davis[ -f /usr/libexec/bsdinstall/local.pre-configure ] && f_dprintf "Running local.pre-configure" && sh /usr/libexec/bsdinstall/local.pre-configure "$BSDINSTALL_CHROOT"
35703d66186SBrad Davis
3587041a67eSAndrew Thompsonbsdinstall rootpass || error "Could not set root password"
3592118f387SNathan Whitehorn
3602118f387SNathan Whitehorntrap true SIGINT	# This section is optional
3612118f387SNathan Whitehornif [ "$NETCONFIG_DONE" != yes ]; then
3622118f387SNathan Whitehorn	bsdinstall netconfig	# Don't check for errors -- the user may cancel
3632118f387SNathan Whitehornfi
36417f4ded5SBrad Davis[ -z "$BSDINSTALL_SKIP_TIME" ] && bsdinstall time
36517f4ded5SBrad Davis[ -z "$BSDINSTALL_SKIP_SERVICES" ] && bsdinstall services
36617f4ded5SBrad Davis[ -z "$BSDINSTALL_SKIP_HARDENING" ] && bsdinstall hardening
3672118f387SNathan Whitehorn
36817f4ded5SBrad Davis[ -z "$BSDINSTALL_SKIP_USERS" ] && dialog --backtitle "$OSNAME Installer" \
36917f4ded5SBrad Davis	--title "Add User Accounts" --yesno \
3702118f387SNathan Whitehorn    "Would you like to add users to the installed system now?" 0 0 && \
3712118f387SNathan Whitehorn    bsdinstall adduser
3722118f387SNathan Whitehorn
3732118f387SNathan Whitehornfinalconfig() {
374*c0e249d3SLars Kellogg-Stedman	exec 5>&1
375cc42ef53SBrad Davis	REVISIT=$(dialog --backtitle "$OSNAME Installer" \
3762118f387SNathan Whitehorn	    --title "Final Configuration" --no-cancel --menu \
377cc42ef53SBrad Davis	    "Setup of your $OSNAME 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 \
37822a84ec9SKen Smith		"Exit" "Apply configuration and exit installer" \
3792118f387SNathan Whitehorn		"Add User" "Add a user to the system" \
3802118f387SNathan Whitehorn		"Root Password" "Change root password" \
3812118f387SNathan Whitehorn		"Hostname" "Set system hostname" \
3822118f387SNathan Whitehorn		"Network" "Networking configuration" \
3832118f387SNathan Whitehorn		"Services" "Set daemons to run on startup" \
3840e3f233fSBartek Rutkowski		"System Hardening" "Set security options" \
3852118f387SNathan Whitehorn		"Time Zone" "Set system timezone" \
386*c0e249d3SLars Kellogg-Stedman		"Handbook" "Install $OSNAME Handbook (requires network)" 2>&1 1>&5)
387*c0e249d3SLars Kellogg-Stedman	exec 5>&-
3882118f387SNathan Whitehorn
3892118f387SNathan Whitehorn	case "$REVISIT" in
3902118f387SNathan Whitehorn	"Add User")
3912118f387SNathan Whitehorn		bsdinstall adduser
3922118f387SNathan Whitehorn		finalconfig
3932118f387SNathan Whitehorn		;;
3942118f387SNathan Whitehorn	"Root Password")
3952118f387SNathan Whitehorn		bsdinstall rootpass
3962118f387SNathan Whitehorn		finalconfig
3972118f387SNathan Whitehorn		;;
3982118f387SNathan Whitehorn	"Hostname")
3992118f387SNathan Whitehorn		bsdinstall hostname
4002118f387SNathan Whitehorn		finalconfig
4012118f387SNathan Whitehorn		;;
4022118f387SNathan Whitehorn	"Network")
4032118f387SNathan Whitehorn		bsdinstall netconfig
4042118f387SNathan Whitehorn		finalconfig
4052118f387SNathan Whitehorn		;;
4062118f387SNathan Whitehorn	"Services")
4072118f387SNathan Whitehorn		bsdinstall services
4082118f387SNathan Whitehorn		finalconfig
4092118f387SNathan Whitehorn		;;
4100e3f233fSBartek Rutkowski	"System Hardening")
4110e3f233fSBartek Rutkowski		bsdinstall hardening
4120e3f233fSBartek Rutkowski		finalconfig
4130e3f233fSBartek Rutkowski		;;
4142118f387SNathan Whitehorn	"Time Zone")
4152118f387SNathan Whitehorn		bsdinstall time
4162118f387SNathan Whitehorn		finalconfig
4172118f387SNathan Whitehorn		;;
418bfc3bab8SNathan Whitehorn	"Handbook")
419bfc3bab8SNathan Whitehorn		bsdinstall docsinstall
420bfc3bab8SNathan Whitehorn		finalconfig
421bfc3bab8SNathan Whitehorn		;;
4222118f387SNathan Whitehorn	esac
4232118f387SNathan Whitehorn}
4242118f387SNathan Whitehorn
4252118f387SNathan Whitehorn# Allow user to change his mind
42617f4ded5SBrad Davis[ -z "$BSDINSTALL_SKIP_FINALCONFIG" ] && finalconfig
4272118f387SNathan Whitehorn
4282118f387SNathan Whitehorntrap error SIGINT	# SIGINT is bad again
4297041a67eSAndrew Thompsonbsdinstall config  || error "Failed to save config"
4302118f387SNathan Whitehorn
4312118f387SNathan Whitehornif [ ! -z "$BSDINSTALL_FETCHDEST" ]; then
4322118f387SNathan Whitehorn	rm -rf "$BSDINSTALL_FETCHDEST"
4332118f387SNathan Whitehornfi
4342118f387SNathan Whitehorn
43503d66186SBrad Davis[ -f /usr/libexec/bsdinstall/local.post-configure ] && f_dprintf "Running local.post-configure" && sh /usr/libexec/bsdinstall/local.post-configure "$BSDINSTALL_CHROOT"
43603d66186SBrad Davis
43717f4ded5SBrad Davisif [ -z "$BSDINSTALL_SKIP_MANUAL" ]; then
438cc42ef53SBrad Davis	dialog --backtitle "$OSNAME Installer" --title "Manual Configuration" \
43944a25dd6SNathan Whitehorn		--default-button no --yesno \
44044a25dd6SNathan 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
4416081c922SNathan Whitehorn	if [ $? -eq 0 ]; then
4426081c922SNathan Whitehorn		clear
4436081c922SNathan Whitehorn		echo This shell is operating in a chroot in the new system. \
4446081c922SNathan Whitehorn		    When finished making configuration changes, type \"exit\".
4456081c922SNathan Whitehorn		chroot "$BSDINSTALL_CHROOT" /bin/sh 2>&1
4466081c922SNathan Whitehorn	fi
44717f4ded5SBrad Davisfi
4486081c922SNathan Whitehorn
449dfc23ba5SDag-Erling Smørgravbsdinstall entropy
450dfc23ba5SDag-Erling Smørgravbsdinstall umount
451dfc23ba5SDag-Erling Smørgrav
452bc4a673fSDevin Teskef_dprintf "Installation Completed at %s" "$( date )"
4532118f387SNathan Whitehorn
454bc4a673fSDevin Teske################################################################################
455bc4a673fSDevin Teske# END
456bc4a673fSDevin Teske################################################################################
457