auto revision 257842
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: head/usr.sbin/bsdinstall/scripts/auto 257842 2013-11-08 09:57:03Z dteske $
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