Annotation of src/distrib/utils/sysinst/upgrade.c, Revision 1.48
1.48 ! dsl 1: /* $NetBSD: upgrade.c,v 1.47 2004/05/22 17:38:26 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.48 ! dsl 92: if (get_and_unpack_sets(1, MSG_disksetupdoneupdate,
! 93: MSG_upgrcomplete, MSG_abortupgr) != 0)
1.20 cgd 94: return;
1.9 jonathan 95:
1.21 hubertf 96: merge_X();
1.10 jonathan 97:
1.9 jonathan 98: sanity_check();
99: }
100:
1.10 jonathan 101: /*
1.21 hubertf 102: * Save X symlink to X.old so it can be recovered later
103: */
1.42 dsl 104: static int
1.34 dsl 105: save_X(void)
1.21 hubertf 106: {
107: /* Only care for X if it's a symlink */
108: if (target_symlink_exists_p("/usr/X11R6/bin/X")) {
109: if (target_symlink_exists_p("/usr/X11R6/bin/X.old")) {
110: msg_display(MSG_X_oldexists);
1.33 dsl 111: process_menu(MENU_ok, NULL);
1.21 hubertf 112: return EEXIST;
113: }
114:
115: #ifdef DEBUG
116: printf("saving /usr/X11R6/bin/X as .../X.old ...");
117: #endif
118:
119: /* Move target .../X to .../X.old. Abort on error. */
120: mv_within_target_or_die("/usr/X11R6/bin/X",
121: "/usr/X11R6/bin/X.old");
122: }
123:
124: return 0;
125: }
126:
127: /*
128: * Merge back saved target X files after unpacking the new
129: * sets has completed.
130: */
1.42 dsl 131: static int
1.34 dsl 132: merge_X(void)
1.21 hubertf 133: {
134: if (target_symlink_exists_p("/usr/X11R6/bin/X.old")) {
135: /* Only move back X if it's a symlink - we don't want
136: * to restore old binaries */
137: mv_within_target_or_die("/usr/X11R6/bin/X.old",
138: "/usr/X11R6/bin/X");
139: }
1.10 jonathan 140:
141: return 0;
1.12 jonathan 142: }
143:
144: /*
1.29 jdc 145: * Unpacks sets, clobbering existing contents.
1.12 jonathan 146: */
147: void
1.34 dsl 148: do_reinstall_sets(void)
1.12 jonathan 149: {
150:
151: unwind_mounts();
1.15 mrg 152: msg_display(MSG_reinstallusure);
1.33 dsl 153: process_menu(MENU_noyes, NULL);
1.12 jonathan 154: if (!yesno)
155: return;
156:
1.35 dsl 157: if (find_disks(msg_string(MSG_reinstall)) < 0)
1.12 jonathan 158: return;
1.39 dsl 159:
160: process_menu(MENU_distset, NULL);
1.12 jonathan 161:
1.43 dsl 162: if (mount_disks() != 0)
1.12 jonathan 163: return;
164:
165: /* Unpack the distribution. */
1.48 ! dsl 166: if (get_and_unpack_sets(0, NULL, MSG_unpackcomplete, MSG_abortunpack) != 0)
1.20 cgd 167: return;
1.12 jonathan 168:
169: sanity_check();
1.1 phil 170: }
CVSweb <webmaster@jp.NetBSD.org>