[BACK]Return to upgrade.sh CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / distrib / miniroot

Annotation of src/distrib/miniroot/upgrade.sh, Revision 1.12

1.1       pk          1: #!/bin/sh
1.12    ! jtc         2: #      $NetBSD: upgrade.sh,v 1.11 1997/08/05 08:44:03 pk Exp $
1.1       pk          3: #
1.2       thorpej     4: # Copyright (c) 1996 The NetBSD Foundation, Inc.
1.1       pk          5: # All rights reserved.
                      6: #
1.2       thorpej     7: # This code is derived from software contributed to The NetBSD Foundation
                      8: # by Jason R. Thorpe.
                      9: #
1.1       pk         10: # Redistribution and use in source and binary forms, with or without
                     11: # modification, are permitted provided that the following conditions
                     12: # are met:
                     13: # 1. Redistributions of source code must retain the above copyright
                     14: #    notice, this list of conditions and the following disclaimer.
                     15: # 2. Redistributions in binary form must reproduce the above copyright
                     16: #    notice, this list of conditions and the following disclaimer in the
                     17: #    documentation and/or other materials provided with the distribution.
                     18: # 3. All advertising materials mentioning features or use of this software
                     19: #    must display the following acknowledgement:
1.2       thorpej    20: #        This product includes software developed by the NetBSD
                     21: #        Foundation, Inc. and its contributors.
                     22: # 4. Neither the name of The NetBSD Foundation nor the names of its
                     23: #    contributors may be used to endorse or promote products derived
                     24: #    from this software without specific prior written permission.
1.1       pk         25: #
1.2       thorpej    26: # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
                     27: # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
                     28: # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
1.12    ! jtc        29: # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
        !            30: # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
1.2       thorpej    31: # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
                     32: # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
                     33: # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
                     34: # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
                     35: # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
                     36: # POSSIBILITY OF SUCH DAMAGE.
1.1       pk         37: #
                     38:
                     39: #      NetBSD installation script.
                     40: #      In a perfect world, this would be a nice C program, with a reasonable
                     41: #      user interface.
                     42:
                     43: ROOTDISK=""                            # filled in below
                     44:
1.6       pk         45: trap "unmount_fs -fast /tmp/fstab.shadow > /dev/null 2>&1; rm -f /tmp/fstab.shadow" 0
1.1       pk         46:
                     47: MODE="upgrade"
                     48:
                     49: # include machine-dependent functions
                     50: # The following functions must be provided:
1.3       leo        51: #      md_copy_kernel()        - copy a kernel to the installed disk
1.1       pk         52: #      md_get_diskdevs()       - return available disk devices
                     53: #      md_get_cddevs()         - return available CD-ROM devices
                     54: #      md_get_ifdevs()         - return available network interfaces
1.3       leo        55: #      md_get_partition_range() - return range of valid partition letters
1.1       pk         56: #      md_installboot()        - install boot-blocks on disk
                     57: #      md_labeldisk()          - put label on a disk
                     58: #      md_welcome_banner()     - display friendly message
                     59: #      md_not_going_to_install() - display friendly message
                     60: #      md_congrats()           - display friendly message
1.3       leo        61:
                     62: # include machine dependent subroutines
1.1       pk         63: . install.md
                     64:
                     65: # include common subroutines
                     66: . install.sub
                     67:
1.8       jtc        68: # which sets?
                     69: THESETS="$UPGRSETS"
                     70:
1.9       pk         71: # Files that moved between 1.2 and 1.3
1.11      pk         72: RELOCATED_FILES_13="${RELOCATED_FILES_13} /sbin/mountd /usr/sbin/mountd"
1.9       pk         73: RELOCATED_FILES_13="${RELOCATED_FILES_13} /sbin/rtquey /usr/sbin/rtquery"
                     74: RELOCATED_FILES_13="${RELOCATED_FILES_13} /sbin/quotacheck /usr/sbin/quotacheck"
                     75: RELOCATED_FILES_13="${RELOCATED_FILES_13} /sbin/dumpfs /usr/sbin/dumpfs"
                     76: RELOCATED_FILES_13="${RELOCATED_FILES_13} /sbin/dumplfs /usr/sbin/dumplfs"
                     77:
                     78: rm_relocated_files()
                     79: {
                     80:        # ($n, $(n+1)): pairs of (old,new) locations of relocated files
                     81:        while [ $# -ge 2 ]; do
                     82:                if [ -f "$2" ]; then
                     83:                        echo Removing "$1";
                     84:                        rm -f "$1"
                     85:                fi
                     86:                shift 2
                     87:        done
                     88: }
                     89:
1.1       pk         90: # Good {morning,afternoon,evening,night}.
                     91: md_welcome_banner
                     92: echo -n "Proceed with upgrade? [n] "
                     93: getresp "n"
                     94: case "$resp" in
                     95:        y*|Y*)
                     96:                echo    "Cool!  Let's get to it..."
                     97:                ;;
                     98:        *)
                     99:                md_not_going_to_install
                    100:                exit
                    101:                ;;
                    102: esac
                    103:
                    104: # Deal with terminal issues
                    105: md_set_term
                    106:
                    107: # XXX Work around vnode aliasing bug (thanks for the tip, Chris...)
                    108: ls -l /dev > /dev/null 2>&1
                    109:
