Module Name: src
Committed By: martin
Date: Tue Jul 23 18:13:40 UTC 2019
Modified Files:
src/usr.sbin/sysinst: configmenu.c defs.h disks.c install.c msg.mi.de
msg.mi.en msg.mi.es msg.mi.fr msg.mi.pl partman.c target.c
upgrade.c
Log Message:
For upgrade / re-install allow the currently running system as a target
in the "disk" selection.
To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 src/usr.sbin/sysinst/configmenu.c
cvs rdiff -u -r1.40 -r1.41 src/usr.sbin/sysinst/defs.h
cvs rdiff -u -r1.39 -r1.40 src/usr.sbin/sysinst/disks.c \
src/usr.sbin/sysinst/partman.c
cvs rdiff -u -r1.8 -r1.9 src/usr.sbin/sysinst/install.c
cvs rdiff -u -r1.12 -r1.13 src/usr.sbin/sysinst/msg.mi.de
cvs rdiff -u -r1.18 -r1.19 src/usr.sbin/sysinst/msg.mi.en
cvs rdiff -u -r1.13 -r1.14 src/usr.sbin/sysinst/msg.mi.es
cvs rdiff -u -r1.16 -r1.17 src/usr.sbin/sysinst/msg.mi.fr
cvs rdiff -u -r1.19 -r1.20 src/usr.sbin/sysinst/msg.mi.pl
cvs rdiff -u -r1.7 -r1.8 src/usr.sbin/sysinst/target.c
cvs rdiff -u -r1.11 -r1.12 src/usr.sbin/sysinst/upgrade.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.sbin/sysinst/configmenu.c
diff -u src/usr.sbin/sysinst/configmenu.c:1.9 src/usr.sbin/sysinst/configmenu.c:1.10
--- src/usr.sbin/sysinst/configmenu.c:1.9 Sat Jun 22 20:46:07 2019
+++ src/usr.sbin/sysinst/configmenu.c Tue Jul 23 18:13:40 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: configmenu.c,v 1.9 2019/06/22 20:46:07 christos Exp $ */
+/* $NetBSD: configmenu.c,v 1.10 2019/07/23 18:13:40 martin Exp $ */
/*-
* Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -446,7 +446,7 @@ do_configmenu(struct install_partition_d
/* if the target isn't mounted already, figure it out. */
if (install != NULL && target_mounted() == 0) {
partman_go = 0;
- if (find_disks(msg_string(MSG_configure_prior)) < 0)
+ if (find_disks(msg_string(MSG_configure_prior), true) < 0)
return;
if (mount_disks(install) != 0)
Index: src/usr.sbin/sysinst/defs.h
diff -u src/usr.sbin/sysinst/defs.h:1.40 src/usr.sbin/sysinst/defs.h:1.41
--- src/usr.sbin/sysinst/defs.h:1.40 Tue Jul 23 16:02:32 2019
+++ src/usr.sbin/sysinst/defs.h Tue Jul 23 18:13:40 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: defs.h,v 1.40 2019/07/23 16:02:32 martin Exp $ */
+/* $NetBSD: defs.h,v 1.41 2019/07/23 18:13:40 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -324,6 +324,7 @@ struct single_part_fs_edit {
struct install_partition_desc {
size_t num; /* how many entries in infos */
struct part_usage_info *infos; /* individual partitions */
+ bool cur_system; /* target is the life system */
};
/* variables */
@@ -384,6 +385,12 @@ struct pm_devs {
*/
bool no_part;
+ /*
+ * This is a pseudo-device representing the currently running
+ * system (i.e. all mounted file systems).
+ */
+ bool cur_system;
+
/* Actual values for current disk - set by find_disks() or
md_get_info() */
int sectorsize, dlcyl, dlhead, dlsec, dlcylsize, current_cylsize;
@@ -592,7 +599,7 @@ void toplevel(void);
/* from disks.c */
bool get_default_cdrom(char *, size_t);
-int find_disks(const char *);
+int find_disks(const char *, bool);
bool enumerate_disks(void *state,bool (*func)(void *state, const char *dev));
bool is_cdrom_device(const char *dev, bool as_target);
bool is_bootable_device(const char *dev);
Index: src/usr.sbin/sysinst/disks.c
diff -u src/usr.sbin/sysinst/disks.c:1.39 src/usr.sbin/sysinst/disks.c:1.40
--- src/usr.sbin/sysinst/disks.c:1.39 Tue Jul 23 15:23:14 2019
+++ src/usr.sbin/sysinst/disks.c Tue Jul 23 18:13:40 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: disks.c,v 1.39 2019/07/23 15:23:14 martin Exp $ */
+/* $NetBSD: disks.c,v 1.40 2019/07/23 18:13:40 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -761,11 +761,32 @@ convert_scheme(struct pm_devs *p, bool i
return true;
}
+static struct pm_devs *
+dummy_whole_system_pm(void)
+{
+ static struct pm_devs whole_system = {
+ .diskdev = "/",
+ .no_mbr = true,
+ .no_part = true,
+ .cur_system = true,
+ };
+ static bool init = false;
+
+ if (!init) {
+ strlcpy(whole_system.diskdev_descr,
+ msg_string(MSG_running_system),
+ sizeof whole_system.diskdev_descr);
+ }
+
+ return &whole_system;
+}
+
int
-find_disks(const char *doingwhat)
+find_disks(const char *doingwhat, bool allow_cur_system)
{
struct disk_desc disks[MAX_DISKS];
- menu_ent dsk_menu[__arraycount(disks) + 1]; // + 1 for extended partitioning entry
+ /* need two more menu entries: current system + extended partitioning */
+ menu_ent dsk_menu[__arraycount(disks) + 2];
struct disk_desc *disk;
int i = 0, skipped = 0;
int already_found, numdisks, selected_disk = -1;
@@ -790,16 +811,23 @@ find_disks(const char *doingwhat)
* all disks
*/
if (partman_go <= 0) {
- if (numdisks == 0) {
+ if (numdisks == 0 && !allow_cur_system) {
/* No disks found! */
hit_enter_to_continue(MSG_nodisk, NULL);
/*endwin();*/
return -1;
} else {
- /* One or more disks found! */
- for (i = 0; i < numdisks; i++) {
+ /* One or more disks found or current system allowed */
+ i = 0;
+ if (allow_cur_system) {
+ dsk_menu[i].opt_name = MSG_running_system;
+ dsk_menu[i].opt_flags = OPT_EXIT;
+ dsk_menu[i].opt_action = set_menu_select;
+ i++;
+ }
+ for (; i < numdisks; i++) {
dsk_menu[i].opt_name =
- disks[i].dd_descr;
+ disks[i-allow_cur_system].dd_descr;
dsk_menu[i].opt_flags = OPT_EXIT;
dsk_menu[i].opt_action = set_menu_select;
}
@@ -807,10 +835,10 @@ find_disks(const char *doingwhat)
dsk_menu[i].opt_name = MSG_partman;
dsk_menu[i].opt_flags = OPT_EXIT;
dsk_menu[i].opt_action = set_menu_select;
+ i++;
}
menu_no = new_menu(MSG_Available_disks,
- dsk_menu, numdisks
- + ((partman_go<0)?1:0), -1,
+ dsk_menu, i, -1,
4, 0, 0, MC_SCROLL,
NULL, NULL, NULL, NULL, NULL);
if (menu_no == -1)
@@ -818,6 +846,14 @@ find_disks(const char *doingwhat)
msg_fmt_display(MSG_ask_disk, "%s", doingwhat);
process_menu(menu_no, &selected_disk);
free_menu(menu_no);
+ if (allow_cur_system) {
+ if (selected_disk == 0) {
+ pm = dummy_whole_system_pm();
+ return 1;
+ } else {
+ selected_disk--;
+ }
+ }
}
if (partman_go < 0 && selected_disk == numdisks) {
partman_go = 1;
@@ -1020,6 +1056,9 @@ make_filesystems(struct install_partitio
struct disk_partitions *parts;
const char *mnt_opts = NULL, *fsname = NULL;
+ if (pm->cur_system)
+ return 1;
+
if (pm->no_part) {
/* check if this target device already has a ffs */
snprintf(rdev, sizeof rdev, _PATH_DEV "/r%s", pm->diskdev);
@@ -1171,6 +1210,9 @@ make_fstab(struct install_partition_desc
const char *dev;
char dev_buf[PATH_MAX], swap_dev[PATH_MAX];
+ if (pm->cur_system)
+ return 1;
+
swap_dev[0] = 0;
/* Create the fstab. */
@@ -1516,6 +1558,9 @@ mount_disks(struct install_partition_des
char devdev[PATH_MAX];
size_t i;
+ if (install->cur_system)
+ return 0;
+
static struct lookfor fstabbuf[] = {
{"/dev/", "/dev/%s %s ffs %s", "c", NULL, 0, 0, foundffs},
{"/dev/", "/dev/%s %s ufs %s", "c", NULL, 0, 0, foundffs},
Index: src/usr.sbin/sysinst/partman.c
diff -u src/usr.sbin/sysinst/partman.c:1.39 src/usr.sbin/sysinst/partman.c:1.40
--- src/usr.sbin/sysinst/partman.c:1.39 Mon Jul 15 17:17:59 2019
+++ src/usr.sbin/sysinst/partman.c Tue Jul 23 18:13:40 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: partman.c,v 1.39 2019/07/15 17:17:59 martin Exp $ */
+/* $NetBSD: partman.c,v 1.40 2019/07/23 18:13:40 martin Exp $ */
/*
* Copyright 2012 Eugene Lozovoy
@@ -2793,7 +2793,7 @@ pm_upddevlist(menudesc *m, void *arg)
}
/* Detect all present devices */
- (void)find_disks("partman");
+ (void)find_disks("partman", false);
if (have_lvm)
pm_lvm_find();
pm_clean();
Index: src/usr.sbin/sysinst/install.c
diff -u src/usr.sbin/sysinst/install.c:1.8 src/usr.sbin/sysinst/install.c:1.9
--- src/usr.sbin/sysinst/install.c:1.8 Thu Jun 20 00:43:55 2019
+++ src/usr.sbin/sysinst/install.c Tue Jul 23 18:13:40 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: install.c,v 1.8 2019/06/20 00:43:55 christos Exp $ */
+/* $NetBSD: install.c,v 1.9 2019/07/23 18:13:40 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -119,7 +119,7 @@ do_install(void)
{
int find_disks_ret;
int retcode = 0;
- struct install_partition_desc install;
+ struct install_partition_desc install = {};
struct disk_partitions *parts;
#ifndef NO_PARTMAN
@@ -139,7 +139,7 @@ do_install(void)
get_ramsize();
/* Create and mount partitions */
- find_disks_ret = find_disks(msg_string(MSG_install));
+ find_disks_ret = find_disks(msg_string(MSG_install), false);
if (partman_go == 1) {
if (partman() < 0) {
hit_enter_to_continue(MSG_abort_part, NULL);
Index: src/usr.sbin/sysinst/msg.mi.de
diff -u src/usr.sbin/sysinst/msg.mi.de:1.12 src/usr.sbin/sysinst/msg.mi.de:1.13
--- src/usr.sbin/sysinst/msg.mi.de:1.12 Wed Jun 12 06:20:18 2019
+++ src/usr.sbin/sysinst/msg.mi.de Tue Jul 23 18:13:40 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: msg.mi.de,v 1.12 2019/06/12 06:20:18 martin Exp $ */
+/* $NetBSD: msg.mi.de,v 1.13 2019/07/23 18:13:40 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -1470,3 +1470,5 @@ message gpt_flag_desc {, (S)tart}
* $0 = file system type FFSv2
*/
message size_ptn_not_mounted {(Sonstige: $0)}
+
+message running_system {aktuelles System}
Index: src/usr.sbin/sysinst/msg.mi.en
diff -u src/usr.sbin/sysinst/msg.mi.en:1.18 src/usr.sbin/sysinst/msg.mi.en:1.19
--- src/usr.sbin/sysinst/msg.mi.en:1.18 Fri Jun 21 15:53:16 2019
+++ src/usr.sbin/sysinst/msg.mi.en Tue Jul 23 18:13:40 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: msg.mi.en,v 1.18 2019/06/21 15:53:16 pgoyette Exp $ */
+/* $NetBSD: msg.mi.en,v 1.19 2019/07/23 18:13:40 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -1409,3 +1409,6 @@ message gpt_flag_desc {, (B)ootable}
* $0 = file system type FFSv2
*/
message size_ptn_not_mounted {(Other: $0)}
+
+message running_system {current system}
+
Index: src/usr.sbin/sysinst/msg.mi.es
diff -u src/usr.sbin/sysinst/msg.mi.es:1.13 src/usr.sbin/sysinst/msg.mi.es:1.14
--- src/usr.sbin/sysinst/msg.mi.es:1.13 Fri Jun 21 15:59:14 2019
+++ src/usr.sbin/sysinst/msg.mi.es Tue Jul 23 18:13:40 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: msg.mi.es,v 1.13 2019/06/21 15:59:14 pgoyette Exp $ */
+/* $NetBSD: msg.mi.es,v 1.14 2019/07/23 18:13:40 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -1457,3 +1457,6 @@ message gpt_flag_desc {, (B)ootable}
* $0 = file system type FFSv2
*/
message size_ptn_not_mounted {(Other: $0)}
+
+message running_system {current system}
+
Index: src/usr.sbin/sysinst/msg.mi.fr
diff -u src/usr.sbin/sysinst/msg.mi.fr:1.16 src/usr.sbin/sysinst/msg.mi.fr:1.17
--- src/usr.sbin/sysinst/msg.mi.fr:1.16 Fri Jun 21 15:59:14 2019
+++ src/usr.sbin/sysinst/msg.mi.fr Tue Jul 23 18:13:40 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: msg.mi.fr,v 1.16 2019/06/21 15:59:14 pgoyette Exp $ */
+/* $NetBSD: msg.mi.fr,v 1.17 2019/07/23 18:13:40 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -1503,3 +1503,6 @@ message gpt_flag_desc {, (B)ootable}
* $0 = file system type FFSv2
*/
message size_ptn_not_mounted {(Other: $0)}
+
+message running_system {current system}
+
Index: src/usr.sbin/sysinst/msg.mi.pl
diff -u src/usr.sbin/sysinst/msg.mi.pl:1.19 src/usr.sbin/sysinst/msg.mi.pl:1.20
--- src/usr.sbin/sysinst/msg.mi.pl:1.19 Sun Jul 14 16:04:03 2019
+++ src/usr.sbin/sysinst/msg.mi.pl Tue Jul 23 18:13:40 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: msg.mi.pl,v 1.19 2019/07/14 16:04:03 kamil Exp $ */
+/* $NetBSD: msg.mi.pl,v 1.20 2019/07/23 18:13:40 martin Exp $ */
/* Based on english version: */
/* NetBSD: msg.mi.pl,v 1.36 2004/04/17 18:55:35 atatat Exp */
@@ -1392,3 +1392,6 @@ message gpt_flag_desc {, (R)ozruchowa}
* $0 = file system type FFSv2
*/
message size_ptn_not_mounted {(Inna: $0)}
+
+message running_system {current system}
+
Index: src/usr.sbin/sysinst/target.c
diff -u src/usr.sbin/sysinst/target.c:1.7 src/usr.sbin/sysinst/target.c:1.8
--- src/usr.sbin/sysinst/target.c:1.7 Tue Jul 23 15:23:14 2019
+++ src/usr.sbin/sysinst/target.c Tue Jul 23 18:13:40 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: target.c,v 1.7 2019/07/23 15:23:14 martin Exp $ */
+/* $NetBSD: target.c,v 1.8 2019/07/23 18:13:40 martin Exp $ */
/*
* Copyright 1997 Jonathan Stone
@@ -71,7 +71,7 @@
#include <sys/cdefs.h>
#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: target.c,v 1.7 2019/07/23 15:23:14 martin Exp $");
+__RCSID("$NetBSD: target.c,v 1.8 2019/07/23 18:13:40 martin Exp $");
#endif
/*
@@ -163,6 +163,9 @@ target_already_root(void)
if (pm == last_pm)
return last_res;
+ if (pm->cur_system)
+ return 1;
+
last_pm = pm;
last_res = 0;
Index: src/usr.sbin/sysinst/upgrade.c
diff -u src/usr.sbin/sysinst/upgrade.c:1.11 src/usr.sbin/sysinst/upgrade.c:1.12
--- src/usr.sbin/sysinst/upgrade.c:1.11 Tue Jul 23 16:02:32 2019
+++ src/usr.sbin/sysinst/upgrade.c Tue Jul 23 18:13:40 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: upgrade.c,v 1.11 2019/07/23 16:02:32 martin Exp $ */
+/* $NetBSD: upgrade.c,v 1.12 2019/07/23 18:13:40 martin Exp $ */
/*
* Copyright 1997 Piermont Information Systems Inc.
@@ -54,7 +54,7 @@ static int merge_X(const char *);
void
do_upgrade(void)
{
- struct install_partition_desc install;
+ struct install_partition_desc install = {};
int retcode = 0;
partman_go = 0;
@@ -64,20 +64,24 @@ do_upgrade(void)
get_ramsize();
- if (find_disks(msg_string(MSG_upgrade)) < 0)
+ if (find_disks(msg_string(MSG_upgrade), true) < 0)
return;
- if (pm->parts == NULL) {
+ if (pm->parts == NULL && !pm->cur_system) {
hit_enter_to_continue(MSG_noroot, NULL);
return;
}
- if (pm->parts->pscheme->pre_update_verify) {
- if (pm->parts->pscheme->pre_update_verify(pm->parts))
- pm->parts->pscheme->write_to_disk(pm->parts);
- }
+ if (!pm->cur_system) {
+ if (pm->parts->pscheme->pre_update_verify) {
+ if (pm->parts->pscheme->pre_update_verify(pm->parts))
+ pm->parts->pscheme->write_to_disk(pm->parts);
+ }
- install_desc_from_parts(&install, pm->parts);
+ install_desc_from_parts(&install, pm->parts);
+ } else {
+ install.cur_system = true;
+ }
if (set_swap_if_low_ram(&install) < 0)
return;
@@ -195,7 +199,7 @@ merge_X(const char *xroot)
void
do_reinstall_sets()
{
- struct install_partition_desc install;
+ struct install_partition_desc install = {};
int retcode = 0;
partman_go = 0;
@@ -204,15 +208,19 @@ do_reinstall_sets()
if (!ask_noyes(NULL))
return;
- if (find_disks(msg_string(MSG_reinstall)) < 0)
+ if (find_disks(msg_string(MSG_reinstall), true) < 0)
return;
- if (pm->parts == NULL) {
- hit_enter_to_continue(MSG_noroot, NULL);
- return;
- }
+ if (!pm->cur_system) {
+ if (pm->parts == NULL) {
+ hit_enter_to_continue(MSG_noroot, NULL);
+ return;
+ }
- install_desc_from_parts(&install, pm->parts);
+ install_desc_from_parts(&install, pm->parts);
+ } else {
+ install.cur_system = true;
+ }
if (mount_disks(&install) != 0)
goto free_install;