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;