1#!/bin/sh 2#- 3# Copyright (c) 2011 Nathan Whitehorn 4# Copyright (c) 2013 Devin Teske 5# All rights reserved. 6# 7# Redistribution and use in source and binary forms, with or without 8# modification, are permitted provided that the following conditions 9# are met: 10# 1. Redistributions of source code must retain the above copyright 11# notice, this list of conditions and the following disclaimer. 12# 2. Redistributions in binary form must reproduce the above copyright 13# notice, this list of conditions and the following disclaimer in the 14# documentation and/or other materials provided with the distribution. 15# 16# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26# SUCH DAMAGE. 27# 28# $FreeBSD$ 29# 30############################################################ INCLUDES 31 32BSDCFG_SHARE="/usr/share/bsdconfig" 33. $BSDCFG_SHARE/common.subr || exit 1 34 35############################################################ FUNCTIONS 36 37error() { 38 test -n "$DISTDIR_IS_UNIONFS" && umount -f $BSDINSTALL_DISTDIR 39 test -f $PATH_FSTAB && bsdinstall umount 40 dialog --backtitle "FreeBSD Installer" --title "Abort" \ 41 --no-label "Exit" --yes-label "Restart" --yesno \ 42 "An installation step has been aborted. Would you like to restart the installation or exit the installer?" 0 0 43 if [ $? -ne 0 ]; then 44 exit 1 45 else 46 exec $0 47 fi 48} 49 50############################################################ MAIN 51 52# Don't send ESC on function-key 62/63 (left/right command key) 53f_quietly kbdcontrol -f 62 '' 54f_quietly kbdcontrol -f 63 '' 55 56f_dprintf "Began Installation at %s" "$( date )" 57 58rm -rf $BSDINSTALL_TMPETC 59mkdir $BSDINSTALL_TMPETC 60 61trap true SIGINT # This section is optional 62bsdinstall keymap 63 64trap error SIGINT # Catch cntrl-C here 65bsdinstall hostname || error 66 67export DISTRIBUTIONS="base.txz kernel.txz" 68if [ -f $BSDINSTALL_DISTDIR/MANIFEST ]; then 69 DISTMENU=`awk -F'\t' '!/^(kernel|base)/{print $4,$5,$6}' $BSDINSTALL_DISTDIR/MANIFEST` 70 71 exec 3>&1 72 EXTRA_DISTS=$( eval dialog \ 73 --backtitle \"FreeBSD Installer\" \ 74 --title \"Distribution Select\" --nocancel --separate-output \ 75 --checklist \"Choose optional system components to install:\" \ 76 0 0 0 $DISTMENU \ 77 2>&1 1>&3 ) 78 for dist in $EXTRA_DISTS; do 79 export DISTRIBUTIONS="$DISTRIBUTIONS $dist.txz" 80 done 81fi 82 83FETCH_DISTRIBUTIONS="" 84for dist in $DISTRIBUTIONS; do 85 if [ ! -f $BSDINSTALL_DISTDIR/$dist ]; then 86 FETCH_DISTRIBUTIONS="$FETCH_DISTRIBUTIONS $dist" 87 fi 88done 89FETCH_DISTRIBUTIONS=`echo $FETCH_DISTRIBUTIONS` # Trim white space 90 91if [ -n "$FETCH_DISTRIBUTIONS" -a -n "$BSDINSTALL_CONFIGCURRENT" ]; then 92 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 93 bsdinstall netconfig || error 94 NETCONFIG_DONE=yes 95fi 96 97if [ -n "$FETCH_DISTRIBUTIONS" ]; then 98 exec 3>&1 99 BSDINSTALL_DISTSITE=$(`dirname $0`/mirrorselect 2>&1 1>&3) 100 MIRROR_BUTTON=$? 101 exec 3>&- 102 test $MIRROR_BUTTON -eq 0 || error 103 export BSDINSTALL_DISTSITE 104fi 105 106rm $PATH_FSTAB 107touch $PATH_FSTAB 108 109PMODES="\ 110Guided \"Partitioning Tool (Recommended for Beginners)\" \ 111Manual \"Manually Configure Partitions (Expert)\" \ 112Shell \"Open a shell and partition by hand\"" 113 114CURARCH=$( uname -m ) 115case $CURARCH in 116 amd64|i386) # Booting ZFS Supported 117 PMODES="$PMODES ZFS \"Automatic Root-on-ZFS (Experimental)\"" 118 ;; 119 *) # Booting ZFS Unspported 120 ;; 121esac 122 123exec 3>&1 124PARTMODE=`echo $PMODES | xargs dialog --backtitle "FreeBSD Installer" \ 125 --title "Partitioning" \ 126 --menu "How would you like to partition your disk?" \ 127 0 0 0 2>&1 1>&3` 128if [ $? -eq $DIALOG_CANCEL ]; then exit 1; fi 129exec 3>&- 130 131case "$PARTMODE" in 132"Guided") # Guided 133 bsdinstall autopart || error 134 bsdinstall mount || error 135 ;; 136"Shell") # Shell 137 clear 138 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'." 139 sh 2>&1 140 ;; 141"Manual") # Manual 142 if f_isset debugFile; then 143 # Give partedit the path to our logfile so it can append 144 BSDINSTALL_LOG="${debugFile#+}" bsdinstall partedit || error 145 else 146 bsdinstall partedit || error 147 fi 148 bsdinstall mount || error 149 ;; 150"ZFS") # ZFS 151 bsdinstall zfsboot || error 152 bsdinstall mount || error 153 ;; 154*) 155 error 156 ;; 157esac 158 159if [ ! -z "$FETCH_DISTRIBUTIONS" ]; then 160 ALL_DISTRIBUTIONS="$DISTRIBUTIONS" 161 162 # Download to a directory in the new system as scratch space 163 BSDINSTALL_FETCHDEST="$BSDINSTALL_CHROOT/usr/freebsd-dist" 164 mkdir -p "$BSDINSTALL_FETCHDEST" || error 165 166 export DISTRIBUTIONS="$FETCH_DISTRIBUTIONS" 167 # Try to use any existing distfiles 168 if [ -d $BSDINSTALL_DISTDIR ]; then 169 DISTDIR_IS_UNIONFS=1 170 mount_nullfs -o union "$BSDINSTALL_FETCHDEST" "$BSDINSTALL_DISTDIR" 171 else 172 export DISTRIBUTIONS="MANIFEST $ALL_DISTRIBUTIONS" 173 export BSDINSTALL_DISTDIR="$BSDINSTALL_FETCHDEST" 174 fi 175 176 export FTP_PASSIVE_MODE=YES 177 bsdinstall distfetch || error 178 export DISTRIBUTIONS="$ALL_DISTRIBUTIONS" 179fi 180 181bsdinstall checksum || error 182bsdinstall distextract || error 183bsdinstall rootpass || error 184 185trap true SIGINT # This section is optional 186if [ "$NETCONFIG_DONE" != yes ]; then 187 bsdinstall netconfig # Don't check for errors -- the user may cancel 188fi 189bsdinstall time 190bsdinstall services 191 192dialog --backtitle "FreeBSD Installer" --title "Add User Accounts" --yesno \ 193 "Would you like to add users to the installed system now?" 0 0 && \ 194 bsdinstall adduser 195 196finalconfig() { 197 exec 3>&1 198 REVISIT=$(dialog --backtitle "FreeBSD Installer" \ 199 --title "Final Configuration" --no-cancel --menu \ 200 "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 \ 201 "Exit" "Apply configuration and exit installer" \ 202 "Add User" "Add a user to the system" \ 203 "Root Password" "Change root password" \ 204 "Hostname" "Set system hostname" \ 205 "Network" "Networking configuration" \ 206 "Services" "Set daemons to run on startup" \ 207 "Time Zone" "Set system timezone" \ 208 "Handbook" "Install FreeBSD Handbook (requires network)" 2>&1 1>&3) 209 exec 3>&- 210 211 case "$REVISIT" in 212 "Add User") 213 bsdinstall adduser 214 finalconfig 215 ;; 216 "Root Password") 217 bsdinstall rootpass 218 finalconfig 219 ;; 220 "Hostname") 221 bsdinstall hostname 222 finalconfig 223 ;; 224 "Network") 225 bsdinstall netconfig 226 finalconfig 227 ;; 228 "Services") 229 bsdinstall services 230 finalconfig 231 ;; 232 "Time Zone") 233 bsdinstall time 234 finalconfig 235 ;; 236 "Handbook") 237 bsdinstall docsinstall 238 finalconfig 239 ;; 240 esac 241} 242 243# Allow user to change his mind 244finalconfig 245 246trap error SIGINT # SIGINT is bad again 247bsdinstall config || error 248 249if [ ! -z "$BSDINSTALL_FETCHDEST" ]; then 250 [ "$BSDINSTALL_FETCHDEST" != "$BSDINSTALL_DISTDIR" ] && \ 251 umount "$BSDINSTALL_DISTDIR" 252 rm -rf "$BSDINSTALL_FETCHDEST" 253fi 254 255dialog --backtitle "FreeBSD Installer" --title "Manual Configuration" \ 256 --yesno "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 257if [ $? -eq 0 ]; then 258 clear 259 mount -t devfs devfs "$BSDINSTALL_CHROOT/dev" 260 echo This shell is operating in a chroot in the new system. \ 261 When finished making configuration changes, type \"exit\". 262 chroot "$BSDINSTALL_CHROOT" /bin/sh 2>&1 263fi 264 265bsdinstall entropy 266bsdinstall umount 267 268f_dprintf "Installation Completed at %s" "$( date )" 269 270################################################################################ 271# END 272################################################################################ 273