mirror of
https://github.com/opnsense/src.git
synced 2026-06-13 10:40:19 -04:00
bsdinstall: restore the environment when restarting
It is possible to restart the installation process upon errors, when installing normally through the `auto` script, or when installing a jail with the `jail` script. However, some values obtained interactively from the user or guessed by some scripts were kept in the environment when restarting the process; this made it impossible to re-run some steps as expected after the restart. For instance, if a bad choice of mirror was made in the `mirrorselect` phase, restarting the installer remembered the choice made, and would never prompt for a different one again. Rebooting was then the only easy way out of this situation. This change restores a pre-defined list of environment variables when restarting the installation process. PR: 266987 Reviewed by: emaste Approved by: philip (mentor) Sponsored by: The FreeBSD Foundation Differential revision: https://reviews.freebsd.org/D42281
This commit is contained in:
parent
66c2e68076
commit
9de72af2cc
2 changed files with 79 additions and 4 deletions
|
|
@ -34,6 +34,13 @@ f_include $BSDCFG_SHARE/dialog.subr
|
|||
|
||||
############################################################ GLOBALS
|
||||
|
||||
#
|
||||
# List of environment variables that may be defined by the user, but modified
|
||||
# during the installation process. They are then restored when restarting this
|
||||
# script.
|
||||
#
|
||||
user_env_vars="BSDINSTALL_DISTSITE DISTRIBUTIONS WORKAROUND_GPTACTIVE WORKAROUND_LENOVO ZFSBOOT_PARTITION_SCHEME"
|
||||
|
||||
#
|
||||
# Strings that should be moved to an i18n file and loaded with f_include_lang()
|
||||
#
|
||||
|
|
@ -90,6 +97,7 @@ error()
|
|||
--yes-label "$msg_restart" \
|
||||
--yesno "$prompt" $height $width
|
||||
then
|
||||
environment_restore
|
||||
exec $0
|
||||
# NOTREACHED
|
||||
fi
|
||||
|
|
@ -138,10 +146,35 @@ dialog_workaround()
|
|||
--yesno "$prompt" $height $width
|
||||
}
|
||||
|
||||
# environment_restore
|
||||
#
|
||||
# Restore a list of environment variables when this script is restarted.
|
||||
#
|
||||
environment_restore()
|
||||
{
|
||||
for var in $user_env_vars; do
|
||||
eval "if [ -n \"\${ORIG_$var}\" -o -z \"\${ORIG_$var-z}\" ]; then $var=\${ORIG_$var}; else unset $var; fi"
|
||||
done
|
||||
}
|
||||
|
||||
# environment_save
|
||||
#
|
||||
# Save any user-defined environment variable that may be modified during the
|
||||
# installation process. They are then restored when restarting this script.
|
||||
#
|
||||
environment_save()
|
||||
{
|
||||
for var in $user_env_vars; do
|
||||
eval "if [ -n \"\${$var}\" -o -z \"\${$var-z}\" ]; then ORIG_$var=\${$var}; else unset ORIG_$var; fi"
|
||||
done
|
||||
}
|
||||
|
||||
############################################################ MAIN
|
||||
|
||||
f_dprintf "Began Installation at %s" "$( date )"
|
||||
|
||||
environment_save
|
||||
|
||||
rm -rf $BSDINSTALL_TMPETC
|
||||
mkdir $BSDINSTALL_TMPETC
|
||||
|
||||
|
|
|
|||
|
|
@ -31,12 +31,23 @@
|
|||
BSDCFG_SHARE="/usr/share/bsdconfig"
|
||||
. $BSDCFG_SHARE/common.subr || exit 1
|
||||
|
||||
############################################################ MAIN
|
||||
############################################################ GLOBALS
|
||||
|
||||
: ${BSDDIALOG_OK=0}
|
||||
#
|
||||
# List of environment variables that may be defined by the user, but modified
|
||||
# during the installation process. They are then restored when restarting this
|
||||
# script.
|
||||
#
|
||||
user_env_vars="BSDINSTALL_DISTSITE DISTRIBUTIONS"
|
||||
|
||||
f_dprintf "Began Installation at %s" "$( date )"
|
||||
############################################################ FUNCTIONS
|
||||
|
||||
# error [$msg]
|
||||
#
|
||||
# Display generic error message when a script fails. An optional message
|
||||
# argument can preceed the generic message. User is given the choice of
|
||||
# restarting the installer or exiting.
|
||||
#
|
||||
error() {
|
||||
local msg
|
||||
if [ -n "$1" ]; then
|
||||
|
|
@ -48,7 +59,7 @@ error() {
|
|||
if [ $? -ne $BSDDIALOG_OK ]; then
|
||||
exit
|
||||
else
|
||||
[ -z "$MIRROR_BUTTON" ] || unset BSDINSTALL_DISTSITE
|
||||
environment_restore
|
||||
exec $0 $BSDINSTALL_CHROOT
|
||||
fi
|
||||
}
|
||||
|
|
@ -111,11 +122,42 @@ distbase() {
|
|||
bsdinstall distextract || error "Distribution extract failed"
|
||||
}
|
||||
|
||||
# environment_restore
|
||||
#
|
||||
# Restore a list of environment variables when this script is restarted.
|
||||
#
|
||||
environment_restore()
|
||||
{
|
||||
for var in $user_env_vars; do
|
||||
eval "if [ -n \"\${ORIG_$var}\" -o -z \"\${ORIG_$var-z}\" ]; then $var=\${ORIG_$var}; else unset $var; fi"
|
||||
done
|
||||
}
|
||||
|
||||
# environment_save
|
||||
#
|
||||
# Save any user-defined environment variable that may be modified during the
|
||||
# installation process. They are then restored when restarting this script.
|
||||
#
|
||||
environment_save()
|
||||
{
|
||||
for var in $user_env_vars; do
|
||||
eval "if [ -n \"\${$var}\" -o -z \"\${$var-z}\" ]; then ORIG_$var=\${$var}; else unset ORIG_$var; fi"
|
||||
done
|
||||
}
|
||||
|
||||
############################################################ MAIN
|
||||
|
||||
: ${BSDDIALOG_OK=0}
|
||||
|
||||
f_dprintf "Began Installation at %s" "$( date )"
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
error "Directory can not be empty\n\nUsage:\nbsdinstall jail directory"
|
||||
fi
|
||||
export BSDINSTALL_CHROOT=$1
|
||||
|
||||
environment_save
|
||||
|
||||
rm -rf $BSDINSTALL_TMPETC
|
||||
mkdir $BSDINSTALL_TMPETC
|
||||
mkdir -p $1 || error "mkdir failed for $1"
|
||||
|
|
|
|||
Loading…
Reference in a new issue