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 52f_dprintf "Began Installation at %s" "$( date )" 53 54rm -rf $BSDINSTALL_TMPETC 55mkdir $BSDINSTALL_TMPETC 56 57trap true SIGINT # This section is optional 58bsdinstall keymap 59 60trap error SIGINT # Catch cntrl-C here 61bsdinstall hostname || error 62 63export DISTRIBUTIONS="base.txz kernel.txz" 64if [ -f $BSDINSTALL_DISTDIR/MANIFEST ]; then 65 DISTMENU=`awk -F'\t' '!/^(kernel|base)/{print $4,$5,$6}' $BSDINSTALL_DISTDIR/MANIFEST` 66 67 exec 3>&1 68 EXTRA_DISTS=$( eval dialog \ 69 --backtitle \"FreeBSD Installer\" \ 70 --title \"Distribution Select\" --nocancel --separate-output \ 71 --checklist \"Choose optional system components to install:\" \ 72 0 0 0 $DISTMENU \ 73 2>&1 1>&3 ) 74 for dist in $EXTRA_DISTS; do 75 export DISTRIBUTIONS="$DISTRIBUTIONS $dist.txz" 76 done 77fi 78 79FETCH_DISTRIBUTIONS="" 80for dist in $DISTRIBUTIONS; do 81 if [ ! -f $BSDINSTALL_DISTDIR/$dist ]; then 82 FETCH_DISTRIBUTIONS="$FETCH_DISTRIBUTIONS $dist" 83 fi 84done 85FETCH_DISTRIBUTIONS=`echo $FETCH_DISTRIBUTIONS` # Trim white space 86 87if [ -n "$FETCH_DISTRIBUTIONS" -a -n "$BSDINSTALL_CONFIGCURRENT" ]; then 88 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 89 bsdinstall netconfig || error 90 NETCONFIG_DONE=yes 91fi 92 93if [ -n "$FETCH_DISTRIBUTIONS" ]; then 94 exec 3>&1 95 BSDINSTALL_DISTSITE=$(`dirname $0`/mirrorselect 2>&1 1>&3) 96 MIRROR_BUTTON=$? 97 exec 3>&- 98 test $MIRROR_BUTTON -eq 0 || error 99 export BSDINSTALL_DISTSITE 100fi 101 102rm $PATH_FSTAB 103touch $PATH_FSTAB 104 105PMODES="\ 106Guided \"Partitioning Tool (Recommended for Beginners)\" \ 107Manual \"Manually Configure Partitions (Expert)\" \ 108Shell \"Open a shell and partition by hand\"" 109 110CURARCH=$( uname -m ) 111case $CURARCH in 112 amd64|i386) # Booting ZFS Supported 113 PMODES="$PMODES ZFS \"Automatic Root-on-ZFS (Experimental)\"" 114 ;; 115 *) # Booting ZFS Unspported 116 ;; 117esac 118 119exec 3>&1 120PARTMODE=`echo $PMODES | xargs dialog --backtitle "FreeBSD Installer" \ 121 --title "Partitioning" \ 122 --menu "How would you like to partition your disk?" \ 123 0 0 0 2>&1 1>&3` 124if [ $? -eq $DIALOG_CANCEL ]; then exit 1; fi 125exec 3>&- 126 127case "$PARTMODE" in 128"Guided") # Guided 129 bsdinstall autopart || error 130 bsdinstall mount || error 131 ;; 132"Shell") # Shell 133 clear 134 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'." 135 sh 2>&1 136 ;; 137"Manual") # Manual 138 if f_isset debugFile; then 139 # Give partedit the path to our logfile so it can append 140 BSDINSTALL_LOG="${debugFile#+}" bsdinstall partedit || error 141 else 142 bsdinstall partedit || error 143 fi 144 bsdinstall mount || error 145 ;; 146"ZFS") # ZFS 147 bsdinstall zfsboot || error 148 bsdinstall mount || error 149 ;; 150*) 151 error 152 ;; 153esac 154 155if [ ! -z "$FETCH_DISTRIBUTIONS" ]; then 156 ALL_DISTRIBUTIONS="$DISTRIBUTIONS" 157 158 # Download to a directory in the new system as scratch space 159 BSDINSTALL_FETCHDEST="$BSDINSTALL_CHROOT/usr/freebsd-dist" 160 mkdir -p "$BSDINSTALL_FETCHDEST" || error 161 162 export DISTRIBUTIONS="$FETCH_DISTRIBUTIONS" 163 # Try to use any existing distfiles 164 if [ -d $BSDINSTALL_DISTDIR ]; then 165 DISTDIR_IS_UNIONFS=1 166 mount_nullfs -o union "$BSDINSTALL_FETCHDEST" "$BSDINSTALL_DISTDIR" 167 else 168 export DISTRIBUTIONS="MANIFEST $ALL_DISTRIBUTIONS" 169 export BSDINSTALL_DISTDIR="$BSDINSTALL_FETCHDEST" 170 fi 171 172 export FTP_PASSIVE_MODE=YES 173 bsdinstall distfetch || error 174 export DISTRIBUTIONS="$ALL_DISTRIBUTIONS" 175fi 176 177bsdinstall checksum || error 178bsdinstall distextract || error 179bsdinstall rootpass || error 180 181trap true SIGINT # This section is optional 182if [ "$NETCONFIG_DONE" != yes ]; then 183 bsdinstall netconfig # Don't check for errors -- the user may cancel 184fi 185bsdinstall time 186bsdinstall services 187 188dialog --backtitle "FreeBSD Installer" --title "Add User Accounts" --yesno \ 189 "Would you like to add users to the installed system now?" 0 0 && \ 190 bsdinstall adduser 191 192finalconfig() { 193 exec 3>&1 194 REVISIT=$(dialog --backtitle "FreeBSD Installer" \ 195 --title "Final Configuration" --no-cancel --menu \ 196 "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 \ 197 "Exit" "Apply configuration and exit installer" \ 198 "Add User" "Add a user to the system" \ 199 "Root Password" "Change root password" \ 200 "Hostname" "Set system hostname" \ 201 "Network" "Networking configuration" \ 202 "Services" "Set daemons to run on startup" \ 203 "Time Zone" "Set system timezone" \ 204 "Handbook" "Install FreeBSD Handbook (requires network)" 2>&1 1>&3) 205 exec 3>&- 206 207 case "$REVISIT" in 208 "Add User") 209 bsdinstall adduser 210 finalconfig 211 ;; 212 "Root Password") 213 bsdinstall rootpass 214 finalconfig 215 ;; 216 "Hostname") 217 bsdinstall hostname 218 finalconfig 219 ;; 220 "Network") 221 bsdinstall netconfig 222 finalconfig 223 ;; 224 "Services") 225 bsdinstall services 226 finalconfig 227 ;; 228 "Time Zone") 229 bsdinstall time 230 finalconfig 231 ;; 232 "Handbook") 233 bsdinstall docsinstall 234 finalconfig 235 ;; 236 esac 237} 238 239# Allow user to change his mind 240finalconfig 241 242trap error SIGINT # SIGINT is bad again 243bsdinstall config || error 244 245if [ ! -z "$BSDINSTALL_FETCHDEST" ]; then 246 [ "$BSDINSTALL_FETCHDEST" != "$BSDINSTALL_DISTDIR" ] && \ 247 umount "$BSDINSTALL_DISTDIR" 248 rm -rf "$BSDINSTALL_FETCHDEST" 249fi 250 251dialog --backtitle "FreeBSD Installer" --title "Manual Configuration" \ 252 --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 253if [ $? -eq 0 ]; then 254 clear 255 mount -t devfs devfs "$BSDINSTALL_CHROOT/dev" 256 echo This shell is operating in a chroot in the new system. \ 257 When finished making configuration changes, type \"exit\". 258 chroot "$BSDINSTALL_CHROOT" /bin/sh 2>&1 259fi 260 261bsdinstall entropy 262bsdinstall umount 263 264f_dprintf "Installation Completed at %s" "$( date )" 265 266################################################################################ 267# END 268################################################################################ 269