2022-10-03 16:09:16 +00:00
#!/bin/sh
: ${BSDDIALOG_OK=0}
: ${BSDDIALOG_CANCEL=1}
: ${BSDDIALOG_HELP=2}
: ${BSDDIALOG_EXTRA=3}
: ${BSDDIALOG_ESC=5}
: ${BSDDIALOG_ERROR=255}
kbdcontrol -d >/dev/null 2>&1
if [ $? -eq 0 ]; then
# Syscons: use xterm, start interesting things on other VTYs
TERM=xterm
# Don't send ESC on function-key 62/63 (left/right command key)
kbdcontrol -f 62 '' > /dev/null 2>&1
kbdcontrol -f 63 '' > /dev/null 2>&1
if [ -z "$EXTERNAL_VTY_STARTED" ]; then
# Init will clean these processes up if/when the system
# goes multiuser
touch /tmp/bsdinstall_log
tail -f /tmp/bsdinstall_log > /dev/ttyv2 &
/usr/libexec/getty autologin ttyv3 &
EXTERNAL_VTY_STARTED=1
fi
else
# Serial or other console
echo
echo "Welcome to FreeBSD!"
echo
echo "Please choose the appropriate terminal type for your system."
echo "Common console types are:"
echo " ansi Standard ANSI terminal"
echo " vt100 VT100 or compatible terminal"
echo " xterm xterm terminal emulator (or compatible)"
echo
echo -n "Console type [vt100]: "
read TERM
TERM=${TERM:-vt100}
fi
export TERM
# Query terminal size; useful for serial lines.
resizewin -z
if [ -f /etc/installerconfig ]; then
bsdinstall release: Start installer on multiple consoles
Currently the installer is only started on the primary ("high level")
console. For systems where this is the video console and serial consoles
aren't of interest, and headless systems with just a serial console,
this works just fine, but for systems where both video and serial
consoles are present and meaningful this requires the user to select the
right primary console in loader, with the poor user experience of the
system appearing to hang if they leave the wrong one selected. This
notably differs from our multi-user behaviour of spawning getty on every
console, where the only issue with selecting the wrong primary console
is a quieter boot process until the login prompt appears (or the system
crashes).
Instead, use the newly-added runconsoles helper to run the installer on
every console (except for ttyv*, where only ttyv0 will be used). For
interactive installations, any of the consoles can be used, though only
one should be used at a time as no effort is made to avoid multiple
installations running at the same time clobbering each other. If the
Live CD option is selected, the other installers (which should, if the
user is well-behaved, be sitting at the welcome screen) will be killed.
If an automated install is in use, the primary console will be used to
display its output, and the others will direct the user to the primary
console.
Reviewed by: brooks, gjb
Differential Revision: https://reviews.freebsd.org/D36805
2022-10-03 16:09:17 +00:00
if [ "$1" != "primary" ]; then
bsddialog --backtitle "FreeBSD Installer" --title "Installing" --msgbox "FreeBSD is being installed from a script; please use the primary console." 0 0
. "$0"
elif bsdinstall script /etc/installerconfig; then
2022-10-03 16:09:16 +00:00
bsddialog --backtitle "FreeBSD Installer" --title "Complete" --no-cancel --ok-label "Reboot" --pause "Installation of FreeBSD complete! Rebooting in 10 seconds" 10 30 10
reboot
else
bsddialog --backtitle "FreeBSD Installer" --title "Error" --textbox /tmp/bsdinstall_log 0 0
fi
exit
fi
bsddialog --backtitle "FreeBSD Installer" --title "Welcome" --extra-button --extra-label "Shell" --ok-label "Install" --cancel-label "Live CD" --yesno "Welcome to FreeBSD! Would you like to begin an installation or use the live CD?" 0 0
case $? in
$BSDDIALOG_OK) # Install
# If not netbooting, have the installer configure the network
dlv=`/sbin/sysctl -n vfs.nfs.diskless_valid 2> /dev/null`
if [ ${dlv:=0} -eq 0 -a ! -f /etc/diskless ]; then
BSDINSTALL_CONFIGCURRENT=yes; export BSDINSTALL_CONFIGCURRENT
fi
trap true SIGINT # Ignore cntrl-C here
bsdinstall
if [ $? -eq 0 ]; then
bsddialog --backtitle "FreeBSD Installer" --title "Complete" --ok-label "Reboot" --extra-button --extra-label "Shutdown" --cancel-label "Live CD" --yesno "Installation of FreeBSD complete! Would you like to reboot into the installed system now?" 0 0
case $? in
$BSDDIALOG_OK) # Reboot
reboot
;;
$BSDDIALOG_EXTRA) # Shutdown
shutdown -p now
2022-10-06 19:04:04 +00:00
# shutdown(8) daemonizes, with the actual signal to
# init(8) happening in the child, but if we exit the
# script then runconsoles will clean up its children
# thinking we're trying to go multiuser (and if the
# user has disabled multiple console support we'll
# still start trying to go multi-user, which gives
# confusing output on the console if the daemon is slow
# to run). Thus we spin while the daemon runs.
while true; do
sleep 1
done
2022-10-03 16:09:16 +00:00
;;
$BSDDIALOG_CANCEL) # Live CD
exit 0
;;
esac
else
. "$0"
fi
;;
$BSDDIALOG_CANCEL) # Live CD
exit 0
;;
$BSDDIALOG_EXTRA) # Shell
clear
echo "When finished, type 'exit' to return to the installer."
/bin/sh
. "$0"
;;
esac