Annotation of src/distrib/utils/sysinst/upgrade.c, Revision 1.47
1.47 ! dsl 1: /* $NetBSD: upgrade.c,v 1.46 2004/05/22 17:31:37 dsl Exp $ */
1.1 phil 2:
3: /*
4: * Copyright 1997 Piermont Information Systems Inc.
5: * All rights reserved.
6: *
7: * Written by Philip A. Nelson for Piermont Information Systems Inc.
8: *
9: * Redistribution and use in source and binary forms, with or without
10: * modification, are permitted provided that the following conditions
11: * are met:
12: * 1. Redistributions of source code must retain the above copyright
13: * notice, this list of conditions and the following disclaimer.
14: * 2. Redistributions in binary form must reproduce the above copyright
15: * notice, this list of conditions and the following disclaimer in the
16: * documentation and/or other materials provided with the distribution.
17: * 3. All advertising materials mentioning features or use of this software
18: * must display the following acknowledgement:
1.18 cgd 19: * This product includes software developed for the NetBSD Project by
1.1 phil 20: * Piermont Information Systems Inc.
21: * 4. The name of Piermont Information Systems Inc. may not be used to endorse
22: * or promote products derived from this software without specific prior
23: * written permission.
24: *
25: * THIS SOFTWARE IS PROVIDED BY PIERMONT INFORMATION SYSTEMS INC. ``AS IS''
26: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28: * ARE DISCLAIMED. IN NO EVENT SHALL PIERMONT INFORMATION SYSTEMS INC. BE
29: * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
30: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
31: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
32: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
33: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
34: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
35: * THE POSSIBILITY OF SUCH DAMAGE.
36: *
37: */
38:
39: /* upgrade.c -- upgrade an installation. */
40:
41: #include <stdio.h>
42: #include <curses.h>
1.9 jonathan 43: #include <errno.h>
1.1 phil 44: #include "defs.h"
45: #include "msg_defs.h"
46: #include "menu_defs.h"
47:
1.9 jonathan 48: /*
49: * local prototypes
50: */
1.42 dsl 51: static int save_X(void);
52: static int merge_X(void);
1.38 dsl 53:
1.15 mrg 54: /*
55: * Do the system upgrade.
56: */
57: void
1.34 dsl 58: do_upgrade(void)
1.1 phil 59: {
1.15 mrg 60:
61: msg_display(MSG_upgradeusure);
1.33 dsl 62: process_menu(MENU_noyes, NULL);
1.1 phil 63: if (!yesno)
64: return;
65:
1.15 mrg 66: get_ramsize();
1.2 phil 67:
1.35 dsl 68: if (find_disks(msg_string(MSG_upgrade)) < 0)
1.23 fvdl 69: return;
70:
71: if (md_pre_update() < 0)
1.2 phil 72: return;
1.36 dsl 73:
74: process_menu(MENU_distset, NULL);
1.11 jonathan 75:
1.43 dsl 76: if (mount_disks() != 0)
1.1 phil 77: return;
1.5 phil 78:
1.24 fvdl 79:
1.14 jonathan 80: /*
1.22 hubertf 81: * Save X symlink, ...
1.14 jonathan 82: */
1.22 hubertf 83: if (save_X())
1.9 jonathan 84: return;
85:
1.3 phil 86: /* Do any md updating of the file systems ... e.g. bootblocks,
87: copy file systems ... */
1.15 mrg 88: if (!md_update())
1.2 phil 89: return;
1.8 jonathan 90:
91: /* Done with disks. Ready to get and unpack tarballs. */
1.29 jdc 92: msg_display(MSG_disksetupdoneupdate);
1.17 bouyer 93: getchar();
1.30 jdc 94: wrefresh(curscr);
1.27 jdc 95: wmove(stdscr, 0, 0);
1.17 bouyer 96: wclear(stdscr);
97: wrefresh(stdscr);
1.1 phil 98:
1.45 dsl 99: if (get_and_unpack_sets(1, MSG_upgrcomplete, MSG_abortupgr) != 0)
1.20 cgd 100: return;
1.9 jonathan 101:
1.21 hubertf 102: merge_X();
1.10 jonathan 103:
1.9 jonathan 104: sanity_check();
105: }
106:
1.10 jonathan 107: /*
1.21 hubertf 108: * Save X symlink to X.old so it can be recovered later
109: */
1.42 dsl 110: static int
1.34 dsl 111: save_X(void)
1.21 hubertf 112: {
113: /* Only care for X if it's a symlink */
114: if (target_symlink_exists_p("/usr/X11R6/bin/X")) {
115: if (target_symlink_exists_p("/usr/X11R6/bin/X.old")) {
116: msg_display(MSG_X_oldexists);
1.33 dsl 117: process_menu(MENU_ok, NULL);
1.21 hubertf 118: return EEXIST;
119: }
120:
121: #ifdef DEBUG
122: printf("saving /usr/X11R6/bin/X as .../X.old ...");
123: #endif
124:
125: /* Move target .../X to .../X.old. Abort on error. */
126: mv_within_target_or_die("/usr/X11R6/bin/X",
127: "/usr/X11R6/bin/X.old");
128: }
129:
130: return 0;
131: }
132:
133: /*
134: * Merge back saved target X files after unpacking the new
135: * sets has completed.
136: */
1.42 dsl 137: static int
1.34 dsl 138: merge_X(void)
1.21 hubertf 139: {
140: if (target_symlink_exists_p("/usr/X11R6/bin/X.old")) {
141: /* Only move back X if it's a symlink - we don't want
142: * to restore old binaries */
143: mv_within_target_or_die("/usr/X11R6/bin/X.old",
144: "/usr/X11R6/bin/X");
145: }
1.10 jonathan 146:
147: return 0;
1.12 jonathan 148: }
149:
150: /*
1.29 jdc 151: * Unpacks sets, clobbering existing contents.
1.12 jonathan 152: */
153: void
1.34 dsl 154: do_reinstall_sets(void)
1.12 jonathan 155: {
156:
157: unwind_mounts();
1.15 mrg 158: msg_display(MSG_reinstallusure);
1.33 dsl 159: process_menu(MENU_noyes, NULL);
1.12 jonathan 160: if (!yesno)
161: return;
162:
1.35 dsl 163: if (find_disks(msg_string(MSG_reinstall)) < 0)
1.12 jonathan 164: return;
1.39 dsl 165:
166: process_menu(MENU_distset, NULL);
1.12 jonathan 167:
1.43 dsl 168: if (mount_disks() != 0)
1.12 jonathan 169: return;
170:
171: /* Unpack the distribution. */
1.45 dsl 172: if (get_and_unpack_sets(0, MSG_unpackcomplete, MSG_abortunpack) != 0)
1.20 cgd 173: return;
1.12 jonathan 174:
175: sanity_check();
1.1 phil 176: }
CVSweb <webmaster@jp.NetBSD.org>