diff --git a/release/rc.local b/release/rc.local index 943c175ddd52..a2c1676313c5 100755 --- a/release/rc.local +++ b/release/rc.local @@ -1,7 +1,57 @@ #!/bin/sh -# $FreeBSD$ +# +# SPDX-License-Identifier: BSD-2-Clause +# +# Copyright (c) 2022 Jessica Clarke +# +# 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. +# + +bsdinstall_multicons_disabled() +{ + local var value + + var=bsdinstall.multicons_disable + value=`kenv -q $var` + case "${value:-NO}" in + [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1) + return 0 + ;; + [Nn][Oo]|[Ff][Aa][Ll][Ss][Ee]|[Oo][Ff][Ff]|0) + return 1 + ;; + *) + warn "$var is not set properly, ignoring" + return 1 + ;; + esac +} # resolv.conf from DHCP ends up in here, so make sure the directory exists mkdir /tmp/bsdinstall_etc -/usr/libexec/bsdinstall/startbsdinstall +if bsdinstall_multicons_disabled; then + /usr/libexec/bsdinstall/startbsdinstall primary +else + echo + /usr/libexec/bsdinstall/runconsoles /usr/libexec/bsdinstall/startbsdinstall % +fi diff --git a/usr.sbin/bsdinstall/startbsdinstall b/usr.sbin/bsdinstall/startbsdinstall index 3a5a07e85b4d..0a8207df9bd8 100644 --- a/usr.sbin/bsdinstall/startbsdinstall +++ b/usr.sbin/bsdinstall/startbsdinstall @@ -1,97 +1,100 @@ #!/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 - if bsdinstall script /etc/installerconfig; then + 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 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 ;; $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