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