1 1.1 chopps #!/bin/sh 2 1.10 kre # $NetBSD: install.sh,v 1.10 2018/09/16 22:22:44 kre Exp $ 3 1.1 chopps # 4 1.1 chopps # Copyright (c) 1994 Christopher G. Demetriou 5 1.1 chopps # All rights reserved. 6 1.8 cgd # 7 1.1 chopps # Redistribution and use in source and binary forms, with or without 8 1.1 chopps # modification, are permitted provided that the following conditions 9 1.1 chopps # are met: 10 1.1 chopps # 1. Redistributions of source code must retain the above copyright 11 1.1 chopps # notice, this list of conditions and the following disclaimer. 12 1.1 chopps # 2. Redistributions in binary form must reproduce the above copyright 13 1.1 chopps # notice, this list of conditions and the following disclaimer in the 14 1.1 chopps # documentation and/or other materials provided with the distribution. 15 1.1 chopps # 3. All advertising materials mentioning features or use of this software 16 1.1 chopps # must display the following acknowledgement: 17 1.8 cgd # This product includes software developed for the 18 1.9 salo # NetBSD Project. See http://www.NetBSD.org/ for 19 1.8 cgd # information about NetBSD. 20 1.1 chopps # 4. The name of the author may not be used to endorse or promote products 21 1.8 cgd # derived from this software without specific prior written permission. 22 1.8 cgd # 23 1.1 chopps # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 24 1.1 chopps # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 25 1.1 chopps # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 26 1.1 chopps # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 27 1.1 chopps # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 28 1.1 chopps # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 29 1.1 chopps # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 30 1.1 chopps # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 31 1.1 chopps # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 32 1.1 chopps # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 33 1.8 cgd # 34 1.8 cgd # <<Id: LICENSE,v 1.2 2000/06/14 15:57:33 cgd Exp>> 35 1.1 chopps 36 1.1 chopps # NetBSD installation script. 37 1.1 chopps # In a perfect world, this would be a nice C program, with a reasonable 38 1.1 chopps # user interface. 39 1.1 chopps 40 1.1 chopps FSTABDIR=/mnt/etc # /mnt/etc 41 1.2 chopps #DONTDOIT==echo 42 1.1 chopps 43 1.4 chopps VERSION=1.2 44 1.1 chopps FSTAB=${FSTABDIR}/fstab 45 1.1 chopps 46 1.1 chopps getresp() { 47 1.1 chopps read resp 48 1.10 kre if [ -z "$resp" ]; then 49 1.1 chopps resp=$1 50 1.1 chopps fi 51 1.1 chopps } 52 1.1 chopps 53 1.2 chopps getvar() { 54 1.2 chopps echo $(eval $(echo "echo \$$1")) 55 1.2 chopps } 56 1.2 chopps 57 1.2 chopps shiftvar() { 58 1.10 kre local var 59 1.2 chopps var="$1" 60 1.2 chopps list="$(getvar $var)" 61 1.2 chopps set -- $list 62 1.2 chopps shift 63 1.2 chopps setvar $var "$*" 64 1.2 chopps } 65 1.2 chopps 66 1.2 chopps getparts() { 67 1.2 chopps disklabel $1 2>/dev/null | sed -e '/^[ ][ ][ad-p]/!d' | 68 1.2 chopps sed -e 's,^[ ]*\([a-p]\):[ ]*[0-9]*[ ]*[0-9]*[ ][ ]*\([a-zA-Z0-9.]*\).*,\1 \2,' | 69 1.2 chopps sed -e ':a 70 1.2 chopps N;${s/\n/ /g;p;d;} 71 1.2 chopps ba' 72 1.2 chopps } 73 1.2 chopps 74 1.2 chopps getdrives() { 75 1.2 chopps local du thispart 76 1.2 chopps for du in /dev/r${drivetype}?a; do 77 1.2 chopps dd if=$du of=/dev/null bs=1b count=1 >/dev/null 2>&1 78 1.2 chopps if [ $? -eq 0 ]; then 79 1.10 kre thisunit=$( echo $du | sed -e 's,/dev/r\(...\)a,\1,g' ) 80 1.2 chopps driveunits="$driveunits $thisunit" 81 1.2 chopps else 82 1.2 chopps continue; 83 1.2 chopps fi 84 1.2 chopps setvar $thisunit "$(getparts $thisunit)" 85 1.2 chopps export $thisunit 86 1.2 chopps done 87 1.2 chopps export drivenunits 88 1.2 chopps } 89 1.2 chopps 90 1.2 chopps prepdrive() { 91 1.2 chopps echo "which drive would you like to prepare next?" 92 1.2 chopps echo "choices are: ${driveunits}" 93 1.2 chopps echo "" 94 1.2 chopps getresp 95 1.2 chopps case $resp in 96 1.2 chopps *) ;; 97 1.2 chopps esac 98 1.2 chopps } 99 1.2 chopps 100 1.1 chopps echo "Welcome to the NetBSD ${VERSION} installation program." 101 1.1 chopps echo "" 102 1.1 chopps echo "This program is designed to help you put NetBSD on your hard disk," 103 1.2 chopps echo "in a simple and rational way. Its main objective is to format," 104 1.2 chopps echo "mount and create an fstab for your root (/) and user (/usr)" 105 1.2 chopps echo "partitions." 106 1.1 chopps echo "" 107 1.1 chopps echo "As with anything which modifies your hard drive's contents, this" 108 1.1 chopps echo "program can cause SIGNIFICANT data loss, and you are advised" 109 1.1 chopps echo "to make sure your hard drive is backed up before beginning the" 110 1.1 chopps echo "installation process." 111 1.1 chopps echo "" 112 1.2 chopps echo "Default answers are displayed in brackets after the questions." 113 1.1 chopps echo "You can hit Control-C at any time to quit, but if you do so at a" 114 1.1 chopps echo "prompt, you may have to hit return. Also, quitting in the middle of" 115 1.1 chopps echo "installation may leave your system in an inconsistent state." 116 1.1 chopps echo "" 117 1.1 chopps echo -n "Proceed with installation? [n] " 118 1.1 chopps getresp "n" 119 1.1 chopps case "$resp" in 120 1.1 chopps y*|Y*) 121 1.2 chopps echo "scanning for the root device" 122 1.1 chopps ;; 123 1.1 chopps *) 124 1.1 chopps echo "" 125 1.1 chopps echo "OK, then. Enter 'halt' at the prompt to halt the" 126 1.1 chopps echo "machine. Once the machine has halted, remove the" 127 1.1 chopps echo "floppy and press any key to reboot." 128 1.1 chopps exit 129 1.1 chopps ;; 130 1.1 chopps esac 131 1.1 chopps 132 1.2 chopps drivetype=sd 133 1.2 chopps sect_fwd="" 134 1.1 chopps 135 1.1 chopps # find out what units are possible for that disk, and query the user. 136 1.2 chopps getdrives 137 1.2 chopps for du in $driveunits; do 138 1.2 chopps set -- $(getvar $du) 139 1.10 kre if [ $# -ge 2 ] && 140 1.10 kre [ "$1" = a ] && 141 1.10 kre [ "$( echo "$2" | sed -e 's,.*BSD.*,BSD,' )" = BSD ]; then 142 1.2 chopps rdev=$du 143 1.2 chopps fi 144 1.2 chopps done 145 1.1 chopps 146 1.1 chopps echo "" 147 1.2 chopps echo "The following root devices are available on your machine:" 148 1.2 chopps echo " "${driveunits} 149 1.2 chopps echo "" 150 1.2 chopps prefdev=${rdev} 151 1.2 chopps rdev="" 152 1.10 kre while [ -z "${rdev}" ]; do 153 1.2 chopps echo -n "Which device would you like to install on ? [${prefdev}] " 154 1.2 chopps getresp ${prefdev} 155 1.10 kre otherdrives=$( echo "${driveunits}" | sed -e "s,${resp},," ) 156 1.1 chopps if [ "X${driveunits}" = "X${otherdrives}" ]; then 157 1.1 chopps echo "" 158 1.2 chopps echo "\"${resp}\" is an invalid drive name. Valid choices" 159 1.1 chopps echo "are: "${driveunits} 160 1.1 chopps else 161 1.2 chopps rdev=${resp} 162 1.1 chopps fi 163 1.1 chopps done 164 1.1 chopps 165 1.1 chopps echo "" 166 1.2 chopps echo "The root device you have chosen is on: ${rdev}" 167 1.1 chopps echo "" 168 1.10 kre # driveunits=$( ls /dev/${drivetype}?a | sed -e 's,/dev/\(...\)a,\1,g' ) 169 1.10 kre if [ -z "${driveunits}" ]; then 170 1.2 chopps echo "FATAL ERROR:" 171 1.2 chopps echo "No devices for disks of type '${drivetype}'." 172 1.2 chopps echo "This is probably a bug in the install disks." 173 1.2 chopps echo "Exiting install program." 174 1.2 chopps exit 175 1.1 chopps fi 176 1.1 chopps 177 1.1 chopps echo "" 178 1.1 chopps echo "THIS IS YOUR LAST CHANCE!!!" 179 1.1 chopps echo "" 180 1.2 chopps echo "(answering yes will format your root partition on $rdev)" 181 1.1 chopps echo -n "Are you SURE you want NetBSD installed on your hard drive? (yes/no) " 182 1.1 chopps answer="" 183 1.10 kre while [ -z "$answer" ]; do 184 1.1 chopps getresp 185 1.10 kre case "$resp" in 186 1.1 chopps yes|YES) 187 1.1 chopps echo "" 188 1.1 chopps answer=yes 189 1.1 chopps ;; 190 1.1 chopps no|NO) 191 1.1 chopps echo "" 192 1.1 chopps echo -n "OK, then. enter 'halt' to halt the machine. " 193 1.1 chopps echo "Once the machine has halted," 194 1.1 chopps echo -n "remove the floppy, and press any key to " 195 1.1 chopps echo "reboot." 196 1.1 chopps exit 197 1.1 chopps ;; 198 1.1 chopps *) 199 1.1 chopps echo -n "I want a yes or no answer... well? " 200 1.1 chopps ;; 201 1.1 chopps esac 202 1.1 chopps done 203 1.2 chopps echo "Initializing / (root) filesystem, and mounting..." 204 1.2 chopps $DONTDOIT newfs /dev/r${rdev}a $name 205 1.2 chopps $DONTDOIT mount -v /dev/${rdev}a /mnt 206 1.2 chopps echo "" 207 1.2 chopps echo -n "Creating a fstab..." 208 1.2 chopps mkdir -p $FSTABDIR 209 1.3 chopps echo "/dev/${rdev}a / ffs rw 1 1" > $FSTAB 210 1.1 chopps 211 1.2 chopps # get rid of this partition 212 1.2 chopps shiftvar $rdev 213 1.2 chopps shiftvar $rdev 214 1.2 chopps 215 1.2 chopps echo "" 216 1.2 chopps echo "Now lets setup your /usr file system" 217 1.2 chopps echo "(Once a valid input for drive and partition is seen" 218 1.2 chopps echo "it will be FORMATTED and inserted in the fstab.)" 219 1.10 kre while [ -z "$usrpart" ]; do 220 1.2 chopps resp="" 221 1.2 chopps drivename="" 222 1.10 kre while [ -z "$resp" ]; do 223 1.2 chopps echo "choices: $driveunits" 224 1.2 chopps echo "which drive do you want /usr on?" 225 1.2 chopps getresp 226 1.2 chopps set -- $driveunits 227 1.2 chopps while [ $# -gt 0 ]; do 228 1.2 chopps if [ "X$resp" = "X$1" ]; then 229 1.2 chopps drivename=$1 230 1.2 chopps break; 231 1.2 chopps else 232 1.2 chopps shift 233 1.2 chopps fi 234 1.2 chopps done 235 1.2 chopps if [ "X$drivename" != "X" ]; then 236 1.2 chopps break 237 1.2 chopps fi 238 1.2 chopps done 239 1.1 chopps 240 1.2 chopps usrpart="" 241 1.2 chopps echo "You have selected $drivename" 242 1.2 chopps echo "here is a list of partitions on $drivename" 243 1.10 kre disklabel $drivename 2>/dev/null | 244 1.10 kre sed -e '/^[ ][ ][ad-p]:/p;/^#[ \t]*size/p;d' 245 1.2 chopps echo "which partition would you like to format and have" 246 1.2 chopps echo -n "mounted as /usr? (supply the letter): " 247 1.2 chopps getresp 248 1.10 kre if [ -z "$resp" ]; then 249 1.2 chopps continue; 250 1.2 chopps fi 251 1.1 chopps 252 1.2 chopps list=$(getvar $drivename) 253 1.2 chopps set -- $list 254 1.2 chopps while [ $# -gt 0 ]; do 255 1.2 chopps if [ "$resp" = "$1" ]; then 256 1.10 kre if [ "$( echo $2 | sed -e 's,.*BSD.*,BSD,' )" != "BSD" ] 257 1.10 kre then 258 1.2 chopps echo "" 259 1.10 kre echo -n "$drivename$resp is of type $2 which" 260 1.10 kre echo " is not a BSD filesystem type" 261 1.2 chopps break 262 1.2 chopps fi 263 1.2 chopps usrpart=$drivename$resp 264 1.2 chopps break 265 1.2 chopps else 266 1.2 chopps shift 267 1.2 chopps shift 268 1.2 chopps fi 269 1.2 chopps done 270 1.10 kre if [ -z "$usrpart" ]; then 271 1.2 chopps echo "$resp is not a valid input." 272 1.2 chopps echo "" 273 1.2 chopps fi 274 1.2 chopps done 275 1.1 chopps 276 1.2 chopps echo "" 277 1.2 chopps echo "Initializing /usr filesystem, and mounting..." 278 1.2 chopps $DONTDOIT newfs /dev/r${usrpart} $name 279 1.2 chopps $DONTDOIT mkdir -p /mnt/usr 280 1.2 chopps $DONTDOIT mount -v /dev/${usrpart} /mnt/usr 281 1.2 chopps echo "" 282 1.2 chopps echo -n "Adding to fstab..." 283 1.3 chopps echo "/dev/${usrpart} /usr ffs rw 1 2" >> $FSTAB 284 1.1 chopps sync 285 1.1 chopps echo " done." 286 1.1 chopps 287 1.1 chopps echo "" 288 1.1 chopps echo "OK! The preliminary work of setting up your disk is now complete," 289 1.1 chopps echo "and you can install the actual NetBSD software." 290 1.1 chopps echo "" 291 1.2 chopps echo "Right now, your root is mounted on /mnt and your usr on /mnt/usr." 292 1.2 chopps echo "You should consult the installation notes to determine how to load" 293 1.2 chopps echo "and install the NetBSD distribution sets, and how to configure your" 294 1.2 chopps echo "system when you are done." 295 1.1 chopps echo "" 296 1.1 chopps echo "GOOD LUCK!" 297 1.1 chopps echo "" 298