1218799Snwhitehorn#!/bin/sh 2218799Snwhitehorn#- 3218799Snwhitehorn# Copyright (c) 2011 Nathan Whitehorn 4258421Sdteske# Copyright (c) 2013 Devin Teske 5218799Snwhitehorn# All rights reserved. 6218799Snwhitehorn# 7218799Snwhitehorn# Redistribution and use in source and binary forms, with or without 8218799Snwhitehorn# modification, are permitted provided that the following conditions 9218799Snwhitehorn# are met: 10218799Snwhitehorn# 1. Redistributions of source code must retain the above copyright 11218799Snwhitehorn# notice, this list of conditions and the following disclaimer. 12218799Snwhitehorn# 2. Redistributions in binary form must reproduce the above copyright 13218799Snwhitehorn# notice, this list of conditions and the following disclaimer in the 14218799Snwhitehorn# documentation and/or other materials provided with the distribution. 15218799Snwhitehorn# 16218799Snwhitehorn# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17218799Snwhitehorn# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18218799Snwhitehorn# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19218799Snwhitehorn# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20218799Snwhitehorn# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21218799Snwhitehorn# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22218799Snwhitehorn# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23218799Snwhitehorn# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24218799Snwhitehorn# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25218799Snwhitehorn# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26218799Snwhitehorn# SUCH DAMAGE. 27218799Snwhitehorn# 28218799Snwhitehorn# $FreeBSD: stable/10/usr.sbin/bsdinstall/scripts/auto 313764 2017-02-15 09:15:51Z garga $ 29258421Sdteske# 30258421Sdteske############################################################ INCLUDES 31218799Snwhitehorn 32258421SdteskeBSDCFG_SHARE="/usr/share/bsdconfig" 33258421Sdteske. $BSDCFG_SHARE/common.subr || exit 1 34285769Sallanjudef_include $BSDCFG_SHARE/dialog.subr 35218799Snwhitehorn 36258421Sdteske############################################################ FUNCTIONS 37258421Sdteske 38218799Snwhitehornerror() { 39270644Sthompsa local msg 40270644Sthompsa if [ -n "$1" ]; then 41270644Sthompsa msg="$1\n\n" 42270644Sthompsa fi 43220088Snwhitehorn test -n "$DISTDIR_IS_UNIONFS" && umount -f $BSDINSTALL_DISTDIR 44220088Snwhitehorn test -f $PATH_FSTAB && bsdinstall umount 45218799Snwhitehorn dialog --backtitle "FreeBSD Installer" --title "Abort" \ 46218799Snwhitehorn --no-label "Exit" --yes-label "Restart" --yesno \ 47270644Sthompsa "${msg}An installation step has been aborted. Would you like to restart the installation or exit the installer?" 0 0 48218799Snwhitehorn if [ $? -ne 0 ]; then 49225637Snwhitehorn exit 1 50218799Snwhitehorn else 51218799Snwhitehorn exec $0 52218799Snwhitehorn fi 53218799Snwhitehorn} 54218799Snwhitehorn 55285769Sallanjudehline_arrows_tab_enter="Press arrows, TAB or ENTER" 56294642Sallanjudemsg_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?" 57285769Sallanjudemsg_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?" 58285769Sallanjudemsg_no="NO" 59285769Sallanjudemsg_yes="YES" 60285769Sallanjude 61285769Sallanjude# dialog_workaround 62285769Sallanjude# 63285769Sallanjude# Ask the user if they wish to apply a workaround 64285769Sallanjude# 65285769Sallanjudedialog_workaround() 66285769Sallanjude{ 67285769Sallanjude local passed_msg="$1" 68285769Sallanjude local title="$DIALOG_TITLE" 69285769Sallanjude local btitle="$DIALOG_BACKTITLE" 70285769Sallanjude local prompt # Calculated below 71285769Sallanjude local hline="$hline_arrows_tab_enter" 72285769Sallanjude 73285769Sallanjude local height=8 width=50 prefix=" " 74285769Sallanjude local plen=${#prefix} list= line= 75285769Sallanjude local max_width=$(( $width - 3 - $plen )) 76285769Sallanjude 77285769Sallanjude local yes no defaultno extra_args format 78285769Sallanjude if [ "$USE_XDIALOG" ]; then 79285769Sallanjude yes=ok no=cancel defaultno=default-no 80285769Sallanjude extra_args="--wrap --left" 81285769Sallanjude format="$passed_msg" 82285769Sallanjude else 83285769Sallanjude yes=yes no=no defaultno=defaultno 84285769Sallanjude extra_args="--cr-wrap" 85285769Sallanjude format="$passed_msg" 86285769Sallanjude fi 87285769Sallanjude 88285769Sallanjude # Add height for Xdialog(1) 89285769Sallanjude [ "$USE_XDIALOG" ] && height=$(( $height + $height / 5 + 3 )) 90285769Sallanjude 91285769Sallanjude prompt=$( printf "$format" ) 92285769Sallanjude f_dprintf "%s: Workaround prompt" "$0" 93285769Sallanjude $DIALOG \ 94285769Sallanjude --title "$title" \ 95285769Sallanjude --backtitle "$btitle" \ 96285769Sallanjude --hline "$hline" \ 97285769Sallanjude --$yes-label "$msg_yes" \ 98285769Sallanjude --$no-label "$msg_no" \ 99285769Sallanjude $extra_args \ 100285769Sallanjude --yesno "$prompt" $height $width 101285769Sallanjude} 102285769Sallanjude 103258421Sdteske############################################################ MAIN 104218799Snwhitehorn 105258421Sdteskef_dprintf "Began Installation at %s" "$( date )" 106258421Sdteske 107218799Snwhitehornrm -rf $BSDINSTALL_TMPETC 108218799Snwhitehornmkdir $BSDINSTALL_TMPETC 109218799Snwhitehorn 110218799Snwhitehorntrap true SIGINT # This section is optional 111218799Snwhitehornbsdinstall keymap 112218799Snwhitehorn 113218799Snwhitehorntrap error SIGINT # Catch cntrl-C here 114270644Sthompsabsdinstall hostname || error "Set hostname failed" 115218799Snwhitehorn 116219615Snwhitehornexport DISTRIBUTIONS="base.txz kernel.txz" 117219615Snwhitehornif [ -f $BSDINSTALL_DISTDIR/MANIFEST ]; then 118242188Sdteske DISTMENU=`awk -F'\t' '!/^(kernel|base)/{print $4,$5,$6}' $BSDINSTALL_DISTDIR/MANIFEST` 119218947Snwhitehorn 120219615Snwhitehorn exec 3>&1 121241902Sdteske EXTRA_DISTS=$( eval dialog \ 122241902Sdteske --backtitle \"FreeBSD Installer\" \ 123241902Sdteske --title \"Distribution Select\" --nocancel --separate-output \ 124241902Sdteske --checklist \"Choose optional system components to install:\" \ 125241902Sdteske 0 0 0 $DISTMENU \ 126241902Sdteske 2>&1 1>&3 ) 127219615Snwhitehorn for dist in $EXTRA_DISTS; do 128219615Snwhitehorn export DISTRIBUTIONS="$DISTRIBUTIONS $dist.txz" 129219615Snwhitehorn done 130219615Snwhitehornfi 131218947Snwhitehorn 132218799SnwhitehornFETCH_DISTRIBUTIONS="" 133218799Snwhitehornfor dist in $DISTRIBUTIONS; do 134218799Snwhitehorn if [ ! -f $BSDINSTALL_DISTDIR/$dist ]; then 135218799Snwhitehorn FETCH_DISTRIBUTIONS="$FETCH_DISTRIBUTIONS $dist" 136218799Snwhitehorn fi 137218799Snwhitehorndone 138220080SnwhitehornFETCH_DISTRIBUTIONS=`echo $FETCH_DISTRIBUTIONS` # Trim white space 139218799Snwhitehorn 140220080Snwhitehornif [ -n "$FETCH_DISTRIBUTIONS" -a -n "$BSDINSTALL_CONFIGCURRENT" ]; then 141218799Snwhitehorn dialog --backtitle "FreeBSD Installer" --title "Network Installation" --msgbox "No installation files were 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 142218799Snwhitehorn bsdinstall netconfig || error 143218799Snwhitehorn NETCONFIG_DONE=yes 144218799Snwhitehornfi 145218799Snwhitehorn 146220088Snwhitehornif [ -n "$FETCH_DISTRIBUTIONS" ]; then 147220080Snwhitehorn exec 3>&1 148220834Snwhitehorn BSDINSTALL_DISTSITE=$(`dirname $0`/mirrorselect 2>&1 1>&3) 149220080Snwhitehorn MIRROR_BUTTON=$? 150220080Snwhitehorn exec 3>&- 151270644Sthompsa test $MIRROR_BUTTON -eq 0 || error "No mirror selected" 152220080Snwhitehorn export BSDINSTALL_DISTSITE 153220080Snwhitehornfi 154220080Snwhitehorn 155259621Sdteskerm -f $PATH_FSTAB 156218799Snwhitehorntouch $PATH_FSTAB 157218799Snwhitehorn 158285769Sallanjude# 159285769Sallanjude# Try to detect known broken platforms and apply their workarounds 160285769Sallanjude# 161285769Sallanjude 162285769Sallanjudeif f_interactive; then 163285769Sallanjude sys_maker=$( kenv -q smbios.system.maker ) 164285769Sallanjude f_dprintf "smbios.system.maker=[%s]" "$sys_maker" 165285769Sallanjude sys_model=$( kenv -q smbios.system.product ) 166285769Sallanjude f_dprintf "smbios.system.product=[%s]" "$sys_model" 167285769Sallanjude sys_version=$( kenv -q smbios.system.version ) 168285769Sallanjude f_dprintf "smbios.system.version=[%s]" "$sys_version" 169294642Sallanjude sys_mb_maker=$( kenv -q smbios.planar.maker ) 170294642Sallanjude f_dprintf "smbios.planar.maker=[%s]" "$sys_mb_maker" 171294642Sallanjude sys_mb_product=$( kenv -q smbios.planar.product ) 172294642Sallanjude f_dprintf "smbios.planar.product=[%s]" "$sys_mb_product" 173294642Sallanjude 174294642Sallanjude # 175294642Sallanjude # Laptop Models 176294642Sallanjude # 177285769Sallanjude case "$sys_maker" in 178285769Sallanjude "LENOVO") 179285769Sallanjude case "$sys_version" in 180285769Sallanjude "ThinkPad X220"|"ThinkPad T420"|"ThinkPad T520") 181285769Sallanjude dialog_workaround "$msg_lenovo_fix" 182285769Sallanjude retval=$? 183285769Sallanjude f_dprintf "lenovofix_prompt=[%s]" "$retval" 184285769Sallanjude if [ $retval -eq $DIALOG_OK ]; then 185285769Sallanjude export ZFSBOOT_PARTITION_SCHEME="GPT + Lenovo Fix" 186285769Sallanjude export WORKAROUND_LENOVO=1 187285769Sallanjude fi 188285769Sallanjude ;; 189285769Sallanjude esac 190285769Sallanjude ;; 191285769Sallanjude "Dell Inc.") 192285769Sallanjude case "$sys_model" in 193294651Svangyzen "Latitude E7440"|"Latitude E7240"|"Precision Tower 5810") 194285769Sallanjude dialog_workaround "$msg_gpt_active_fix" 195285769Sallanjude retval=$? 196285769Sallanjude f_dprintf "gpt_active_fix_prompt=[%s]" "$retval" 197285769Sallanjude if [ $retval -eq $DIALOG_OK ]; then 198285769Sallanjude export ZFSBOOT_PARTITION_SCHEME="GPT + Active" 199285769Sallanjude export WORKAROUND_GPTACTIVE=1 200285769Sallanjude fi 201285769Sallanjude ;; 202285769Sallanjude esac 203285769Sallanjude ;; 204294642Sallanjude "Hewlett-Packard") 205294642Sallanjude case "$sys_model" in 206294642Sallanjude "HP ProBook 4330s") 207294642Sallanjude dialog_workaround "$msg_gpt_active_fix" 208294642Sallanjude retval=$? 209294642Sallanjude f_dprintf "gpt_active_fix_prompt=[%s]" "$retval" 210294642Sallanjude if [ $retval -eq $DIALOG_OK ]; then 211294642Sallanjude export ZFSBOOT_PARTITION_SCHEME="GPT + Active" 212294642Sallanjude export WORKAROUND_GPTACTIVE=1 213294642Sallanjude fi 214294642Sallanjude ;; 215294642Sallanjude esac 216294642Sallanjude ;; 217285769Sallanjude esac 218294642Sallanjude # 219294642Sallanjude # Motherboard Models 220294642Sallanjude # 221294642Sallanjude case "$sys_mb_maker" in 222294642Sallanjude "Intel Corporation") 223294642Sallanjude case "$sys_mb_product" in 224294642Sallanjude "DP965LT"|"D510MO") 225294642Sallanjude dialog_workaround "$msg_gpt_active_fix" 226294642Sallanjude retval=$? 227294642Sallanjude f_dprintf "gpt_active_fix_prompt=[%s]" "$retval" 228294642Sallanjude if [ $retval -eq $DIALOG_OK ]; then 229294642Sallanjude export ZFSBOOT_PARTITION_SCHEME="GPT + Active" 230294642Sallanjude export WORKAROUND_GPTACTIVE=1 231294642Sallanjude fi 232294642Sallanjude ;; 233294642Sallanjude esac 234294642Sallanjude ;; 235294642Sallanjude "Acer") 236294642Sallanjude case "$sys_mb_product" in 237294642Sallanjude "Veriton M6630G") 238294642Sallanjude dialog_workaround "$msg_gpt_active_fix" 239294642Sallanjude retval=$? 240294642Sallanjude f_dprintf "gpt_active_fix_prompt=[%s]" "$retval" 241294642Sallanjude if [ $retval -eq $DIALOG_OK ]; then 242294642Sallanjude export ZFSBOOT_PARTITION_SCHEME="GPT + Active" 243294642Sallanjude export WORKAROUND_GPTACTIVE=1 244294642Sallanjude fi 245294642Sallanjude ;; 246294642Sallanjude esac 247294642Sallanjude ;; 248294642Sallanjude esac 249285769Sallanjudefi 250285769Sallanjude 251256361SdteskePMODES="\ 252272194Sdteske\"Auto (UFS)\" \"Guided Disk Setup\" \ 253272194SdteskeManual \"Manual Disk Setup (experts)\" \ 254256361SdteskeShell \"Open a shell and partition by hand\"" 255218799Snwhitehorn 256256361SdteskeCURARCH=$( uname -m ) 257256361Sdteskecase $CURARCH in 258256361Sdteske amd64|i386) # Booting ZFS Supported 259272194Sdteske PMODES="$PMODES \"Auto (ZFS)\" \"Guided Root-on-ZFS\"" 260256361Sdteske ;; 261256361Sdteske *) # Booting ZFS Unspported 262256361Sdteske ;; 263256361Sdteskeesac 264256361Sdteske 265256361Sdteskeexec 3>&1 266256361SdteskePARTMODE=`echo $PMODES | xargs dialog --backtitle "FreeBSD Installer" \ 267256361Sdteske --title "Partitioning" \ 268256361Sdteske --menu "How would you like to partition your disk?" \ 269259621Sdteske 0 0 0 2>&1 1>&3` || exit 1 270256361Sdteskeexec 3>&- 271256361Sdteske 272256361Sdteskecase "$PARTMODE" in 273272194Sdteske"Auto (UFS)") # Guided 274270644Sthompsa bsdinstall autopart || error "Partitioning error" 275270644Sthompsa bsdinstall mount || error "Failed to mount filesystem" 276218799Snwhitehorn ;; 277256361Sdteske"Shell") # Shell 278218799Snwhitehorn clear 279218799Snwhitehorn 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'." 280222425Snwhitehorn sh 2>&1 281218799Snwhitehorn ;; 282256361Sdteske"Manual") # Manual 283258421Sdteske if f_isset debugFile; then 284258421Sdteske # Give partedit the path to our logfile so it can append 285270644Sthompsa BSDINSTALL_LOG="${debugFile#+}" bsdinstall partedit || error "Partitioning error" 286258421Sdteske else 287270644Sthompsa bsdinstall partedit || error "Partitioning error" 288258421Sdteske fi 289270644Sthompsa bsdinstall mount || error "Failed to mount filesystem" 290218799Snwhitehorn ;; 291272194Sdteske"Auto (ZFS)") # ZFS 292270644Sthompsa bsdinstall zfsboot || error "ZFS setup failed" 293270644Sthompsa bsdinstall mount || error "Failed to mount filesystem" 294256361Sdteske ;; 295218799Snwhitehorn*) 296270644Sthompsa error "Unknown partitioning mode" 297218799Snwhitehorn ;; 298218799Snwhitehornesac 299218799Snwhitehorn 300218799Snwhitehornif [ ! -z "$FETCH_DISTRIBUTIONS" ]; then 301218799Snwhitehorn ALL_DISTRIBUTIONS="$DISTRIBUTIONS" 302218799Snwhitehorn 303218799Snwhitehorn # Download to a directory in the new system as scratch space 304219528Snwhitehorn BSDINSTALL_FETCHDEST="$BSDINSTALL_CHROOT/usr/freebsd-dist" 305270644Sthompsa mkdir -p "$BSDINSTALL_FETCHDEST" || error "Could not create directory $BSDINSTALL_FETCHDEST" 306218799Snwhitehorn 307218799Snwhitehorn export DISTRIBUTIONS="$FETCH_DISTRIBUTIONS" 308218799Snwhitehorn # Try to use any existing distfiles 309220088Snwhitehorn if [ -d $BSDINSTALL_DISTDIR ]; then 310220080Snwhitehorn DISTDIR_IS_UNIONFS=1 311223897Snwhitehorn mount_nullfs -o union "$BSDINSTALL_FETCHDEST" "$BSDINSTALL_DISTDIR" 312225637Snwhitehorn else 313286286Sgjb export DISTRIBUTIONS="$ALL_DISTRIBUTIONS" 314218799Snwhitehorn export BSDINSTALL_DISTDIR="$BSDINSTALL_FETCHDEST" 315218799Snwhitehorn fi 316218799Snwhitehorn 317225637Snwhitehorn export FTP_PASSIVE_MODE=YES 318270644Sthompsa bsdinstall distfetch || error "Failed to fetch distribution" 319218799Snwhitehorn export DISTRIBUTIONS="$ALL_DISTRIBUTIONS" 320218799Snwhitehornfi 321218799Snwhitehorn 322270644Sthompsabsdinstall checksum || error "Distribution checksum failed" 323270644Sthompsabsdinstall distextract || error "Distribution extract failed" 324270644Sthompsabsdinstall rootpass || error "Could not set root password" 325218799Snwhitehorn 326218799Snwhitehorntrap true SIGINT # This section is optional 327218799Snwhitehornif [ "$NETCONFIG_DONE" != yes ]; then 328218799Snwhitehorn bsdinstall netconfig # Don't check for errors -- the user may cancel 329218799Snwhitehornfi 330218799Snwhitehornbsdinstall time 331218799Snwhitehornbsdinstall services 332218799Snwhitehorn 333218799Snwhitehorndialog --backtitle "FreeBSD Installer" --title "Add User Accounts" --yesno \ 334218799Snwhitehorn "Would you like to add users to the installed system now?" 0 0 && \ 335218799Snwhitehorn bsdinstall adduser 336218799Snwhitehorn 337218799Snwhitehornfinalconfig() { 338218799Snwhitehorn exec 3>&1 339218799Snwhitehorn REVISIT=$(dialog --backtitle "FreeBSD Installer" \ 340218799Snwhitehorn --title "Final Configuration" --no-cancel --menu \ 341228194Snwhitehorn "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 \ 342226507Skensmith "Exit" "Apply configuration and exit installer" \ 343218799Snwhitehorn "Add User" "Add a user to the system" \ 344218799Snwhitehorn "Root Password" "Change root password" \ 345218799Snwhitehorn "Hostname" "Set system hostname" \ 346218799Snwhitehorn "Network" "Networking configuration" \ 347218799Snwhitehorn "Services" "Set daemons to run on startup" \ 348218799Snwhitehorn "Time Zone" "Set system timezone" \ 349228194Snwhitehorn "Handbook" "Install FreeBSD Handbook (requires network)" 2>&1 1>&3) 350218799Snwhitehorn exec 3>&- 351218799Snwhitehorn 352218799Snwhitehorn case "$REVISIT" in 353218799Snwhitehorn "Add User") 354218799Snwhitehorn bsdinstall adduser 355218799Snwhitehorn finalconfig 356218799Snwhitehorn ;; 357218799Snwhitehorn "Root Password") 358218799Snwhitehorn bsdinstall rootpass 359218799Snwhitehorn finalconfig 360218799Snwhitehorn ;; 361218799Snwhitehorn "Hostname") 362218799Snwhitehorn bsdinstall hostname 363218799Snwhitehorn finalconfig 364218799Snwhitehorn ;; 365218799Snwhitehorn "Network") 366218799Snwhitehorn bsdinstall netconfig 367218799Snwhitehorn finalconfig 368218799Snwhitehorn ;; 369218799Snwhitehorn "Services") 370218799Snwhitehorn bsdinstall services 371218799Snwhitehorn finalconfig 372218799Snwhitehorn ;; 373218799Snwhitehorn "Time Zone") 374218799Snwhitehorn bsdinstall time 375218799Snwhitehorn finalconfig 376218799Snwhitehorn ;; 377223897Snwhitehorn "Handbook") 378223897Snwhitehorn bsdinstall docsinstall 379223897Snwhitehorn finalconfig 380223897Snwhitehorn ;; 381218799Snwhitehorn esac 382218799Snwhitehorn} 383218799Snwhitehorn 384218799Snwhitehorn# Allow user to change his mind 385218799Snwhitehornfinalconfig 386218799Snwhitehorn 387218799Snwhitehorntrap error SIGINT # SIGINT is bad again 388270644Sthompsabsdinstall config || error "Failed to save config" 389218799Snwhitehorn 390313764Sgargaif [ -n "$DISTDIR_IS_UNIONFS" ]; then 391313764Sgarga umount -f $BSDINSTALL_DISTDIR 392313764Sgargafi 393313764Sgarga 394218799Snwhitehornif [ ! -z "$BSDINSTALL_FETCHDEST" ]; then 395218799Snwhitehorn rm -rf "$BSDINSTALL_FETCHDEST" 396218799Snwhitehornfi 397218799Snwhitehorn 398228194Snwhitehorndialog --backtitle "FreeBSD Installer" --title "Manual Configuration" \ 399271777Snwhitehorn --default-button no --yesno \ 400271777Snwhitehorn "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 401228194Snwhitehornif [ $? -eq 0 ]; then 402228194Snwhitehorn clear 403228194Snwhitehorn echo This shell is operating in a chroot in the new system. \ 404228194Snwhitehorn When finished making configuration changes, type \"exit\". 405228194Snwhitehorn chroot "$BSDINSTALL_CHROOT" /bin/sh 2>&1 406228194Snwhitehornfi 407228194Snwhitehorn 408256340Sdesbsdinstall entropy 409256340Sdesbsdinstall umount 410256340Sdes 411258421Sdteskef_dprintf "Installation Completed at %s" "$( date )" 412218799Snwhitehorn 413258421Sdteske################################################################################ 414258421Sdteske# END 415258421Sdteske################################################################################ 416