[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.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>