1#!/bin/sh 2# $NetBSD: upgrade.sh,v 1.5 2023/03/26 15:08:24 andvar Exp $ 3# 4# Copyright (c) 1997 Perry E. Metzger 5# Copyright (c) 1994 Christopher G. Demetriou 6# All rights reserved. 7# 8# Redistribution and use in source and binary forms, with or without 9# modification, are permitted provided that the following conditions 10# are met: 11# 1. Redistributions of source code must retain the above copyright 12# notice, this list of conditions and the following disclaimer. 13# 2. Redistributions in binary form must reproduce the above copyright 14# notice, this list of conditions and the following disclaimer in the 15# documentation and/or other materials provided with the distribution. 16# 3. All advertising materials mentioning features or use of this software 17# must display the following acknowledgement: 18# This product includes software developed for the 19# NetBSD Project. See http://www.NetBSD.org/ for 20# information about NetBSD. 21# 4. The name of the author may not be used to endorse or promote products 22# derived from this software without specific prior written permission. 23# 24# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 25# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 26# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 27# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 28# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 29# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 30# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 31# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 32# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 33# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34# 35# <<Id: LICENSE,v 1.2 2000/06/14 15:57:33 cgd Exp>> 36 37# NetBSD upgrade script. 38# In a perfect world, this would be a nice C program, with a reasonable 39# user interface. 40 41DT=/etc/disktab # /etc/disktab 42FSTABDIR=/mnt/etc # /mnt/etc 43#DONTDOIT=echo 44UARGS="-c 2" 45 46FSTAB=${FSTABDIR}/fstab 47 48getresp() { 49 read resp 50 if [ "X$resp" = "X" ]; then 51 resp=$1 52 fi 53} 54 55echo "Welcome to the original NetBSD/alpha upgrade program." 56getresp 57echo "This version of the program has been largely replaced by the new 58echo "sysinst utility. Both programs are on this installation media set. 59echo -n "Type the return key to continue..." 60echo "" 61echo "This program is designed to help you put the new version of NetBSD" 62echo "on your hard disk, in a simple and rational way. To upgrade, you" 63echo "must have plenty of free space on all partitions which will be" 64echo "upgraded. If you have at least 1MB free on your root partition," 65echo "and several free on your /usr partition, you should be fine." 66echo "" 67echo "As with anything which modifies your hard drive's contents, this" 68echo "program can cause SIGNIFICANT data loss, and you are advised" 69echo "to make sure your hard drive is backed up before beginning the" 70echo "upgrade process." 71echo "" 72echo "Default answers are displayed in brackets after the questions." 73echo "You can hit Control-C at any time to quit, but if you do so at a" 74echo "prompt, you may have to hit return. Also, quitting in the middle of" 75echo "the upgrade may leave your system in an inconsistent (and unusable)" 76echo "state." 77echo "" 78echo -n "Proceed with upgrade? [n] " 79getresp "n" 80case "$resp" in 81 y*|Y*) 82 echo "Cool! Let's get to it..." 83 ;; 84 *) 85 echo "" 86 echo "OK, then. Enter 'halt' at the prompt to halt the" 87 echo "machine. Once the machine has halted, remove the" 88 echo "floppy and press any key to reboot." 89 exit 90 ;; 91esac 92 93# find out what units are possible, and query the user. 94driveunits=`echo /dev/[sw]d?a | sed -e 's,/dev/\(...\)a,\1,g'` 95if [ "X${driveunits}" = "X" ]; then 96 echo "FATAL ERROR:" 97 echo "No disk devices." 98 echo "This is probably a bug in the install disks." 99 echo "Exiting install program." 100 exit 101fi 102 103echo "" 104echo "The following disks are supported by this upgrade procedure:" 105echo " "${driveunits} 106echo "If your system was previously completely contained within the" 107echo "disks listed above (i.e. if your system didn't occupy any space" 108echo "on disks NOT listed above), this upgrade disk can upgrade your" 109echo "system. If it cannot, hit Control-C at the prompt." 110echo "" 111while [ "X${drivename}" = "X" ]; do 112 echo -n "Which disk contains your root partition? " 113 getresp 114 otherdrives=`echo "${driveunits}" | sed -e s,${resp},,` 115 if [ "X${driveunits}" = "X${otherdrives}" ]; then 116 echo "" 117 echo "\"${resp}\" is an invalid drive name. Valid choices" 118 echo "are: "${driveunits} 119 echo "" 120 else 121 drivename=${resp} 122 fi 123done 124 125echo "" 126echo "Root partition is on ${drivename}a." 127 128echo "" 129echo "If (and only if!) you are upgrading from NetBSD 0.9 or below," 130echo "you should upgrade to the new file system format. Do not answer" 131echo "yes if you are upgrading from NetBSD 1.0 or above." 132echo "Would you like to upgrade your file systems to the new file system" 133echo -n "format? [y] " 134getresp "y" 135case "$resp" in 136 n*|N*) 137 echo "" 138 echo "If you are upgrading from NetBSD 0.9 or below," 139 echo "you should upgrade your file systems with 'fsck -c 2'" 140 echo "as soon as is feasible, because the new file system" 141 echo "code is better-tested and more performant." 142 upgrargs="" 143 upgradefs=NO 144 ;; 145 *) 146 upgrargs=$UARGS 147 upgradefs=YES 148 ;; 149esac 150 151if [ $upgradefs = YES ]; then 152 echo "" 153 echo "your file systems will be upgraded while they are checked" 154fi 155 156echo "checking the file system on ${drivename}a..." 157 158fsck -f -p $upgrargs /dev/r${drivename}a 159if [ $? != 0 ]; then 160 echo "FATAL ERROR: FILE SYSTEM UPGRADE FAILED." 161 echo "You should probably reboot the machine, fsck your" 162 echo "disk(s), and try the upgrade procedure again." 163 exit 1 164fi 165 166echo "" 167echo "Mounting root partition on /mnt..." 168mount /dev/${drivename}a /mnt 169if [ $? != 0 ]; then 170 echo "FATAL ERROR: MOUNT FAILED." 171 echo "You should verify that your system is set up as you" 172 echo "described, and re-attempt the upgrade procedure." 173 exit 1 174fi 175echo "Done." 176 177echo "" 178echo -n "Copying new fsck binary to your hard disk..." 179if [ ! -d /mnt/sbin ]; then 180 mkdir /mnt/sbin 181fi 182cp /sbin/fsck /mnt/sbin/fsck 183if [ $? != 0 ]; then 184 echo "FATAL ERROR: COPY FAILED." 185 echo "It in unclear why this error would occur. It looks" 186 echo "like you may end up having to upgrade by hand." 187 exit 1 188fi 189echo " Done." 190 191echo "" 192echo "Re-mounting root partition read-only..." 193mount -u -o ro /dev/${drivename}a /mnt 194if [ $? != 0 ]; then 195 echo "FATAL ERROR: RE-MOUNT FAILED." 196 echo "It in unclear why this error would occur. It looks" 197 echo "like you may end up having to upgrade by hand." 198 exit 1 199fi 200echo "Done." 201 202echo "" 203echo "checking the rest of your file systems..." 204chroot /mnt fsck -f -p $upgrargs 205if [ $? != 0 ]; then 206 echo "FATAL ERROR: FILE SYSTEM UPGRADE(S) FAILED." 207 echo "You should probably reboot the machine, fsck your" 208 echo "file system(s), and try the upgrade procedure" 209 echo "again." 210 exit 1 211fi 212 echo "Done." 213 214echo "" 215echo "Re-mounting root partition read-write..." 216mount -u -o rw /dev/${drivename}a /mnt 217if [ $? != 0 ]; then 218 echo "FATAL ERROR: RE-MOUNT FAILED." 219 echo "It in unclear why this error would occur. It looks" 220 echo "like you may end up having to upgrade by hand." 221 exit 1 222fi 223echo "Done." 224 225echo "" 226echo "Updating boot blocks on ${drivename}..." 227# shouldn't be needed, but... 228$DONTDOIT rm -f /mnt/boot 229$DONTDOIT cp /usr/mdec/boot /mnt/boot 230$DONTDOIT /usr/sbin/installboot /dev/r${drivename}c /usr/mdec/bootxx_ffs 231if [ $? != 0 ]; then 232 echo "FATAL ERROR: UPDATE OF DISK LABEL FAILED." 233 echo "It in unclear why this error would occur. It looks" 234 echo "like you may end up having to upgrade by hand." 235 exit 1 236fi 237echo "Done." 238 239echo "" 240echo "Copying bootstrapping binaries and config files to the hard drive..." 241$DONTDOIT cp /mnt/.profile /mnt/.profile.bak 242$DONTDOIT pax -s '#^\./etc/.*##' -Xrwpe . /mnt 243$DONTDOIT mv /mnt/etc/rc /mnt/etc/rc.bak 244$DONTDOIT cp /tmp/.hdprofile /mnt/.profile 245 246echo "" 247echo "Mounting remaining partitions..." 248chroot /mnt mount -at ffs > /dev/null 2>&1 249echo "Done." 250 251echo "" 252echo "" 253echo "OK! The preliminary work of setting up your disk is now complete," 254echo "and you can now upgrade the actual NetBSD software." 255echo "" 256echo "Right now, your hard disk is mounted on /mnt. You should consult" 257echo "the installation notes to determine how to load and install the new" 258echo "NetBSD distribution sets, and how to clean up after the upgrade" 259echo "software, when you are done." 260echo "" 261echo "GOOD LUCK!" 262echo "" 263