diff --git a/distrib/hp300/miniroot/inst/install.sh b/distrib/hp300/miniroot/inst/install.sh index b4dc105adb8b..d9a4876768cf 100644 --- a/distrib/hp300/miniroot/inst/install.sh +++ b/distrib/hp300/miniroot/inst/install.sh @@ -1,5 +1,5 @@ #!/bin/sh -# $NetBSD: install.sh,v 1.1 1995/10/03 22:48:00 thorpej Exp $ +# $NetBSD: install.sh,v 1.2 1995/11/07 08:30:45 thorpej Exp $ # # Copyright (c) 1995 Jason R. Thorpe. # All rights reserved. @@ -49,6 +49,46 @@ getresp() { fi } +isin() { +# test the first argument against the remaining ones, return succes on a match + _a=$1; shift + while [ $# != 0 ]; do + if [ "$_a" = "$1" ]; then return 0; fi + shift + done + return 1 +} + +# +# machine dependent section +# +md_get_diskdevs() { + # return available disk devices + dmesg | grep "^rd.*:" | awk -F: '{print $1}' | sort -u + dmesg | grep "^sd.*:*cylinders" | awk -F: '{print $1}' | sort -u +} + +md_get_cddevs() { + # return available CD-ROM devices + dmesg | grep "sd.*:*CD-ROM" | awk -F: '{print $1}' | sort -u +} + +md_get_ifdevs() { + # return available network interfaces + dmesg | grep "^le.*:" | awk -F: '{print $1}' | sort -u +} + +md_installboot() { + # $1 is the root disk + + echo -n "Installing boot block..." + disklabel -W ${1} + disklabel -B ${1} + echo "done." +} + +# end of machine dependent section + do_mfs_mount() { umount $1 > /dev/null 2>&1 if ! mount_mfs -s 2048 swap $1 ; then @@ -75,12 +115,12 @@ program. Available disks are: __getrootdisk_1 - dmesg | grep "^rd" | grep "slave" - dmesg | grep "^sd" | grep "slave" + _DKDEVS=`md_get_diskdevs` + echo "$_DKDEVS" echo "" echo -n "Which disk is the root disk? " getresp "" - if dmesg | grep "^$resp " | grep "slave" > /dev/null ; then + if isin $resp $_DKDEVS ; then ROOTDISK="$resp" else echo "" @@ -108,8 +148,7 @@ labelmoredisks() { You may label the following disks: __labelmoredisks_1 - dmesg | grep "^rd" | grep "slave" | grep -v "${ROOTDISK} " - dmesg | grep "^sd" | grep "slave" | grep -v "${ROOTDISK} " + echo "$_DKDEVS" | grep -v "${ROOTDISK}" echo "" echo -n "Label which disk? [done] " getresp "done" @@ -118,8 +157,8 @@ __labelmoredisks_1 ;; *) - if dmesg | grep "^$resp " | grep "slave" \ - > /dev/null ; then + if echo "$_DKDEVS" | grep -v "${ROOTDISK}" | \ + grep "^$resp" > /dev/null ; then # XXX CODE ME echo "Yup, it exists." else @@ -168,7 +207,8 @@ You may configure the following network interfaces: __configurenetwork_1 - dmesg | grep "^le" | grep "ipl" + _IFS=`md_get_ifdevs` + echo $_IFS echo "" echo -n "Configure which interface? [done] " getresp "done" @@ -177,8 +217,7 @@ __configurenetwork_1 ;; *) - if dmesg | grep "^$resp " | grep "^le" | grep "ipl" \ - > /dev/null ; then + if isin $resp $_IFS ; then _interface_name=$resp # Get IP address @@ -333,11 +372,12 @@ install_cdrom() { # Get the cdrom device info cat << \__install_cdrom_1 -The following SCSI disk or disk-like devices are installed on your system; -please select the CD-ROM device containing the installation media: +The following CD-ROM devices are installed on your system; please select +the CD-ROM device containing the installation media: __install_cdrom_1 - dmesg | grep "^sd" | grep "rev" + _CDDEVS=`md_get_cddevs` + echo "$_CDDEVS" echo "" echo -n "Which is the CD-ROM with the installation media? [abort] " getresp "abort" @@ -348,8 +388,7 @@ __install_cdrom_1 ;; *) - if dmesg | grep "^$resp " | grep "slave" \ - > /dev/null ; then + if isin $resp $_CDDEVS ; then _cdrom_drive=$resp else echo "" @@ -552,7 +591,7 @@ __install_tape_2 2) ( cd /mnt - tar -zxvpf $TAPE + dd if=$TAPE | tar -xvpf - ) ;; @@ -565,6 +604,31 @@ __install_tape_2 echo "Extraction complete." } +get_timezone() { +cat << \__get_timezone_1 + +Select a time zone: + +__get_timezone_1 + ls /usr/share/zoneinfo # XXX + echo "" + if [ X"$TZ" = "X" ]; then + TZ=`ls -l /etc/timezone 2>/dev/null | awk -F/ '{print $NF}'` + fi + echo -n "What timezone are you in [$TZ]? " + getresp "$TZ" + case "$resp" in + "") + echo "Timezone defaults to GMT" + TZ="GMT" + ;; + *) + TZ="$resp" + ;; + esac + export TZ +} + echo "" echo "Welcome to the NetBSD ${VERSION} installation program." cat << \__welcome_banner_1 @@ -941,32 +1005,66 @@ Make sure The sets are either on a local device (i.e. tape, CD-ROM) or on a network server. __install_sets_1 -resp="" # force at least one iteration -while [ "X${resp}" = X"" ]; do - echo -n "Install from (f)tp, (t)ape, (C)D-ROM, or (N)FS? [f] " - getresp "f" +if [ -f /base.tar.gz ]; then + echo -n "Install from sets in the current root filesystem? [y] " + getresp "y" case "$resp" in - f*|F*) - install_ftp + y*|Y*) + for _f in /*.tar.gz; do + echo -n "Install $_f ? [y]" + getresp "y" + case "$resp" in + y*|Y*) + cat $_f | (cd /mnt; tar -zxvpf -) + _yup="TRUE" + ;; + *) + ;; + esac + echo "Extraction complete." + done ;; - - t*|T*) - install_tape - ;; - - c*|C*) - install_cdrom - ;; - - n*|N*) - install_nfs - ;; - *) - echo "Invalid response: $resp" - resp="" + _yup="FALSE" ;; esac +else + _yup="FALSE" +fi + +# Go on prodding for alternate locations +resp="" # force at least one iteration +while [ "X${resp}" = X"" ]; do + # If _yup is not FALSE, it means that we extracted sets above. + # If that's the case, bypass the menu the first time. + if [ X"$_yup" = X"FALSE" ]; then + echo -n "Install from (f)tp, (t)ape, (C)D-ROM, or (N)FS? [f] " + getresp "f" + case "$resp" in + f*|F*) + install_ftp + ;; + + t*|T*) + install_tape + ;; + + c*|C*) + install_cdrom + ;; + + n*|N*) + install_nfs + ;; + + *) + echo "Invalid response: $resp" + resp="" + ;; + esac + else + _yup="FALSE" # So we'll ask next time + fi # Give the user the opportunity to extract more sets. They don't # necessarily have to come from the same media. @@ -984,23 +1082,35 @@ while [ "X${resp}" = X"" ]; do esac done +# Get timezone info +get_timezone + # Copy in configuration information and make devices in target root. ( cd /tmp for file in fstab hostname.* hosts myname mygate; do if [ -f $file ]; then - echo "Copying $file..." + echo -n "Copying $file..." cp $file /mnt/etc/$file + echo "done." fi done + echo -n "Installing timezone link..." + rm -f /mnt/etc/localtime + ln -s /usr/share/zoneinfo/$TZ /mnt/etc/localtime + echo "done." + echo -n "Making devices..." cd /mnt/dev sh MAKEDEV all echo "done." - echo "Copying kernel..." + echo -n "Copying kernel..." cp /netbsd /mnt/netbsd + echo "done." + + md_installboot ${ROOTDISK} ) # Unmount all filesystems and check their integrity. @@ -1008,11 +1118,6 @@ umount -a echo "Checking filesystem integrity..." fsck -pf -# Install boot code on target disk. -echo "Installing boot block..." -disklabel -W ${ROOTDISK} -disklabel -B ${ROOTDISK} - cat << \__congratulations_1 CONGRATULATIONS! You have successfully installed NetBSD on your hard disk!