+ Add a `-D FILE" command-line option for overriding the path to the bsdinstall log file (BSDINSTALL_LOG env var). + Document new `-D FILE' in the man page for bsdinstall. + If FILE in `-D FILE' begins with a +, debug output goes to stdout (interleaved between dialog(1) invocations/output) as well as to FILE (minus the leading + of course). + If BSDINSTALL_LOG cannot be written, then debugging is disabled (except in the case of a leading + in the pathname, wherein debug will still be printed to stdout). + Update source code formatting style. + Fix a dangling participle ("Begun ..." -> "Began ...") + Rewrite the docsinstall script (was necessary to abate direct dependency on BSDINSTALL_LOG (instead, use fault-tolerant bsdconfig framework which displays appropriate errors for package management). NB: docsinstall is still using pkg(8) after this change. + Add additional debug output for dhclient/rtsol/wpa_cliscan + Display script errors in a textbox rather than just on stdout + Update many coments. + Add new f_show_err() API call (like f_show_msg but changes the dialog title to "Error")(see bsdconfig's `common.subr'). + Add new f_eval_catch() API call for executing a command via eval but not before logging the command to debug. Several example cases documented in API header for function in bsdconfig's `common.subr'. + Fix dialog auto-sizing when launched as an rvalue to a pipe for indirected scripts (previously would default to 24x80 sizing in this case, now it can autosize to full size even when in a pipe chain). + Fix bug in f_snprintf if $format argument began with "-"; printf would misinterpret as a flag. (this is in bsdcofig's `strings.subr'). + Add accompanying f_sprintf() and f_vsprintf() to go along with already existing f_snprintf() and f_vsnprintf() (see bsdconfig's `strings.subr'). + Remove some unnecessary default ZFS datasets from the automatic "zfsboot" script. Such as: /usr/ports/distfiles /usr/ports/packages /usr/obj /var/db /var/empty /var/mail and /var/run (these can all be created as-needed once the system is installed). + Remove setuid=off for /usr/home (as discussed from last round of CFT). + Fix some i18n string violations in "zfsboot". + Bolster debugging output in "zfsboot". + Fix some string quoting issues in "zfsboot". + Fix some variable scope issues in "zfsboot". + Change "Create" to "Install" in "zfsboot" main menu. + Increase error checking in "zfsboot" (type-check arguments and such). + Add call to "graid destroy" killing automatic metadata (part of the series of pedantic destructions we do when bootstrapping a new/naked disk). + Make judicious use of new f_eval_catch() in "zfsboot". + Fixup some variable names for consistency (zfsboot). + Fix an underride syntax parameter expansion folly (zfsboot). + Confirm layout if not explicitly chosen when blindly proceeding (no longer have to touch anything on the ZFS menu if it scares you, just choose the omnibus "Install" option at the top and you'll be prompted to select vdev type and disks in the layout confirmation dialog). + Change numbered menu items to alphabetic for more efficient navigation. + Consolidate vdev selection and disk selection into a single stateful menu which performs validation and allows backing out to each previous menu as you go deeper. + Redesign the ``Last Chance'' dialog (still using the same colors, but make it conform to a tolerable width and make disks appear in a block- quote style indented region). + Fix a bug wherein we used the a lowercase variable name by accident (actual variable name declared as all-uppercase) at the time of initializing fstab(5) (not believed to cause any issues though). + Update the geli setup infobox for each provider being initialized (not just at the onset -- since each ``geli init'' causes kernel messages to push our infobox off-screen). Reviewed by: Allan Jude <freebsd@allanjude.com> Discussed on: -current MFC after: 3 days
269 lines
8.1 KiB
Bash
Executable File
269 lines
8.1 KiB
Bash
Executable File
#!/bin/sh
|
|
#-
|
|
# Copyright (c) 2011 Nathan Whitehorn
|
|
# Copyright (c) 2013 Devin Teske
|
|
# All rights reserved.
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions
|
|
# are met:
|
|
# 1. Redistributions of source code must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer.
|
|
# 2. Redistributions in binary form must reproduce the above copyright
|
|
# notice, this list of conditions and the following disclaimer in the
|
|
# documentation and/or other materials provided with the distribution.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
# SUCH DAMAGE.
|
|
#
|
|
# $FreeBSD$
|
|
#
|
|
############################################################ INCLUDES
|
|
|
|
BSDCFG_SHARE="/usr/share/bsdconfig"
|
|
. $BSDCFG_SHARE/common.subr || exit 1
|
|
|
|
############################################################ FUNCTIONS
|
|
|
|
error() {
|
|
test -n "$DISTDIR_IS_UNIONFS" && umount -f $BSDINSTALL_DISTDIR
|
|
test -f $PATH_FSTAB && bsdinstall umount
|
|
dialog --backtitle "FreeBSD Installer" --title "Abort" \
|
|
--no-label "Exit" --yes-label "Restart" --yesno \
|
|
"An installation step has been aborted. Would you like to restart the installation or exit the installer?" 0 0
|
|
if [ $? -ne 0 ]; then
|
|
exit 1
|
|
else
|
|
exec $0
|
|
fi
|
|
}
|
|
|
|
############################################################ MAIN
|
|
|
|
f_dprintf "Began Installation at %s" "$( date )"
|
|
|
|
rm -rf $BSDINSTALL_TMPETC
|
|
mkdir $BSDINSTALL_TMPETC
|
|
|
|
trap true SIGINT # This section is optional
|
|
bsdinstall keymap
|
|
|
|
trap error SIGINT # Catch cntrl-C here
|
|
bsdinstall hostname || error
|
|
|
|
export DISTRIBUTIONS="base.txz kernel.txz"
|
|
if [ -f $BSDINSTALL_DISTDIR/MANIFEST ]; then
|
|
DISTMENU=`awk -F'\t' '!/^(kernel|base)/{print $4,$5,$6}' $BSDINSTALL_DISTDIR/MANIFEST`
|
|
|
|
exec 3>&1
|
|
EXTRA_DISTS=$( eval dialog \
|
|
--backtitle \"FreeBSD Installer\" \
|
|
--title \"Distribution Select\" --nocancel --separate-output \
|
|
--checklist \"Choose optional system components to install:\" \
|
|
0 0 0 $DISTMENU \
|
|
2>&1 1>&3 )
|
|
for dist in $EXTRA_DISTS; do
|
|
export DISTRIBUTIONS="$DISTRIBUTIONS $dist.txz"
|
|
done
|
|
fi
|
|
|
|
FETCH_DISTRIBUTIONS=""
|
|
for dist in $DISTRIBUTIONS; do
|
|
if [ ! -f $BSDINSTALL_DISTDIR/$dist ]; then
|
|
FETCH_DISTRIBUTIONS="$FETCH_DISTRIBUTIONS $dist"
|
|
fi
|
|
done
|
|
FETCH_DISTRIBUTIONS=`echo $FETCH_DISTRIBUTIONS` # Trim white space
|
|
|
|
if [ -n "$FETCH_DISTRIBUTIONS" -a -n "$BSDINSTALL_CONFIGCURRENT" ]; then
|
|
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
|
|
bsdinstall netconfig || error
|
|
NETCONFIG_DONE=yes
|
|
fi
|
|
|
|
if [ -n "$FETCH_DISTRIBUTIONS" ]; then
|
|
exec 3>&1
|
|
BSDINSTALL_DISTSITE=$(`dirname $0`/mirrorselect 2>&1 1>&3)
|
|
MIRROR_BUTTON=$?
|
|
exec 3>&-
|
|
test $MIRROR_BUTTON -eq 0 || error
|
|
export BSDINSTALL_DISTSITE
|
|
fi
|
|
|
|
rm $PATH_FSTAB
|
|
touch $PATH_FSTAB
|
|
|
|
PMODES="\
|
|
Guided \"Partitioning Tool (Recommended for Beginners)\" \
|
|
Manual \"Manually Configure Partitions (Expert)\" \
|
|
Shell \"Open a shell and partition by hand\""
|
|
|
|
CURARCH=$( uname -m )
|
|
case $CURARCH in
|
|
amd64|i386) # Booting ZFS Supported
|
|
PMODES="$PMODES ZFS \"Automatic Root-on-ZFS (Experimental)\""
|
|
;;
|
|
*) # Booting ZFS Unspported
|
|
;;
|
|
esac
|
|
|
|
exec 3>&1
|
|
PARTMODE=`echo $PMODES | xargs dialog --backtitle "FreeBSD Installer" \
|
|
--title "Partitioning" \
|
|
--menu "How would you like to partition your disk?" \
|
|
0 0 0 2>&1 1>&3`
|
|
if [ $? -eq $DIALOG_CANCEL ]; then exit 1; fi
|
|
exec 3>&-
|
|
|
|
case "$PARTMODE" in
|
|
"Guided") # Guided
|
|
bsdinstall autopart || error
|
|
bsdinstall mount || error
|
|
;;
|
|
"Shell") # Shell
|
|
clear
|
|
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'."
|
|
sh 2>&1
|
|
;;
|
|
"Manual") # Manual
|
|
if f_isset debugFile; then
|
|
# Give partedit the path to our logfile so it can append
|
|
BSDINSTALL_LOG="${debugFile#+}" bsdinstall partedit || error
|
|
else
|
|
bsdinstall partedit || error
|
|
fi
|
|
bsdinstall mount || error
|
|
;;
|
|
"ZFS") # ZFS
|
|
bsdinstall zfsboot || error
|
|
bsdinstall mount || error
|
|
;;
|
|
*)
|
|
error
|
|
;;
|
|
esac
|
|
|
|
if [ ! -z "$FETCH_DISTRIBUTIONS" ]; then
|
|
ALL_DISTRIBUTIONS="$DISTRIBUTIONS"
|
|
|
|
# Download to a directory in the new system as scratch space
|
|
BSDINSTALL_FETCHDEST="$BSDINSTALL_CHROOT/usr/freebsd-dist"
|
|
mkdir -p "$BSDINSTALL_FETCHDEST" || error
|
|
|
|
export DISTRIBUTIONS="$FETCH_DISTRIBUTIONS"
|
|
# Try to use any existing distfiles
|
|
if [ -d $BSDINSTALL_DISTDIR ]; then
|
|
DISTDIR_IS_UNIONFS=1
|
|
mount_nullfs -o union "$BSDINSTALL_FETCHDEST" "$BSDINSTALL_DISTDIR"
|
|
else
|
|
export DISTRIBUTIONS="MANIFEST $ALL_DISTRIBUTIONS"
|
|
export BSDINSTALL_DISTDIR="$BSDINSTALL_FETCHDEST"
|
|
fi
|
|
|
|
export FTP_PASSIVE_MODE=YES
|
|
bsdinstall distfetch || error
|
|
export DISTRIBUTIONS="$ALL_DISTRIBUTIONS"
|
|
fi
|
|
|
|
bsdinstall checksum || error
|
|
bsdinstall distextract || error
|
|
bsdinstall rootpass || error
|
|
|
|
trap true SIGINT # This section is optional
|
|
if [ "$NETCONFIG_DONE" != yes ]; then
|
|
bsdinstall netconfig # Don't check for errors -- the user may cancel
|
|
fi
|
|
bsdinstall time
|
|
bsdinstall services
|
|
|
|
dialog --backtitle "FreeBSD Installer" --title "Add User Accounts" --yesno \
|
|
"Would you like to add users to the installed system now?" 0 0 && \
|
|
bsdinstall adduser
|
|
|
|
finalconfig() {
|
|
exec 3>&1
|
|
REVISIT=$(dialog --backtitle "FreeBSD Installer" \
|
|
--title "Final Configuration" --no-cancel --menu \
|
|
"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 \
|
|
"Exit" "Apply configuration and exit installer" \
|
|
"Add User" "Add a user to the system" \
|
|
"Root Password" "Change root password" \
|
|
"Hostname" "Set system hostname" \
|
|
"Network" "Networking configuration" \
|
|
"Services" "Set daemons to run on startup" \
|
|
"Time Zone" "Set system timezone" \
|
|
"Handbook" "Install FreeBSD Handbook (requires network)" 2>&1 1>&3)
|
|
exec 3>&-
|
|
|
|
case "$REVISIT" in
|
|
"Add User")
|
|
bsdinstall adduser
|
|
finalconfig
|
|
;;
|
|
"Root Password")
|
|
bsdinstall rootpass
|
|
finalconfig
|
|
;;
|
|
"Hostname")
|
|
bsdinstall hostname
|
|
finalconfig
|
|
;;
|
|
"Network")
|
|
bsdinstall netconfig
|
|
finalconfig
|
|
;;
|
|
"Services")
|
|
bsdinstall services
|
|
finalconfig
|
|
;;
|
|
"Time Zone")
|
|
bsdinstall time
|
|
finalconfig
|
|
;;
|
|
"Handbook")
|
|
bsdinstall docsinstall
|
|
finalconfig
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Allow user to change his mind
|
|
finalconfig
|
|
|
|
trap error SIGINT # SIGINT is bad again
|
|
bsdinstall config || error
|
|
|
|
if [ ! -z "$BSDINSTALL_FETCHDEST" ]; then
|
|
[ "$BSDINSTALL_FETCHDEST" != "$BSDINSTALL_DISTDIR" ] && \
|
|
umount "$BSDINSTALL_DISTDIR"
|
|
rm -rf "$BSDINSTALL_FETCHDEST"
|
|
fi
|
|
|
|
dialog --backtitle "FreeBSD Installer" --title "Manual Configuration" \
|
|
--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
|
|
if [ $? -eq 0 ]; then
|
|
clear
|
|
mount -t devfs devfs "$BSDINSTALL_CHROOT/dev"
|
|
echo This shell is operating in a chroot in the new system. \
|
|
When finished making configuration changes, type \"exit\".
|
|
chroot "$BSDINSTALL_CHROOT" /bin/sh 2>&1
|
|
fi
|
|
|
|
bsdinstall entropy
|
|
bsdinstall umount
|
|
|
|
f_dprintf "Installation Completed at %s" "$( date )"
|
|
|
|
################################################################################
|
|
# END
|
|
################################################################################
|