[BACK]Return to upgrade.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / distrib / utils / sysinst

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>