1.8       jtc       110: # Make sure we can write files (at least in /tmp)
                    111: # This might make an MFS mount on /tmp, or it may
                    112: # just re-mount the root with read-write enabled.
                    113: md_makerootwritable
1.1       pk        114:
                    115: while [ "X${ROOTDISK}" = "X" ]; do
                    116:        getrootdisk
                    117: done
                    118:
                    119: # Assume partition 'a' of $ROOTDISK is for the root filesystem.  Confirm
                    120: # this with the user.  Check and mount the root filesystem.
                    121: resp=""                        # force one iteration
                    122: while [ "X${resp}" = "X" ]; do
                    123:        echo -n "Root filesystem? [${ROOTDISK}a] "
                    124:        getresp "${ROOTDISK}a"
                    125:        _root_filesystem="/dev/`basename $resp`"
                    126:        if [ ! -b ${_root_filesystem} ]; then
                    127:                echo "Sorry, ${resp} is not a block device."
                    128:                resp="" # force loop to repeat
                    129:        fi
                    130: done
                    131:
                    132: echo   "Checking root filesystem..."
                    133: if ! fsck -pf ${_root_filesystem}; then
                    134:        echo    "ERROR: can't check root filesystem!"
                    135:        exit 1
                    136: fi
                    137:
                    138: echo   "Mounting root filesystem..."
                    139: if ! mount -o ro ${_root_filesystem} /mnt; then
                    140:        echo    "ERROR: can't mount root filesystem!"
                    141:        exit 1
                    142: fi
                    143:
                    144: # Grab the fstab so we can munge it for our own use.
                    145: if [ ! -f /mnt/etc/fstab ]; then
                    146:        echo    "ERROR: no /etc/fstab!"
                    147:        exit 1
                    148: fi
                    149:
                    150: # Grab the hosts table so we can use it.
                    151: if [ ! -f /mnt/etc/hosts ]; then
                    152:        echo    "ERROR: no /etc/hosts!"
                    153:        exit 1
                    154: fi
                    155: cp /mnt/etc/hosts /tmp/hosts
                    156:
                    157: # Start up the network in same/similar configuration as the installed system
                    158: # uses.
                    159: cat << \__network_config_1
                    160:
                    161: The upgrade program would now like to enable the network.  It will use the
                    162: configuration already stored on the root filesystem.  This is required
                    163: if you wish to use the network installation capabilities of this program.
                    164:
                    165: __network_config_1
                    166: echo -n        "Enable network? [y] "
                    167: getresp "y"
                    168: case "$resp" in
                    169:        y*|Y*)
                    170:                if ! enable_network; then
                    171:                        echo "ERROR: can't enable network!"
                    172:                        exit 1
                    173:                fi
                    174:
                    175:                cat << \__network_config_2
                    176:
                    177: You will now be given the opportunity to escape to the command shell to
                    178: do any additional network configuration you may need.  This may include
                    179: adding additional routes, if needed.  In addition, you might take this
                    180: opportunity to redo the default route in the event that it failed above.
                    181:
                    182: __network_config_2
                    183:                echo -n "Escape to shell? [n] "
                    184:                getresp "n"
                    185:                case "$resp" in
                    186:                        y*|Y*)
                    187:                                echo "Type 'exit' to return to upgrade."
                    188:                                sh
                    189:                                ;;
                    190:
                    191:                        *)
                    192:                                ;;
                    193:                esac
                    194:                ;;
                    195:        *)
                    196:                ;;
                    197: esac
                    198:
                    199: # Now that the network has been configured, it is safe to configure the
