1 1.1 thorpej #!/bin/sh 2 1.1 thorpej # 3 1.21 andvar # $NetBSD: install.md,v 1.21 2023/03/26 15:08:24 andvar Exp $ 4 1.1 thorpej # 5 1.1 thorpej # Copyright (c) 1996 The NetBSD Foundation, Inc. 6 1.1 thorpej # All rights reserved. 7 1.1 thorpej # 8 1.1 thorpej # This code is derived from software contributed to The NetBSD Foundation 9 1.1 thorpej # by Jason R. Thorpe. 10 1.1 thorpej # 11 1.1 thorpej # Redistribution and use in source and binary forms, with or without 12 1.1 thorpej # modification, are permitted provided that the following conditions 13 1.1 thorpej # are met: 14 1.1 thorpej # 1. Redistributions of source code must retain the above copyright 15 1.1 thorpej # notice, this list of conditions and the following disclaimer. 16 1.1 thorpej # 2. Redistributions in binary form must reproduce the above copyright 17 1.1 thorpej # notice, this list of conditions and the following disclaimer in the 18 1.1 thorpej # documentation and/or other materials provided with the distribution. 19 1.1 thorpej # 20 1.1 thorpej # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 21 1.1 thorpej # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 22 1.1 thorpej # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23 1.6 jtc # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 24 1.6 jtc # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25 1.1 thorpej # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 1.1 thorpej # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 1.1 thorpej # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 1.1 thorpej # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 1.1 thorpej # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 1.1 thorpej # POSSIBILITY OF SUCH DAMAGE. 31 1.1 thorpej # 32 1.1 thorpej 33 1.1 thorpej # 34 1.1 thorpej # machine dependent section of installation/upgrade script 35 1.1 thorpej # 36 1.1 thorpej 37 1.4 thorpej # Machine-dependent install sets 38 1.18 tsutsui MDSETS="kern-GENERIC xbase xcomp xetc xfont xserver" 39 1.4 thorpej 40 1.1 thorpej md_set_term() { 41 1.1 thorpej if [ ! -z "$TERM" ]; then 42 1.1 thorpej return 43 1.1 thorpej fi 44 1.15 tsutsui echo -n "Specify terminal type [vt100]: " 45 1.15 tsutsui getresp "vt100" 46 1.1 thorpej TERM="$resp" 47 1.1 thorpej export TERM 48 1.1 thorpej # XXX call tset? 49 1.5 thorpej } 50 1.5 thorpej 51 1.5 thorpej md_makerootwritable() { 52 1.5 thorpej # Was: do_mfs_mount "/tmp" "2048" 53 1.5 thorpej # /tmp is the mount point 54 1.5 thorpej # 2048 is the size in DEV_BIZE blocks 55 1.5 thorpej 56 1.5 thorpej umount /tmp > /dev/null 2>&1 57 1.5 thorpej if ! mount_mfs -s 2048 swap /tmp ; then 58 1.5 thorpej cat << \__mfs_failed_1 59 1.5 thorpej 60 1.5 thorpej FATAL ERROR: Can't mount the memory filesystem. 61 1.5 thorpej 62 1.5 thorpej __mfs_failed_1 63 1.5 thorpej exit 64 1.5 thorpej fi 65 1.5 thorpej 66 1.5 thorpej # Bleh. Give mount_mfs a chance to DTRT. 67 1.5 thorpej sleep 2 68 1.1 thorpej } 69 1.1 thorpej 70 1.1 thorpej md_get_diskdevs() { 71 1.1 thorpej # return available disk devices 72 1.17 christos mi_filter_dmesg | awk -F : '/^rd[0-9]*:./ { print $1; }' | sort -u 73 1.17 christos mi_filter_dmesg | awk -F : '/^sd[0-9]*:.*sectors/ { print $1; }' | sort -u 74 1.1 thorpej } 75 1.1 thorpej 76 1.1 thorpej md_get_cddevs() { 77 1.1 thorpej # return available CD-ROM devices 78 1.17 christos mi_filter_dmesg | awk -F : '/^cd[0-9]*:/ { print $1; }' | sort -u 79 1.1 thorpej } 80 1.1 thorpej 81 1.1 thorpej md_get_ifdevs() { 82 1.1 thorpej # return available network interfaces 83 1.17 christos mi_filter_dmesg | awk -F : '/^le[0-9]*:/ { print $1; }' | sort -u 84 1.1 thorpej } 85 1.1 thorpej 86 1.19 tsutsui md_get_partition_range() { 87 1.19 tsutsui # return an expression describing the valid partition id's 88 1.19 tsutsui echo '[a-h]' 89 1.19 tsutsui } 90 1.19 tsutsui 91 1.1 thorpej md_installboot() { 92 1.1 thorpej # $1 is the root disk 93 1.1 thorpej 94 1.1 thorpej echo -n "Installing boot block..." 95 1.11 tsutsui /usr/sbin/installboot -v /dev/r${1}c /usr/mdec/uboot.lif 96 1.1 thorpej echo "done." 97 1.1 thorpej } 98 1.1 thorpej 99 1.8 he grep_check_q () { 100 1.8 he pattern=$1; shift 101 1.8 he awk 'BEGIN{ es=1; } /'"$pattern"'/{ es=0; } END{ exit es; }' "$@" 102 1.8 he } 103 1.8 he 104 1.8 he plain_grep () { 105 1.8 he pattern=$1; shift 106 1.8 he awk "/$pattern/"'{ print; }' "$@" 107 1.8 he } 108 1.8 he 109 1.1 thorpej md_checkfordisklabel() { 110 1.1 thorpej # $1 is the disk to check 111 1.1 thorpej 112 1.1 thorpej disklabel -r $1 > /dev/null 2> /tmp/checkfordisklabel 113 1.8 he if grep_check_q "no disk label" /tmp/checkfordisklabel; then 114 1.1 thorpej rval="1" 115 1.8 he elif grep_check_q "disk label corrupted" /tmp/checkfordisklabel; then 116 1.1 thorpej rval="2" 117 1.1 thorpej else 118 1.1 thorpej rval="0" 119 1.1 thorpej fi 120 1.1 thorpej 121 1.1 thorpej rm -f /tmp/checkfordisklabel 122 1.1 thorpej } 123 1.1 thorpej 124 1.1 thorpej hp300_init_label_scsi_disk() { 125 1.1 thorpej # $1 is the disk to label 126 1.1 thorpej 127 1.1 thorpej # Name the disks we install in the temporary fstab. 128 1.16 christos if [ -z "${_disk_instance}" ]; then 129 1.1 thorpej _disk_instance="0" 130 1.1 thorpej else 131 1.16 christos _disk_instance=$(expr $_disk_instance + 1) 132 1.1 thorpej fi 133 1.1 thorpej _cur_disk_name="install-disk-${_disk_instance}" 134 1.1 thorpej 135 1.1 thorpej # Get geometry information from the user. 136 1.1 thorpej more << \__scsi_label_1 137 1.1 thorpej 138 1.1 thorpej You will need to provide some information about your disk's geometry. 139 1.1 thorpej Geometry info for SCSI disks was printed at boot time. If that information 140 1.1 thorpej is not available, use the information provided in your disk's manual. 141 1.1 thorpej Please note that the geometry printed at boot time is preferred. 142 1.1 thorpej 143 1.1 thorpej IMPORTANT NOTE: due to a limitation in the disklabel(8) program, the 144 1.1 thorpej number of cylinders on the disk will be increased by 1 so that the initial 145 1.1 thorpej label can be placed on disk for editing. When the disklabel editor appears, 146 1.1 thorpej make absolutely certain you subtract 1 from the total number of cylinders, 147 1.1 thorpej and adjust the size of partition 'c' such that: 148 1.1 thorpej 149 1.1 thorpej size = (sectors per track) * (tracks per cyl) * (total cylinders) 150 1.1 thorpej 151 1.1 thorpej Note that the disklabel editor will be run twice; once to set the size of 152 1.1 thorpej partition 'c' and correct the geometry, and again so that you may correctly 153 1.1 thorpej edit the partition map. This is to work around the afore mentioned 154 1.1 thorpej limitation in disklabel(8). Apologies offered in advance. 155 1.1 thorpej 156 1.1 thorpej __scsi_label_1 157 1.1 thorpej 158 1.1 thorpej # Give the opportunity to review the boot messages. 159 1.1 thorpej echo -n "Review boot messages now? [y] " 160 1.1 thorpej getresp "y" 161 1.1 thorpej case "$resp" in 162 1.1 thorpej y*|Y*) 163 1.1 thorpej (echo ""; dmesg; echo "") | more 164 1.1 thorpej ;; 165 1.1 thorpej 166 1.1 thorpej *) 167 1.1 thorpej ;; 168 1.1 thorpej esac 169 1.1 thorpej 170 1.1 thorpej echo "" 171 1.1 thorpej echo -n "Number of bytes per disk sector? [512] " 172 1.1 thorpej getresp "512" 173 1.1 thorpej _secsize="$resp" 174 1.1 thorpej 175 1.1 thorpej resp="" # force one iteration 176 1.16 christos while [ -z "${resp}" ]; do 177 1.1 thorpej echo -n "Number of cylinders? " 178 1.1 thorpej getresp "" 179 1.1 thorpej done 180 1.1 thorpej _cylinders="$resp" 181 1.16 christos _fudge_cyl=$(expr $_cylinders + 1) 182 1.1 thorpej 183 1.1 thorpej resp="" # force one iteration 184 1.16 christos while [ -z "${resp}" ]; do 185 1.1 thorpej echo -n "Number of tracks (heads)? " 186 1.1 thorpej getresp "" 187 1.1 thorpej done 188 1.1 thorpej _tracks_per_cyl="$resp" 189 1.1 thorpej 190 1.1 thorpej resp="" # force one iteration 191 1.16 christos while [ -z "${resp}" ]; do 192 1.1 thorpej echo -n "Number of disk sectors (blocks)? " 193 1.1 thorpej getresp "" 194 1.1 thorpej done 195 1.1 thorpej _nsectors="$resp" 196 1.1 thorpej 197 1.1 thorpej # Calculate some values we need. 198 1.16 christos _sec_per_cyl=$(expr $_nsectors / $_cylinders) 199 1.16 christos _sec_per_track=$(expr $_sec_per_cyl / $_tracks_per_cyl) 200 1.16 christos _new_c_size=$(expr $_sec_per_track \* $_tracks_per_cyl \* $_cylinders) 201 1.1 thorpej 202 1.1 thorpej # Emit a disktab entry, suitable for getting started. 203 1.16 christos # What we have is a 'c' partition with the total number of 204 1.16 christos # blocks, and an 'a' partition with 1 sector; just large enough 205 1.1 thorpej # to open. Don't ask. 206 1.1 thorpej echo "" >> /etc/disktab 207 1.1 thorpej echo "# Created by install" >> /etc/disktab 208 1.1 thorpej echo "${_cur_disk_name}:\\" >> /etc/disktab 209 1.1 thorpej echo -n " :ty=winchester:ns#${_sec_per_track}:" >> /etc/disktab 210 1.1 thorpej echo "nt#${_tracks_per_cyl}:nc#${_fudge_cyl}:\\" >> /etc/disktab 211 1.1 thorpej echo " :pa#1:\\" >> /etc/disktab 212 1.1 thorpej echo " :pc#${_nsectors}:" >> /etc/disktab 213 1.1 thorpej 214 1.1 thorpej # Ok, here's what we need to do. First of all, we install 215 1.16 christos # this initial label by opening the 'c' partition of the disk 216 1.16 christos # and using the '-r' flag for disklabel(8). However, because 217 1.1 thorpej # of limitations in disklabel(8), we've had to fudge the number 218 1.1 thorpej # of cylinders up 1 so that disklabel(8) doesn't complain about 219 1.16 christos # 'c' running past the end of the disk, which can be quite 220 1.1 thorpej # common even with OEM HP drives! So, we've given ourselves 221 1.16 christos # an 'a' partition, which is the minimum needed to open the disk 222 1.1 thorpej # so that we can perform the DIOCWDLABEL ioctl. So, once the 223 1.16 christos # initial label is installed, we open the 'a' partition so that 224 1.1 thorpej # we can fix up the number of cylinders and make the size of 225 1.16 christos # 'c' come out to (ncyl * ntracks_per_cyl * nsec_per_track). 226 1.16 christos # After that's done, we re-open 'c' and let the user actually 227 1.1 thorpej # edit the partition table. It's horrible, I know. Bleh. 228 1.1 thorpej 229 1.1 thorpej disklabel -W ${1} 230 1.1 thorpej if ! disklabel -w -r ${1} ${_cur_disk_name}; then 231 1.1 thorpej echo "" 232 1.1 thorpej echo "ERROR: can't bootstrap disklabel!" 233 1.1 thorpej rval="1" 234 1.1 thorpej return 235 1.1 thorpej fi 236 1.1 thorpej 237 1.1 thorpej echo "" 238 1.1 thorpej echo "The disklabel editor will now start. During this phase, you" 239 1.1 thorpej echo "must reset the 'cylinders' value to ${_cylinders}, and adjust" 240 1.1 thorpej echo "the size of partition 'c' to ${_new_c_size}. Do not modify" 241 1.1 thorpej echo "the partition map at this time. You will have the opportunity" 242 1.1 thorpej echo "to do so in a moment." 243 1.1 thorpej echo "" 244 1.1 thorpej echo -n "Press <return> to continue. " 245 1.1 thorpej getresp "" 246 1.1 thorpej 247 1.1 thorpej disklabel -W ${1} 248 1.1 thorpej if ! disklabel -e /dev/r${1}a; then 249 1.1 thorpej echo "" 250 1.1 thorpej echo "ERROR: can't fixup geometry!" 251 1.1 thorpej rval="1" 252 1.1 thorpej return 253 1.1 thorpej fi 254 1.1 thorpej 255 1.1 thorpej cat << \__explain_motives_2 256 1.1 thorpej 257 1.1 thorpej Now that you have corrected the geometry of your disk, you may edit the 258 1.1 thorpej partition map. Don't forget to fill in the fsize (frag size), bsize 259 1.1 thorpej (filesystem block size), and cpg (cylinders per group) values. If you 260 1.1 thorpej are unsure what these should be, use: 261 1.1 thorpej 262 1.1 thorpej fsize: 1024 263 1.1 thorpej bsize: 4096 264 1.1 thorpej cpg: 16 265 1.1 thorpej 266 1.1 thorpej __explain_motives_2 267 1.1 thorpej echo -n "Press <return> to continue. " 268 1.1 thorpej getresp "" 269 1.1 thorpej 270 1.1 thorpej rval="0" 271 1.1 thorpej return 272 1.1 thorpej } 273 1.1 thorpej 274 1.1 thorpej hp300_init_label_hpib_disk() { 275 1.1 thorpej # $1 is the disk to label 276 1.1 thorpej 277 1.1 thorpej # We look though the boot messages attempting to find 278 1.1 thorpej # the model number for the provided disk. 279 1.1 thorpej _hpib_disktype="" 280 1.8 he if dmesg | grep_check_q "${1}: "; then 281 1.16 christos _hpib_disktype=HP$(dmesg | plain_grep "${1}: " | sort -u | \ 282 1.16 christos awk '{print $2}') 283 1.1 thorpej fi 284 1.16 christos if [ -z "${_hpib_disktype}" ]; then 285 1.1 thorpej echo "" 286 1.1 thorpej echo "ERROR: $1 doesn't appear to exist?!" 287 1.1 thorpej rval="1" 288 1.1 thorpej return 289 1.1 thorpej fi 290 1.1 thorpej 291 1.1 thorpej # Peer through /etc/disktab to see if the disk has a "default" 292 1.1 thorpej # layout. If it doesn't, we have to treat it like a SCSI disk; 293 1.1 thorpej # i.e. prompt for geometry, and create a default to place 294 1.1 thorpej # on the disk. 295 1.8 he if ! grep_check_q "${_hpib_disktype}[:|]" /etc/disktab; then 296 1.1 thorpej echo "" 297 1.1 thorpej echo "WARNING: can't find defaults for $1 ($_hpib_disktype)" 298 1.1 thorpej echo "" 299 1.1 thorpej hp300_init_label_scsi_disk $1 300 1.1 thorpej return 301 1.1 thorpej fi 302 1.1 thorpej 303 1.1 thorpej # We've found the defaults. Now use them to place an initial 304 1.1 thorpej # disklabel on the disk. 305 1.1 thorpej # XXX What kind of ugliness to we have to deal with to get around 306 1.1 thorpej # XXX stupidity on the part of disklabel semantics? 307 1.1 thorpej disklabel -W ${1} 308 1.1 thorpej if ! disklabel -r -w ${1} $_hpib_disktype; then 309 1.1 thorpej # Error message displayed by disklabel(8) 310 1.1 thorpej echo "" 311 1.1 thorpej echo "ERROR: can't install default label!" 312 1.1 thorpej echo "" 313 1.1 thorpej echo -n "Try a different method? [y] " 314 1.1 thorpej getresp "y" 315 1.1 thorpej case "$resp" in 316 1.1 thorpej y*|Y*) 317 1.1 thorpej hp300_init_label_scsi_disk $1 318 1.1 thorpej return 319 1.1 thorpej ;; 320 1.1 thorpej 321 1.1 thorpej *) 322 1.1 thorpej rval="1" 323 1.1 thorpej return 324 1.1 thorpej ;; 325 1.1 thorpej esac 326 1.1 thorpej fi 327 1.1 thorpej 328 1.1 thorpej rval="0" 329 1.1 thorpej return 330 1.1 thorpej } 331 1.1 thorpej 332 1.1 thorpej md_labeldisk() { 333 1.1 thorpej # $1 is the disk to label 334 1.1 thorpej 335 1.1 thorpej # Check to see if there is a disklabel present on the device. 336 1.1 thorpej # If so, we can just edit it. If not, we must first install 337 1.1 thorpej # a default label. 338 1.1 thorpej md_checkfordisklabel $1 339 1.1 thorpej case "$rval" in 340 1.1 thorpej 0) 341 1.1 thorpej # Go ahead and just edit the disklabel. 342 1.1 thorpej disklabel -W $1 343 1.1 thorpej disklabel -e $1 344 1.1 thorpej ;; 345 1.1 thorpej 346 1.1 thorpej *) 347 1.1 thorpej echo -n "No disklabel present, installing a default for type: " 348 1.1 thorpej case "$1" in 349 1.1 thorpej rd*) 350 1.1 thorpej echo "HP-IB" 351 1.1 thorpej hp300_init_label_hpib_disk $1 352 1.1 thorpej ;; 353 1.1 thorpej 354 1.1 thorpej sd*) 355 1.1 thorpej echo "SCSI" 356 1.1 thorpej hp300_init_label_scsi_disk $1 357 1.1 thorpej ;; 358 1.1 thorpej 359 1.1 thorpej *) 360 1.1 thorpej # Shouldn't happen, but... 361 1.1 thorpej echo "unknown?! Giving up." 362 1.1 thorpej return; 363 1.1 thorpej ;; 364 1.1 thorpej esac 365 1.1 thorpej 366 1.1 thorpej # Check to see if installing the default was 367 1.1 thorpej # successful. If so, go ahead and pop into the 368 1.1 thorpej # disklabel editor. 369 1.16 christos if [ "${rval}" != "0" ]; then 370 1.1 thorpej echo "Sorry, can't label this disk." 371 1.1 thorpej echo "" 372 1.1 thorpej return; 373 1.1 thorpej fi 374 1.1 thorpej 375 1.1 thorpej # We have some defaults installed. Pop into 376 1.1 thorpej # the disklabel editor. 377 1.1 thorpej disklabel -W $1 378 1.1 thorpej if ! disklabel -e $1; then 379 1.1 thorpej echo "" 380 1.1 thorpej echo "ERROR: couldn't set partition map for $1" 381 1.1 thorpej echo "" 382 1.1 thorpej fi 383 1.1 thorpej esac 384 1.1 thorpej } 385 1.1 thorpej 386 1.1 thorpej md_prep_disklabel() { 387 1.1 thorpej # $1 is the root disk 388 1.1 thorpej 389 1.1 thorpej # Make sure there's a disklabel there. If there isn't, puke after 390 1.1 thorpej # disklabel prints the error message. 391 1.1 thorpej md_checkfordisklabel $1 392 1.1 thorpej case "$resp" in 393 1.1 thorpej 1) 394 1.1 thorpej cat << \__md_prep_disklabel_1 395 1.1 thorpej 396 1.1 thorpej FATAL ERROR: There is no disklabel present on the root disk! You must 397 1.1 thorpej label the disk with SYS_INST before continuing. 398 1.1 thorpej 399 1.1 thorpej __md_prep_disklabel_1 400 1.1 thorpej exit 401 1.1 thorpej ;; 402 1.1 thorpej 403 1.1 thorpej 2) 404 1.1 thorpej cat << \__md_prep_disklabel_2 405 1.1 thorpej 406 1.1 thorpej FATAL ERROR: The disklabel on the root disk is corrupted! You must 407 1.1 thorpej re-label the disk with SYS_INST before continuing. 408 1.1 thorpej 409 1.1 thorpej __md_prep_disklabel_2 410 1.1 thorpej exit 411 1.1 thorpej ;; 412 1.1 thorpej 413 1.1 thorpej *) 414 1.1 thorpej ;; 415 1.1 thorpej esac 416 1.1 thorpej 417 1.1 thorpej # Give the user the opportinuty to edit the root disklabel. 418 1.1 thorpej cat << \__md_prep_disklabel_3 419 1.1 thorpej 420 1.1 thorpej You have already placed a disklabel onto the target root disk. 421 1.1 thorpej However, due to the limitations of the standalone program used 422 1.1 thorpej you may want to edit that label to change partition type information. 423 1.1 thorpej You will be given the opporunity to do that now. Note that you may 424 1.1 thorpej not change the size or location of any presently open partition. 425 1.1 thorpej 426 1.1 thorpej __md_prep_disklabel_3 427 1.1 thorpej echo -n "Do you wish to edit the root disklabel? [y] " 428 1.1 thorpej getresp "y" 429 1.1 thorpej case "$resp" in 430 1.1 thorpej y*|Y*) 431 1.1 thorpej disklabel -W $1 432 1.1 thorpej disklabel -e $1 433 1.1 thorpej ;; 434 1.1 thorpej 435 1.1 thorpej *) 436 1.1 thorpej ;; 437 1.1 thorpej esac 438 1.1 thorpej 439 1.1 thorpej cat << \__md_prep_disklabel_4 440 1.1 thorpej 441 1.1 thorpej You will now be given the opportunity to place disklabels on any additional 442 1.1 thorpej disks on your system. 443 1.1 thorpej __md_prep_disklabel_4 444 1.1 thorpej 445 1.16 christos _DKDEVS=$(rmel ${ROOTDISK} ${_DKDEVS}) 446 1.16 christos resp="not-done" # force at least one iteration 447 1.16 christos while [ "$resp" != "done" ]; do 448 1.1 thorpej labelmoredisks 449 1.1 thorpej done 450 1.2 thorpej } 451 1.2 thorpej 452 1.2 thorpej md_copy_kernel() { 453 1.12 tsutsui if [ ! -f /mnt/netbsd ]; then 454 1.12 tsutsui echo -n "No kernel set extracted. Copying miniroot kernel..." 455 1.12 tsutsui cp -p /netbsd /mnt/netbsd 456 1.12 tsutsui echo "done." 457 1.7 gmcgarry 458 1.12 tsutsui cat << __md_copy_kernel_1 459 1.7 gmcgarry 460 1.7 gmcgarry The INSTALL kernel from the miniroot has been copied to your root disk. 461 1.7 gmcgarry It has minimal facilities enabled. The first thing you should do after 462 1.7 gmcgarry installation is install an appropriate kernel for your machine (such as 463 1.7 gmcgarry the GENERIC kernel). 464 1.7 gmcgarry 465 1.7 gmcgarry __md_copy_kernel_1 466 1.12 tsutsui echo -n "Press <return> to continue. " 467 1.12 tsutsui getresp "" 468 1.12 tsutsui fi 469 1.1 thorpej } 470 1.1 thorpej 471 1.1 thorpej # Note, while they might not seem machine-dependent, the 472 1.1 thorpej # welcome banner and the punt message may contain information 473 1.1 thorpej # and/or instructions specific to the type of machine. 474 1.1 thorpej 475 1.1 thorpej md_welcome_banner() { 476 1.1 thorpej ( 477 1.1 thorpej echo "" 478 1.20 tsutsui echo "Welcome to the NetBSD/${MACHINE} ${RELEASE} installation program." 479 1.1 thorpej cat << \__welcome_banner_1 480 1.1 thorpej 481 1.1 thorpej This program is designed to help you install NetBSD on your system in a 482 1.1 thorpej simple and rational way. You'll be asked several questions, and it would 483 1.1 thorpej probably be useful to have your disk's hardware manual, the installation 484 1.1 thorpej notes, and a calculator handy. 485 1.1 thorpej 486 1.1 thorpej In particular, you will need to know some reasonably detailed 487 1.1 thorpej information about your disk's geometry. This program can determine 488 1.1 thorpej some limited information about certain specific types of HP-IB disks. 489 1.1 thorpej If you have SCSI disks, however, prior knowledge of disk geometry 490 1.1 thorpej is absolutely essential. The kernel will attempt to display geometry 491 1.1 thorpej information for SCSI disks during boot, if possible. If you did not 492 1.1 thorpej make it note of it before, you may wish to reboot and jot down your 493 1.1 thorpej disk's geometry before proceeding. 494 1.1 thorpej 495 1.1 thorpej As with anything which modifies your hard disk's contents, this 496 1.1 thorpej program can cause SIGNIFICANT data loss, and you are advised 497 1.1 thorpej to make sure your hard drive is backed up before beginning the 498 1.1 thorpej installation process. 499 1.1 thorpej 500 1.21 andvar Default answers are displayed in brackets after the questions. 501 1.1 thorpej You can hit Control-C at any time to quit, but if you do so at a 502 1.1 thorpej prompt, you may have to hit return. Also, quitting in the middle of 503 1.1 thorpej installation may leave your system in an inconsistent state. 504 1.1 thorpej 505 1.1 thorpej __welcome_banner_1 506 1.1 thorpej ) | more 507 1.1 thorpej } 508 1.1 thorpej 509 1.1 thorpej md_not_going_to_install() { 510 1.1 thorpej cat << \__not_going_to_install_1 511 1.1 thorpej 512 1.1 thorpej OK, then. Enter 'halt' at the prompt to halt the machine. Once the 513 1.1 thorpej machine has halted, power-cycle the system to load new boot code. 514 1.1 thorpej 515 1.1 thorpej __not_going_to_install_1 516 1.1 thorpej } 517 1.1 thorpej 518 1.1 thorpej md_congrats() { 519 1.1 thorpej cat << \__congratulations_1 520 1.1 thorpej 521 1.1 thorpej CONGRATULATIONS! You have successfully installed NetBSD! To boot the 522 1.1 thorpej installed system, enter halt at the command prompt. Once the system has 523 1.1 thorpej halted, power-cycle the machine in order to load new boot code. Make sure 524 1.1 thorpej you boot from the root disk. 525 1.1 thorpej 526 1.1 thorpej __congratulations_1 527 1.1 thorpej } 528 1.1 thorpej 529 1.4 thorpej md_native_fstype() { 530 1.4 thorpej # Nothing to do. 531 1.4 thorpej } 532 1.4 thorpej 533 1.4 thorpej md_native_fsopts() { 534 1.4 thorpej # Nothing to do. 535 1.4 thorpej } 536