bsdinstall: zfsboot: Prompt user for zpool name if the pool already exists

If one install FreeBSD on multiple disks (say 13 and CURRENT) the first created
pool will always be used.
Prompt the user for a new pool name if we detect that the default or supplied one
already exists.

Reviewed by:	imp
MFC after:      2 weeks
Sponsored by:   Beckhoff Automation GmbH & Co. KG
Differential Revision:	https://reviews.freebsd.org/D33331
This commit is contained in:
Emmanuel Vadot 2021-12-08 11:37:50 +01:00
parent 40c928e7b8
commit 9935b0e8ea

View File

@ -1573,6 +1573,28 @@ dialog_menu_diskinfo()
return $SUCCESS
}
dialog_zpool_name()
{
local prompt="$* is already taken, please enter a name for the ZFS pool \
(Or confirm using the same name by just pressing enter)"
local hline=
local value="$*"
local height width
f_dialog_inputbox_size height width \
"$DIALOG_TITLE" "$DIALOG_BACKTITLE" "$prompt" "$value" "$hline"
$DIALOG \
--title "$DIALOG_TITLE" \
--backtitle "$DIALOG_BACKTITLE" \
--hline "$hline" \
--ok-label "Ok" \
--no-cancel \
--inputbox "$prompt" \
$height $width "$value" \
2>&1 >&$DIALOG_TERMINAL_PASSTHRU_FD
}
############################################################ MAIN
#
@ -1591,6 +1613,16 @@ f_dprintf "BSDINSTALL_CHROOT=[%s]" "$BSDINSTALL_CHROOT"
f_dprintf "BSDINSTALL_TMPETC=[%s]" "$BSDINSTALL_TMPETC"
f_dprintf "FSTAB_FMT=[%s]" "$FSTAB_FMT"
pools=$(zpool import | awk '$1 == "pool:" { print $2}')
for pool in ${pools}; do
f_dprintf "Checking ${pool} against ${ZFSBOOT_POOL_NAME}"
if [ "${pool}" = "${ZFSBOOT_POOL_NAME}" ]; then
f_dprintf "Pool ${pool} already taken"
ZFSBOOT_POOL_NAME=$(dialog_zpool_name "${ZFSBOOT_POOL_NAME}")
break;
fi
done
#
# Determine default boot type
#