summaryrefslogtreecommitdiffstats
path: root/usr.sbin/bsdinstall
diff options
context:
space:
mode:
authornwhitehorn <nwhitehorn@FreeBSD.org>2012-01-18 15:59:23 +0000
committernwhitehorn <nwhitehorn@FreeBSD.org>2012-01-18 15:59:23 +0000
commit3ec7d904752caa8e0c0ae91d8c3ef33cdbcf23ec (patch)
treea7ecc9ad8a8830974ec0fc13c93959a3e5b628d3 /usr.sbin/bsdinstall
parent747971918db06b55bdfaea361deddb578f6be5a0 (diff)
downloadFreeBSD-src-3ec7d904752caa8e0c0ae91d8c3ef33cdbcf23ec.zip
FreeBSD-src-3ec7d904752caa8e0c0ae91d8c3ef33cdbcf23ec.tar.gz
Warn if trying to install over an existing partition, which usually fails
anyway due to libarchive not being able to overwrite schg flags. PR: bin/164278 MFC after: 4 days
Diffstat (limited to 'usr.sbin/bsdinstall')
-rw-r--r--usr.sbin/bsdinstall/partedit/partedit.c26
1 files changed, 22 insertions, 4 deletions
diff --git a/usr.sbin/bsdinstall/partedit/partedit.c b/usr.sbin/bsdinstall/partedit/partedit.c
index cddf790..2436f08 100644
--- a/usr.sbin/bsdinstall/partedit/partedit.c
+++ b/usr.sbin/bsdinstall/partedit/partedit.c
@@ -240,23 +240,41 @@ delete_part_metadata(const char *name)
static int
validate_setup(void)
{
- struct partition_metadata *md;
- int root_found = FALSE;
+ struct partition_metadata *md, *root = NULL;
+ int cancel;
TAILQ_FOREACH(md, &part_metadata, metadata) {
if (md->fstab != NULL && strcmp(md->fstab->fs_file, "/") == 0)
- root_found = TRUE;
+ root = md;
/* XXX: Check for duplicate mountpoints */
}
- if (!root_found) {
+ if (root == NULL) {
dialog_msgbox("Error", "No root partition was found. "
"The root FreeBSD partition must have a mountpoint of '/'.",
0, 0, TRUE);
return (FALSE);
}
+ /*
+ * Check for root partitions that we aren't formatting, which is
+ * usually a mistake
+ */
+ if (root->newfs == NULL) {
+ dialog_vars.defaultno = TRUE;
+ cancel = dialog_yesno("Warning", "The chosen root partition "
+ "has a preexisting filesystem. If it contains an existing "
+ "FreeBSD system, please update it with freebsd-update "
+ "instead of installing a new system on it. The partition "
+ "can also be erased by pressing \"No\" and then deleting "
+ "and recreating it. Are you sure you want to proceed?",
+ 0, 0);
+ dialog_vars.defaultno = FALSE;
+ if (cancel)
+ return (FALSE);
+ }
+
return (TRUE);
}
OpenPOWER on IntegriCloud