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 -f $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` || exit 1 124exec 3>&- 125 126case "$PARTMODE" in 127"Guided") # Guided 128 bsdinstall autopart || error 129 bsdinstall mount || error 130 ;; 131"Shell") # Shell 132 clear 133 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'." 134 sh 2>&1 135 ;; 136"Manual") # Manual 137 if f_isset debugFile; then 138 # Give partedit the path to our logfile so it can append 139 BSDINSTALL_LOG="${debugFile#+}" bsdinstall partedit || error 140 else 141 bsdinstall partedit || error 142 fi 143 bsdinstall mount || error 144 ;; 145"ZFS") # ZFS 146 bsdinstall zfsboot || error 147 bsdinstall mount || error 148 ;; 149*) 150 error 151 ;; 152esac 153 154if [ ! -z "$FETCH_DISTRIBUTIONS" ]; then 155 ALL_DISTRIBUTIONS="$DISTRIBUTIONS" 156 157 # Download to a directory in the new system as scratch space 158 BSDINSTALL_FETCHDEST="$BSDINSTALL_CHROOT/usr/freebsd-dist" 159 mkdir -p "$BSDINSTALL_FETCHDEST" || error 160 161 export DISTRIBUTIONS="$FETCH_DISTRIBUTIONS" 162 # Try to use any existing distfiles 163 if [ -d $BSDINSTALL_DISTDIR ]; then 164 DISTDIR_IS_UNIONFS=1 165 mount_nullfs -o union "$BSDINSTALL_FETCHDEST" "$BSDINSTALL_DISTDIR" 166 else 167 export DISTRIBUTIONS="MANIFEST $ALL_DISTRIBUTIONS" 168 export BSDINSTALL_DISTDIR="$BSDINSTALL_FETCHDEST" 169 fi 170 171 export FTP_PASSIVE_MODE=YES 172 bsdinstall distfetch || error 173 export DISTRIBUTIONS="$ALL_DISTRIBUTIONS" 174fi 175 176bsdinstall checksum || error 177bsdinstall distextract || error 178bsdinstall rootpass || error 179 180trap true SIGINT # This section is optional 181if [ "$NETCONFIG_DONE" != yes ]; then 182 bsdinstall netconfig # Don't check for errors -- the user may cancel 183fi 184bsdinstall time 185bsdinstall services 186 187dialog --backtitle "FreeBSD Installer" --title "Add User Accounts" --yesno \ 188 "Would you like to add users to the installed system now?" 0 0 && \ 189 bsdinstall adduser 190 191finalconfig() { 192 exec 3>&1 193 REVISIT=$(dialog --backtitle "FreeBSD Installer" \ 194 --title "Final Configuration" --no-cancel --menu \ 195 "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 \ 196 "Exit" "Apply configuration and exit installer" \ 197 "Add User" "Add a user to the system" \ 198 "Root Password" "Change root password" \ 199 "Hostname" "Set system hostname" \ 200 "Network" "Networking configuration" \ 201 "Services" "Set daemons to run on startup" \ 202 "Time Zone" "Set system timezone" \ 203 "Handbook" "Install FreeBSD Handbook (requires network)" 2>&1 1>&3) 204 exec 3>&- 205 206 case "$REVISIT" in 207 "Add User") 208 bsdinstall adduser 209 finalconfig 210 ;; 211 "Root Password") 212 bsdinstall rootpass 213 finalconfig 214 ;; 215 "Hostname") 216 bsdinstall hostname 217 finalconfig 218 ;; 219 "Network") 220 bsdinstall netconfig 221 finalconfig 222 ;; 223 "Services") 224 bsdinstall services 225 finalconfig 226 ;; 227 "Time Zone") 228 bsdinstall time 229 finalconfig 230 ;; 231 "Handbook") 232 bsdinstall docsinstall 233 finalconfig 234 ;; 235 esac 236} 237 238# Allow user to change his mind 239finalconfig 240 241trap error SIGINT # SIGINT is bad again 242bsdinstall config || error 243 244if [ ! -z "$BSDINSTALL_FETCHDEST" ]; then 245 [ "$BSDINSTALL_FETCHDEST" != "$BSDINSTALL_DISTDIR" ] && \ 246 umount "$BSDINSTALL_DISTDIR" 247 rm -rf "$BSDINSTALL_FETCHDEST" 248fi 249 250dialog --backtitle "FreeBSD Installer" --title "Manual Configuration" \ 251 --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 252if [ $? -eq 0 ]; then 253 clear 254 mount -t devfs devfs "$BSDINSTALL_CHROOT/dev" 255 echo This shell is operating in a chroot in the new system. \ 256 When finished making configuration changes, type \"exit\". 257 chroot "$BSDINSTALL_CHROOT" /bin/sh 2>&1 258fi 259 260bsdinstall entropy 261bsdinstall umount 262 263f_dprintf "Installation Completed at %s" "$( date )" 264 265################################################################################ 266# END 267################################################################################ 268