1.7       pk        200: # fstab.  We remove all but ufs/ffs.
1.1       pk        201: (
1.7       pk        202:        > /tmp/fstab
1.4       pk        203:        while read _dev _mp _fstype _rest ; do
1.1       pk        204:                if [ "X${_fstype}" = X"ufs" -o \
1.7       pk        205:                     "X${_fstype}" = X"ffs" ]; then
1.4       pk        206:                        if [ "X${_fstype}" = X"ufs" ]; then
                    207:                                # Convert ufs to ffs.
                    208:                                _fstype=ffs
                    209:                        fi
1.7       pk        210:                        echo "$_dev $_mp $_fstype $_rest" >> /tmp/fstab
1.1       pk        211:                fi
                    212:        done
1.7       pk        213: ) < /mnt/etc/fstab
1.1       pk        214:
                    215: echo   "The fstab is configured as follows:"
                    216: echo   ""
                    217: cat /tmp/fstab
                    218: cat << \__fstab_config_1
                    219:
                    220: You may wish to edit the fstab.  For example, you may need to resolve
                    221: dependencies in the order which the filesystems are mounted.  Note that
                    222: this fstab is only for installation purposes, and will not be copied into
                    223: the root filesystem.
                    224:
                    225: __fstab_config_1
                    226: echo -n        "Edit the fstab? [n] "
                    227: getresp "n"
                    228: case "$resp" in
                    229:        y*|Y*)
1.3       leo       230:                ${EDITOR} /tmp/fstab
1.1       pk        231:                ;;
                    232:
                    233:        *)
                    234:                ;;
                    235: esac
                    236:
                    237: echo   ""
                    238: munge_fstab /tmp/fstab /tmp/fstab.shadow
                    239:
                    240: if ! umount /mnt; then
                    241:        echo    "ERROR: can't unmount previously mounted root!"
                    242:        exit 1
                    243: fi
                    244:
                    245: # Check all of the filesystems.
                    246: check_fs /tmp/fstab.shadow
                    247:
                    248: # Mount filesystems.
                    249: mount_fs /tmp/fstab.shadow
                    250:
1.6       pk        251: echo -n        "Are the upgrade sets on one of your normally mounted (local) filesystems? [y] "
1.3       leo       252: getresp "y"
                    253: case "$resp" in
                    254:        y*|Y*)
1.6       pk        255:                get_localdir /mnt
1.3       leo       256:                ;;
                    257:        *)
                    258:                ;;
                    259: esac
                    260:
1.1       pk        261: # Install sets.
1.6       pk        262: install_sets
1.9       pk        263:
                    264: # Remove files that have just been installed in a new location
                    265: # from the old location
                    266: rm_relocated_files `eval echo \\$RELOCATED_FILES_${VERSION}`
1.1       pk        267:
                    268: # Get timezone info
                    269: get_timezone
                    270:
                    271: # Fix up the fstab.
                    272: echo -n        "Converting ufs to ffs in /etc/fstab..."
1.4       pk        273: (
                    274:        > /tmp/fstab
                    275:        while read _dev _mp _fstype _rest ; do
1.7       pk        276:                if [ "X${_fstype}" = X"ufs" ]; then
                    277:                        # Convert ufs to ffs.
                    278:                        _fstype=ffs
1.4       pk        279:                fi
1.7       pk        280:                echo "$_dev $_mp $_fstype $_rest" >> /tmp/fstab
1.4       pk        281:        done
                    282: ) < /mnt/etc/fstab
1.1       pk        283: echo   "done."
                    284: echo -n        "Would you like to edit the resulting fstab? [y] "
                    285: getresp "y"
                    286: case "$resp" in
                    287:        y*|Y*)
1.3       leo       288:                ${EDITOR} /tmp/fstab
1.1       pk        289:                ;;
                    290:
                    291:        *)
                    292:                ;;
                    293: esac
                    294:
                    295: # Copy in configuration information and make devices in target root.
                    296: (
                    297:        cd /tmp
                    298:        for file in fstab; do
                    299:                if [ -f $file ]; then
                    300:                        echo -n "Copying $file..."
                    301:                        cp $file /mnt/etc/$file
                    302:                        echo "done."
                    303:                fi
                    304:        done
                    305:
                    306:        echo -n "Installing timezone link..."
                    307:        rm -f /mnt/etc/localtime
                    308:        ln -s /usr/share/zoneinfo/$TZ /mnt/etc/localtime
                    309:        echo "done."
                    310:
                    311:        echo -n "Making devices..."
1.6       pk        312:        _pid=`twiddle`
1.1       pk        313:        cd /mnt/dev
                    314:        sh MAKEDEV all
1.6       pk        315:        kill $_pid
1.1       pk        316:        echo "done."
                    317:
1.3       leo       318:        md_copy_kernel
1.1       pk        319:
                    320:        md_installboot ${ROOTDISK}
                    321: )
                    322:
                    323: unmount_fs /tmp/fstab.shadow
                    324:
                    325: # Pat on the back.
                    326: md_congrats
                    327:
                    328: # ALL DONE!
                    329: exit 0

CVSweb <webmaster@jp.NetBSD.org>