diff options
author | Theo de Raadt <deraadt@cvs.openbsd.org> | 1996-01-07 13:23:11 +0000 |
---|---|---|
committer | Theo de Raadt <deraadt@cvs.openbsd.org> | 1996-01-07 13:23:11 +0000 |
commit | 0572179d10a5477e5ebb58a0170eb8ee8c5b763c (patch) | |
tree | 4ec8f4d167113c5211c5eb2b368c44a2e5090964 | |
parent | 1d8b4eab300af38356404b265e7613bb8042a255 (diff) |
update from netbsd
-rw-r--r-- | distrib/miniroot/Makefile | 5 | ||||
-rw-r--r-- | distrib/miniroot/install.sh | 424 | ||||
-rw-r--r-- | distrib/miniroot/install.sub (renamed from distrib/sparc/upgrade.sh) | 750 | ||||
-rw-r--r-- | distrib/miniroot/list | 8 | ||||
-rw-r--r-- | distrib/miniroot/upgrade.sh | 314 | ||||
-rw-r--r-- | distrib/sparc/install.md | 175 | ||||
-rw-r--r-- | distrib/sparc/install.sh | 1289 | ||||
-rw-r--r-- | distrib/sparc/miniroot/list | 6 |
8 files changed, 1263 insertions, 1708 deletions
diff --git a/distrib/miniroot/Makefile b/distrib/miniroot/Makefile index 32da652eda3..d92379b4b89 100644 --- a/distrib/miniroot/Makefile +++ b/distrib/miniroot/Makefile @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.1 1995/12/18 22:47:26 pk Exp $ +# $NetBSD: Makefile,v 1.2 1996/01/06 22:40:58 pk Exp $ # Revision is 1.1A REV= 11A @@ -47,7 +47,8 @@ ${CBIN}: ${CBIN}.mk ${CBIN}.cache ${CBIN}.c make -f ${CBIN}.mk all clean cleandir: - /bin/rm -f core ${IMAGE} ${CBIN} ${CBIN}.mk ${CBIN}.cache *.o *.lo *.c + /bin/rm -f core ${IMAGE} ${CBIN} ${CBIN}.mk ${CBIN}.cache \ + ${CBIN}.conf *.o *.lo *.c .include <bsd.obj.mk> .include <bsd.subdir.mk> diff --git a/distrib/miniroot/install.sh b/distrib/miniroot/install.sh new file mode 100644 index 00000000000..440fff8b850 --- /dev/null +++ b/distrib/miniroot/install.sh @@ -0,0 +1,424 @@ +#!/bin/sh +# $NetBSD: install.sh,v 1.1 1996/01/06 22:45:13 pk Exp $ +# +# Copyright (c) 1995 Jason R. Thorpe. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. All advertising materials mentioning features or use of this software +# must display the following acknowledgement: +# This product includes software developed for the NetBSD Project +# by Jason R. Thorpe. +# 4. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +# NetBSD installation script. +# In a perfect world, this would be a nice C program, with a reasonable +# user interface. + +FILESYSTEMS="/tmp/filesystems" # used thoughout +FQDN="" # domain name + +trap "umount /tmp > /dev/null 2>&1" 0 + +MODE="install" + +# include machine-dependent functions +# The following functions must be provided: +# md_get_diskdevs() - return available disk devices +# md_get_cddevs() - return available CD-ROM devices +# md_get_ifdevs() - return available network interfaces +# md_installboot() - install boot-blocks on disk +# md_checkfordisklabel() - check for valid disklabel +# md_labeldisk() - put label on a disk +# md_welcome_banner() - display friendly message +# md_not_going_to_install() - display friendly message +# md_congrats() - display friendly message +. install.md + +# include common subroutines +. install.sub + + +# Good {morning,afternoon,evening,night}. +md_welcome_banner +echo -n "Proceed with installation? [n] " +getresp "n" +case "$resp" in + y*|Y*) + echo "Cool! Let's get to it..." + ;; + *) + md_not_going_to_install + exit + ;; +esac + +# XXX Work around vnode aliasing bug (thanks for the tip, Chris...) +ls -l /dev > /dev/null 2>&1 + +# Deal with terminal issues +md_set_term + +# Get timezone info +get_timezone + +# We don't like it, but it sure makes a few things a lot easier. +do_mfs_mount "/tmp" "2048" + +# Install the shadowed disktab file; lets us write to it for temporary +# purposes without mounting the miniroot read-write. +cp /etc/disktab.shadow /tmp/disktab.shadow + +while [ "X${ROOTDISK}" = "X" ]; do + getrootdisk +done + +# Make sure there's a disklabel there. If there isn't, puke after +# disklabel prints the error message. +md_checkfordisklabel ${ROOTDISK} +case "$resp" in + 1) + cat << \__disklabel_not_present_1 + +FATAL ERROR: There is no disklabel present on the root disk! You must +label the disk with SYS_INST before continuing. + +__disklabel_not_present_1 + exit + ;; + + 2) + cat << \__disklabel_corrupted_1 + +FATAL ERROR: The disklabel on the root disk is corrupted! You must +re-label the disk with SYS_INST before continuing. + +__disklabel_corrupted_1 + exit + ;; + + *) + ;; +esac + +# Give the user the opportinuty to edit the root disklabel. +cat << \__disklabel_notice_1 + +You have already placed a disklabel onto the target root disk. +However, due to the limitations of the standalone program used +you may want to edit that label to change partition type information. +You will be given the opporunity to do that now. Note that you may +not change the size or location of any presently open partition. + +__disklabel_notice_1 +echo -n "Do you wish to edit the root disklabel? [y] " +getresp "y" +case "$resp" in + y*|Y*) + md_prep_disklabel + disklabel -W ${ROOTDISK} + disklabel -e ${ROOTDISK} + ;; + + *) + ;; +esac + +cat << \__disklabel_notice_2 + +You will now be given the opportunity to place disklabels on any additional +disks on your system. +__disklabel_notice_2 + +_DKDEVS=`rmel ${ROOTDISK} ${_DKDEVS}` +resp="X" # force at least one iteration +while [ "X$resp" != X"done" ]; do + labelmoredisks +done + +# Assume partition 'a' of $ROOTDISK is for the root filesystem. Loop and +# get the rest. +# XXX ASSUMES THAT THE USER DOESN'T PROVIDE BOGUS INPUT. +cat << \__get_filesystems_1 + +You will now have the opportunity to enter filesystem information. +You will be prompted for device name and mount point (full path, +including the prepending '/' character). + +Note that these do not have to be in any particular order. You will +be given the opportunity to edit the resulting 'fstab' file before +any of the filesystems are mounted. At that time you will be able +to resolve any filesystem order dependencies. + +__get_filesystems_1 + +echo "The following will be used for the root filesystem:" +echo " ${ROOTDISK}a /" + +echo "${ROOTDISK}a /" > ${FILESYSTEMS} + +resp="X" # force at least one iteration +while [ "X$resp" != X"done" ]; do + echo "" + echo -n "Device name? [done] " + getresp "done" + case "$resp" in + done) + ;; + + *) + _device_name=`basename $resp` + + # force at least one iteration + _first_char="X" + while [ "X${_first_char}" != X"/" ]; do + echo -n "Mount point? " + getresp "" + _mount_point=$resp + if [ "X${_mount_point}" = X"/" ]; then + # Invalid response; no multiple roots + _first_char="X" + else + _first_char=`echo ${_mount_point} | \ + cut -c 1` + fi + done + echo "${_device_name} ${_mount_point}" >> \ + ${FILESYSTEMS} + resp="X" # force loop to repeat + ;; + esac +done + +echo "" +echo "You have configured the following devices and mount points:" +echo "" +cat ${FILESYSTEMS} +echo "" +echo "Filesystems will now be created on these devices. If you made any" +echo -n "mistakes, you may edit this now. Edit? [n] " +getresp "n" +case "$resp" in + y*|Y*) + vi ${FILESYSTEMS} + ;; + *) + ;; +esac + +# Loop though the file, place filesystems on each device. +echo "Creating filesystems..." +( + while read line; do + _device_name=`echo $line | awk '{print $1}'` + newfs /dev/r${_device_name} + echo "" + done +) < ${FILESYSTEMS} + +# Get network configuration information, and store it for placement in the +# root filesystem later. +cat << \__network_config_1 +You will now be given the opportunity to configure the network. This will +be useful if you need to transfer the installation sets via FTP or NFS. +Even if you choose not to transfer installation sets that way, this +information will be preserved and copied into the new root filesystem. + +Note, enter all symbolic host names WITHOUT the domain name appended. +I.e. use 'hostname' NOT 'hostname.domain.name'. + +__network_config_1 +echo -n "Configure the network? [y] " +getresp "y" +case "$resp" in + y*|Y*) + echo -n "Enter system hostname: " + resp="" # force at least one iteration + while [ "X${resp}" = X"" ]; do + getresp "" + done + hostname $resp + echo $resp > /tmp/myname + + echo -n "Enter DNS domain name: " + resp="" # force at least one iteration + while [ "X${resp}" = X"" ]; do + getresp "" + done + FQDN=$resp + + configurenetwork + + echo -n "Enter IP address of default route: [none] " + getresp "none" + if [ "X${resp}" != X"none" ]; then + route delete default > /dev/null 2>&1 + if route add default $resp > /dev/null ; then + echo $resp > /tmp/mygate + fi + fi + + echo -n "Enter IP address of primary nameserver: [none] " + getresp "none" + if [ "X${resp}" != X"none" ]; then + echo "domain $FQDN" > /tmp/resolv.conf + echo "nameserver $resp" >> /tmp/resolv.conf + echo "search $FQDN" >> /tmp/resolv.conf + + echo -n "Would you like to use the nameserver now? [y] " + getresp "y" + case "$resp" in + y*|Y*) + cp /tmp/resolv.conf \ + /tmp/resolv.conf.shadow + ;; + + *) + ;; + esac + fi + + echo "" + echo "The host table is as follows:" + echo "" + cat /tmp/hosts + echo "" + echo "You may want to edit the host table in the event that" + echo "you need to mount an NFS server." + echo -n "Would you like to edit the host table? [n] " + getresp "n" + case "$resp" in + y*|Y*) + vi /tmp/hosts + ;; + + *) + ;; + esac + + cat << \__network_config_2 + +You will now be given the opportunity to escape to the command shell to +do any additional network configuration you may need. This may include +adding additional routes, if needed. In addition, you might take this +opportunity to redo the default route in the event that it failed above. +If you do change the default route, and wish for that change to carry over +to the installed system, execute the following command at the shell +prompt: + + echo <ip_address_of_gateway> > /tmp/mygate + +where <ip_address_of_gateway> is the IP address of the default router. + +__network_config_2 + echo -n "Escape to shell? [n] " + getresp "n" + case "$resp" in + y*|Y*) + echo "Type 'exit' to return to install." + sh + ;; + + *) + ;; + esac + ;; + *) + ;; +esac + +# Now that the network has been configured, it is safe to configure the +# fstab. +awk '{ + if ($2 == "/") + printf("/dev/%s %s ffs rw 1 1\n", $1, $2) + else + printf("/dev/%s %s ffs rw 1 2\n", $1, $2) +}' < ${FILESYSTEMS} > /tmp/fstab + +echo "The fstab is configured as follows:" +echo "" +cat /tmp/fstab +cat << \__fstab_config_1 + +You may wish to edit the fstab. For example, you may need to resolve +dependencies in the order which the filesystems are mounted. You may +also wish to take this opportunity to place NFS mounts in the fstab. +This would be especially useful if you plan to keep '/usr' on an NFS +server. + +__fstab_config_1 +echo -n "Edit the fstab? [n] " +getresp "n" +case "$resp" in + y*|Y*) + vi /tmp/fstab + ;; + + *) + ;; +esac + +echo "" +munge_fstab /tmp/fstab /tmp/fstab.shadow +mount_fs /tmp/fstab.shadow + +install_sets $ALLSETS + +# Copy in configuration information and make devices in target root. +( + cd /tmp + for file in fstab hostname.* hosts myname mygate resolv.conf; do + if [ -f $file ]; then + 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..." + pid=`twiddle` + cd /mnt/dev + sh MAKEDEV all + kill $pid + echo "done." + + echo -n "Copying kernel..." + cp -p /netbsd /mnt/netbsd + echo "done." + + md_installboot ${ROOTDISK} +) + +unmount_fs /tmp/fstab.shadow + +# Pat on the back. +md_congrats + +# ALL DONE! +exit 0 diff --git a/distrib/sparc/upgrade.sh b/distrib/miniroot/install.sub index 7ec8b2af240..85a081886ce 100644 --- a/distrib/sparc/upgrade.sh +++ b/distrib/miniroot/install.sub @@ -1,5 +1,5 @@ #!/bin/sh -# $NetBSD: upgrade.sh,v 1.5 1995/11/16 22:29:48 pk Exp $ +# $NetBSD: install.sub,v 1.1 1996/01/06 22:45:13 pk Exp $ # # Copyright (c) 1995 Jason R. Thorpe. # All rights reserved. @@ -31,16 +31,14 @@ # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # -# NetBSD installation script. -# In a perfect world, this would be a nice C program, with a reasonable -# user interface. +# NetBSD installation/upgrade script - common subroutines. -VERSION=1.1 +VERSION=1.1A +export VERSION # XXX needed in subshell ROOTDISK="" # filled in below -FILESYSTEMS="/tmp/filesystems" # used thoughout -FQDN="" # domain name -trap "umount /tmp /mnt/usr /mnt > /dev/null 2>&1" 0 +ALLSETS="base comp etc games man misc text" # default install sets +UPGRSETS="base comp games man misc text" # default upgrade sets getresp() { read resp @@ -63,14 +61,16 @@ rmel() { # remove first argument from list formed by the remaining arguments _a=$1; shift while [ $# != 0 ]; do - if [ "$_a" != "$1" ]; then echo "$1"; fi + if [ "$_a" != "$1" ]; then + echo "$1"; + fi shift done } -twiddle() -{ - while : ; do +twiddle() { +# spin the propeller so we don't get bored + while : ; do sleep 1; echo -n "/"; sleep 1; echo -n "-"; sleep 1; echo -n "\\"; @@ -78,40 +78,14 @@ twiddle() done > /dev/tty & echo $! } -set_terminal() { - echo -n "Specify terminal type [sun]: " - getresp "sun" - TERM="$resp" - export TERM -} - -# -# machine dependent section -# -md_get_diskdevs() { - # return available disk devices - dmesg | egrep "(^sd[0-9]|^x[dy][0-9])" | cut -d" " -f1 | sort -u -} - -md_get_cddevs() { - # return available CDROM devices - dmesg | grep "^cd[0-9]" | cut -d" " -f1 | sort -u -} - -md_get_ifdevs() { - # return available network devices - dmesg | egrep "(^le[0-9]|^ie[0-9])" | cut -d" " -f1 | sort -u -} - -md_installboot() { - echo "Installing boot block..." - /usr/mdec/binstall -v ffs /mnt -} - +. install.md do_mfs_mount() { + # $1 is the mount point + # $2 is the size in DEV_BIZE blocks + umount $1 > /dev/null 2>&1 - if ! mount_mfs -s 2048 swap $1 ; then + if ! mount_mfs -s $2 swap $1 ; then cat << \__mfs_failed_1 FATAL ERROR: Can't mount the memory filesystem. @@ -149,37 +123,23 @@ __getrootdisk_1 fi } -checkfordisklabel() { - disklabel $1 > /dev/null 2> /tmp/checkfordisklabel - if grep "no disk label" /tmp/checkfordisklabel; then - rval="1" - elif grep "disk label corrupted" /tmp/checkfordisklabel; then - rval="2" - else - rval="0" - fi - - rm -f /tmp/checkfordisklabel -} - labelmoredisks() { cat << \__labelmoredisks_1 You may label the following disks: __labelmoredisks_1 - _DKDEV=`rmel "${ROOTDISK}"` - echo $_DKDEVS + echo "$_DKDEVS" echo "" echo -n "Label which disk? [done] " getresp "done" case "$resp" in - "done") + done) ;; *) if echo "$_DKDEVS" | grep "^$resp" > /dev/null ; then - disklabel -e $resp + md_labeldisk $resp else echo "" echo "The disk $resp does not exist." @@ -219,73 +179,174 @@ addifconfig() { addhostent $3 $2 } - configurenetwork() { + local _ifsdone + local _ifs + + _IFS=`md_get_ifdevs` + _ifsdone="" + resp="" # force at least one iteration + while [ "X${resp}" != X"done" ]; do cat << \__configurenetwork_1 -You may configure the following network interfaces: +You may configure the following network interfaces (the interfaces +marked with [X] have been succesfully configured): __configurenetwork_1 - _IFS=`md_get_ifdevs` - echo $_IFS - echo "" - echo -n "Configure which interface? [done] " - getresp "done" - case "$resp" in + for _ifs in $_IFS; do + if isin $_ifs $_ifsdone ; then + echo -n "[X] " + else + echo -n " " + fi + echo $_ifs + done + echo "" + echo -n "Configure which interface? [done] " + getresp "done" + case "$resp" in "done") ;; - *) - if isin $resp $_IFS ; then - _interface_name=$resp - - # remove from list - _IFS=`rmel $resp "$_IFS"` - - # Get IP address - resp="" # force one iteration - while [ "X${resp}" = X"" ]; do - echo -n "IP address? " - getresp "" - _interface_ip=$resp - done - - # Get symbolic name - resp="" # force one iteration - while [ "X${resp}" = X"" ]; do - echo -n "Symbolic name? " - getresp "" - _interface_symname=$resp - done - - # Get netmask - resp="" # force one iteration - while [ "X${resp}" = X"" ]; do - echo -n "Netmask? " - getresp "" - _interface_mask=$resp - done - - # Configure the interface. If it - # succeeds, add it to the permanent - # network configuration info. - ifconfig ${_interface_name} down - if ifconfig ${_interface_name} inet \ - ${_interface_ip} \ - netmask ${_interface_mask} up ; then - addifconfig \ - ${_interface_name} \ - ${_interface_symname} \ - ${_interface_ip} \ - ${_interface_mask} + _ifs=$resp + if isin $_ifs $_IFS ; then + if configure_ifs $_ifs ; then + _ifsdone="$_ifs $_ifsdone" fi else - echo "" - echo "The interface $resp does not exist." + echo "Invalid response: \"$resp\" is not in list" fi ;; - esac + esac + done +} + +configure_ifs() { + + _interface_name=$1 + + # Get IP address + resp="" # force one iteration + while [ "X${resp}" = X"" ]; do + echo -n "IP address? " + getresp "" + _interface_ip=$resp + done + + # Get symbolic name + resp="" # force one iteration + while [ "X${resp}" = X"" ]; do + echo -n "Symbolic (host) name? " + getresp "" + _interface_symname=$resp + done + + # Get netmask + resp="" # force one iteration + while [ "X${resp}" = X"" ]; do + echo -n "Netmask? " + getresp "" + _interface_mask=$resp + done + + # Configure the interface. If it + # succeeds, add it to the permanent + # network configuration info. + ifconfig ${_interface_name} down + if ifconfig ${_interface_name} inet \ + ${_interface_ip} \ + netmask ${_interface_mask} up ; then + addifconfig \ + ${_interface_name} \ + ${_interface_symname} \ + ${_interface_ip} \ + ${_interface_mask} + return 0 + fi + return 1 +} + +# Much of this is gratuitously stolen from /etc/netstart. +enable_network() { + + # Set up the hostname. + if [ ! -f /mnt/etc/myname ]; then + echo "ERROR: no /etc/myname!" + return 1 + fi + hostname=`cat /mnt/etc/myname` + hostname $hostname + + # configure all the interfaces which we know about. +( + tmp="$IFS" + IFS="$IFS." + set -- `echo /mnt/etc/hostname*` + IFS=$tmp + unset tmp + + while [ $# -ge 2 ] ; do + shift # get rid of "hostname" + ( + read af name mask bcaddr extras + read dt dtaddr + + if [ ! -n "$name" ]; then + echo "/etc/hostname.$1: invalid network configuration file" + exit + fi + + cmd="ifconfig $1 $af $name " + if [ "${dt}" = "dest" ]; then cmd="$cmd $dtaddr"; fi + if [ -n "$mask" ]; then cmd="$cmd netmask $mask"; fi + if [ -n "$bcaddr" -a "X$bcaddr" != "XNONE" ]; then + cmd="$cmd broadcast $bcaddr"; + fi + cmd="$cmd $extras" + + $cmd + ) < /mnt/etc/hostname.$1 + shift + done +) + + # set the address for the loopback interface + ifconfig lo0 inet localhost + + # use loopback, not the wire + route add $hostname localhost + + # /etc/mygate, if it exists, contains the name of my gateway host + # that name must be in /etc/hosts. + if [ -f /mnt/etc/mygate ]; then + route delete default > /dev/null 2>&1 + route add default `cat /mnt/etc/mygate` + fi + + # enable the resolver, if appropriate. + if [ -f /mnt/etc/resolv.conf ]; then + _resolver_enabled="TRUE" + cp /mnt/etc/resolv.conf /tmp/resolv.conf.shadow + fi + + # Display results... + echo "Network interface configuration:" + ifconfig -a + + echo "" + + if [ "X${_resolver_enabled}" = X"TRUE" ]; then + netstat -r + echo "" + echo "Resolver enabled." + else + netstat -rn + echo "" + echo "Resolver not enabled." + fi + + return 0 } install_ftp() { @@ -356,7 +417,7 @@ __install_ftp_2 fi _ftp_file=`echo ${resp} | awk '{print $1}'` - echo "get ${_ftp_file} |\"tar -zxvpf -\"" >> \ + echo "get ${_ftp_file} |\"tar --unlink -zxvpf -\"" >> \ /tmp/ftp-script.sh done @@ -431,12 +492,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 _CDDEVS=`md_get_cddevs` - echo "$_CDDEVS" + echo "$_CDDEVS" echo "" echo -n "Which is the CD-ROM with the installation media? [abort] " getresp "abort" @@ -498,8 +559,8 @@ __install_cdrom_2 ;; esac done + # Mount the CD-ROM - mkdir /mnt2 > /dev/null 2>&1 if ! mount -t ${_cdrom_filesystem} -o ro \ /dev/${_cdrom_drive}${_cdrom_partition} /mnt2 ; then echo "Cannot mount CD-ROM drive. Aborting." @@ -550,6 +611,7 @@ install_nfs() { esac # Mount the server + mkdir /mnt2 > /dev/null 2>&1 if ! mount_nfs $_nfs_tcp ${_nfs_server_ip}:${_nfs_server_path} \ /mnt2 ; then echo "Cannot mount NFS server. Aborting." @@ -638,19 +700,20 @@ There are 2 different ways the file can be stored on tape: __install_tape_2 resp="" # force one iteration while [ "X${resp}" = X"" ]; do + echo -n "Which way is it? [1] " getresp "1" case "$resp" in 1) ( cd /mnt - dd if=$TAPE | tar -zxvpf - + dd if=$TAPE | tar --unlink -zxvpf - ) ;; 2) ( cd /mnt - dd if=$TAPE | tar -xvpf - + dd if=$TAPE | tar --unlink -xvpf - ) ;; @@ -720,241 +783,58 @@ __get_timezone_1 done } -echo "" -echo "Welcome to the NetBSD/sparc ${VERSION} upgrade program." -cat << \__welcome_banner_1 - -This program is designed to help you put NetBSD on your disk, -in a simple and rational way. You'll be asked several questions, -and it would probably be useful to have your disk's hardware -manual, the installation notes, and a calculator handy. - -As with anything which modifies your disk's contents, this -program can cause SIGNIFICANT data loss, and you are advised -to make sure your data is backed up before beginning the -installation process. - -Default answers are displyed in brackets after the questions. -You can hit Control-C at any time to quit, but if you do so at a -prompt, you may have to hit return. Also, quitting in the middle of -installation may leave your system in an inconsistent state. - -__welcome_banner_1 -echo -n "Proceed with installation? [n] " -getresp "n" -case "$resp" in - y*|Y*) - echo "Cool! Let's get to it..." - ;; - *) - cat << \__welcome_banner_2 - -OK, then. Enter 'halt' at the prompt to halt the machine. Once the -machine has halted, power-cycle the system to load new boot code. - -__welcome_banner_2 - exit - ;; -esac - -set_terminal - -# We don't like it, but it sure makes a few things a lot easier. -##do_mfs_mount "/tmp" - -# Install the shadowed disktab file; lets us write to it for temporary -# purposes without mounting the miniroot read-write. -##cp /etc/disktab.shadow /tmp/disktab.shadow - -while [ "X${ROOTDISK}" = "X" ]; do - getrootdisk -done - -# Make sure there's a disklabel there. If there isn't, puke after -# disklabel prints the error message. -checkfordisklabel ${ROOTDISK} -case $rval in - 1) - cat << \__disklabel_not_present_1 - -FATAL ERROR: There is no disklabel present on the root disk! You must -label the disk before continuing. - -__disklabel_not_present_1 - exit - ;; - - 2) - cat << \__disklabel_corrupted_1 - -FATAL ERROR: The disklabel on the root disk is corrupted! You must -re-label the disk before continuing. - -__disklabel_corrupted_1 - exit - ;; - - *) - ;; -esac - -cat << \__mount_root -Ready to mount your existing root filesystem. This is normally -the `a' partition on your boot disk. - -__mount_root - -while : ; do - echo -n "Root filesystem? [${ROOTDISK}a] " - getresp "${ROOTDISK}a" - case "$resp" in - *) - mount /dev/$resp /mnt - if [ $? = 0 ]; then - break 2; - fi - echo "$resp could not be mounted" - ;; - esac -done - -# Look in /mnt/etc/fstab for /usr filesystem. -awk '{ - if ($2 == "/" || $2 == "/usr") { - print - } -}' < /mnt/etc/fstab > /tmp/fstab - -echo "These filesystems are configured to be used for this upgrade:" -echo "" -cat /tmp/fstab -cat << \__fstab_config_1 - -You may wish to edit the fstab. For example, you may need to resolve -dependencies in the order which the filesystems are mounted. You may -also wish to take this opportunity to place NFS mounts in the fstab. -This would be especially useful if you plan to keep '/usr' on an NFS -server. - -You also need to edit the fstab file if your disk has been assigned a -different unit number by the currently running kernel. For instance, -a SCSI disk that was known as `sd0' in your existing configuration -might appear as `sd3' here. If this is the case, change all old -unit numbers to the new unit number. - -__fstab_config_1 -echo -n "Edit the fstab? [n] " -getresp "n" -case "$resp" in - y*|Y*) - vi /tmp/fstab - ;; - - *) - ;; -esac - -# Now that the 'real' fstab is configured, we munge it into a 'shadow' -# fstab which we'll use for mounting and unmounting all of the target -# filesystems relative to /mnt. Mount all filesystems. -awk '{ - if ($2 == "/") - printf("%s /mnt %s %s %s %s\n", $1, $3, $4, $5, $6) - else - printf("%s /mnt%s %s %s %s %s\n", $1, $2, $3, $4, $5, $6) -}' < /tmp/fstab > /tmp/fstab.shadow - -echo "" - -# Must mount filesystems manually, one at a time, so we can make sure the -# mount points exist. -( - while read line; do - _dev=`echo $line | awk '{print $1}'` - _mp=`echo $line | awk '{print $2}'` - _fstype=`echo $line | awk '{print $3}'` - _opt=`echo $line | awk '{print $4}'` - - # If not the root filesystem, make sure the mount - # point is present. - if [ "X${_mp}" != X"/mnt" ]; then - mkdir -p $_mp - # note: root already mounted on /mnt - else - continue; - fi - - # Mount the filesystem. If the mount fails, exit - # with an error condition to tell the outer - # layer to bail. - if ! mount -v -t $_fstype -o $_opt $_dev $_mp ; then - # error message displayed by mount - exit 1 - fi - done -) < /tmp/fstab.shadow - -if [ "X${?}" != X"0" ]; then - cat << \__mount_filesystems_1 - -FATAL ERROR: Cannot mount filesystems. Double-check your configuration -and restart the installation process. - -__mount_filesystems_1 - exit -fi - +install_sets() +{ +# arguments: the base names of the distribution sets to consider # Ask the user which media to load the distribution from. cat << \__install_sets_1 -It is now time to extract the installation sets onto the disk. +It is now time to extract the installation sets onto the hard disk. Make sure The sets are either on a local device (i.e. tape, CD-ROM) or on a network server. __install_sets_1 - -ALLSETS="base comp etc games man misc text" -UPGRSETS="base comp games man misc text" -RELDIR= - -if [ -f $RELDIR/base.tar.gz ]; then - echo -n "Install from sets in the current root filesystem? [y] " +if [ -f $RELDIR/$1.tar.gz ]; then + echo -n "Install from sets in the current root filesystem? [y] " getresp "y" case "$resp" in - y*|Y*) - for _f in $UPGRSETS; do - if [ ! -f $RELDIR/${_f}.tar.gz ]; then - continue; - fi - echo -n "Install set \"$_f\" ? [y]" - getresp "y" - case "$resp" in - y*|Y*) - cat $RELDIR/${_f}.tar.gz | - (cd /mnt; tar -zxvpf -) - _yup=X - ;; - *) - continue; - ;; - esac + y*|Y*) + for _f do + if [ ! -f $RELDIR/${_f}.tar.gz ]; then + continue + fi + echo -n "Install \"$_f\" ? [y]" + getresp "y" + case "$resp" in + y*|Y*) + cat $RELDIR/${_f}.tar.gz | + (cd /mnt; tar --unlink -zxvpf -) + _yup="TRUE" echo "Extraction complete." - done - resp="$_yup" - ;; - *) - resp="" - ;; + ;; + *) + echo "Skipping \"$_f\"." + ;; + esac + done + ;; + *) + _yup="FALSE" + ;; esac else - # Go on prodding for alternate locations - resp="" # force at least one iteration + _yup="FALSE" fi +# Go on prodding for alternate locations +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" - case "$resp" in + # 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 ;; @@ -975,7 +855,10 @@ while [ "X${resp}" = X"" ]; do echo "Invalid response: $resp" resp="" ;; - esac + 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. @@ -983,90 +866,133 @@ while [ "X${resp}" = X"" ]; do echo -n "Extract more sets? [n] " getresp "n" case "$resp" in - y*|Y*) - # Force loop to repeat - resp="" - ;; - - *) - ;; - esac -done - -#get_timezone - -echo -n "Do you want to install the NetBSD bootblocks on your boot disk? [y]" -getresp "y" -case "$resp" in y*|Y*) - _INSTBOOT="Y" + # Force loop to repeat + resp="" ;; *) - _INSTBOOT="N" ;; -esac + esac +done +} -# Copy in configuration information and make devices in target root. -( - echo -n "Making devices..." - cd /mnt/dev - pid=`twiddle` - sh MAKEDEV all - kill $pid - echo "done." +munge_fstab() +{ + local _fstab + local _fstab_shadow + # Now that the 'real' fstab is configured, we munge it into a 'shadow' + # fstab which we'll use for mounting and unmounting all of the target + # filesystems relative to /mnt. Mount all filesystems. + _fstab=$1 + _fstab_shadow=$2 + awk '{ + if ($2 == "/") + printf("%s /mnt %s %s %s %s\n", $1, $3, $4, $5, $6) + else + printf("%s /mnt%s %s %s %s %s\n", $1, $2, $3, $4, $5, $6) + }' < $_fstab > $_fstab_shadow +} - if [ -f /mnt/netbsd ]; then - echo "Saving existing kernel in netbsd.1.0." - mv /mnt/netbsd /mnt/netbsd.1.0 - fi +mount_fs() +{ + # Must mount filesystems manually, one at a time, so we can make + # sure the mount points exist. + # $1 is a file in fstab format + local _fstab - echo "Copying netbsd 1.1 kernel ..." - cp -p /netbsd /mnt/netbsd + _fstab=$1 - if [ "$_INSTBOOT" = "Y" ]; then - echo "Installing NetBSD bootblock..." - md_installboot ${ROOTDISK} - fi -) + ( while read line; do + _dev=`echo $line | awk '{print $1}'` + _mp=`echo $line | awk '{print $2}'` + _fstype=`echo $line | awk '{print $3}'` + _opt=`echo $line | awk '{print $4}'` -# Unmount all filesystems and check their integrity. -( - _devs="" - _mps="" - # maintain reverse order - while read line; do - _devs="`echo $line | awk '{print $1}'` ${_devs}" - _mps="`echo $line | awk '{print $2}'` ${_mps}" - done - echo -n "Umounting filesystems... " - for _mp in ${_mps}; do - echo -n "${_mp} " - umount ${_mp} - done - echo "Done." + # If not the root filesystem, make sure the mount + # point is present. + if [ "X{$_mp}" != X"/mnt" ]; then + mkdir -p $_mp + fi - echo "Checking filesystem integrity..." - for _dev in ${_devs}; do - echo "${_dev}" - fsck -f ${_dev} - done - echo "Done." -) < /tmp/fstab.shadow + # Mount the filesystem. If the mount fails, exit + # with an error condition to tell the outer + # later to bail. + if ! mount -v -t $_fstype -o $_opt $_dev $_mp ; then + # error message displated by mount + exit 1 + fi + done ) < $_fstab -##umount -a -##echo "Checking filesystem integrity..." -##fsck -pf + if [ "X${?}" != X"0" ]; then + cat << \__mount_filesystems_1 -#md_installboot_xxx +FATAL ERROR: Cannot mount filesystems. Double-check your configuration +and restart the installation process. +__mount_filesystems_1 + exit + fi +} -cat << \__congratulations_1 +unmount_fs() +{ + # Unmount all filesystems and check their integrity. + # $1 is a file in fstab format + local _fstab -CONGRATULATIONS! You have successfully installed NetBSD! -To boot the installed system, enter halt at the command prompt. Once the -system has halted, reset the machine and boot from the disk. + _fstab=$1 -__congratulations_1 + echo -n "Syncing disks..." + pid=`twiddle` + sync; sleep 4; sync; sleep 2; sync; sleep 2 + kill $pid + echo "done." + + ( + _devs="" + _mps="" + # maintain reverse order + while read line; do + _devs="`echo $line | awk '{print $1}'` ${_devs}" + _mps="`echo $line | awk '{print $2}'` ${_mps}" + done + echo -n "Umounting filesystems... " + for _mp in ${_mps}; do + echo -n "${_mp} " + umount ${_mp} + done + echo "Done." -# ALL DONE! -exit + echo "Checking filesystem integrity..." + for _dev in ${_devs}; do + echo "${_dev}" + fsck -f ${_dev} + done + echo "Done." + ) < $_fstab +} + +check_fs() +{ + # Check filesystem integrity. + # $1 is a file in fstab format + local _fstab + + _fstab=$1 + + ( + _devs="" + _mps="" + while read line; do + _devs="`echo $line | awk '{print $1}'` ${_devs}" + _mps="`echo $line | awk '{print $2}'` ${_mps}" + done + + echo "Checking filesystem integrity..." + for _dev in ${_devs}; do + echo "${_dev}" + fsck -f ${_dev} + done + echo "Done." + ) < $_fstab +} diff --git a/distrib/miniroot/list b/distrib/miniroot/list index 40d8ab1f48c..2859cbc8e80 100644 --- a/distrib/miniroot/list +++ b/distrib/miniroot/list @@ -1,4 +1,4 @@ -# $NetBSD: list,v 1.2 1995/12/19 00:54:07 pk Exp $ +# $NetBSD: list,v 1.3 1996/01/06 22:45:14 pk Exp $ # copy the crunched binary, link to it, and kill it COPY ${OBJDIR}/instbin instbin @@ -91,3 +91,9 @@ COPYDIR ${DESTDIR}/usr/share/zoneinfo usr/share/zoneinfo # and the termcap file COPY ${CURDIR}/../../share/termcap/termcap.src usr/share/misc/termcap + +# and the installation scripts +COPY ${CURDIR}/install.sub install.sub +COPY ${CURDIR}/install.sh install +COPY ${CURDIR}/upgrade.sh upgrade +SPECIAL chmod 755 install upgrade diff --git a/distrib/miniroot/upgrade.sh b/distrib/miniroot/upgrade.sh new file mode 100644 index 00000000000..24c0d379041 --- /dev/null +++ b/distrib/miniroot/upgrade.sh @@ -0,0 +1,314 @@ +#!/bin/sh +# $NetBSD: upgrade.sh,v 1.1 1996/01/06 22:45:15 pk Exp $ +# +# Copyright (c) 1995 Jason R. Thorpe. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. All advertising materials mentioning features or use of this software +# must display the following acknowledgement: +# This product includes software developed for the NetBSD Project +# by Jason R. Thorpe. +# 4. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +# NetBSD installation script. +# In a perfect world, this would be a nice C program, with a reasonable +# user interface. + +VERSION=1.1 +export VERSION # XXX needed in subshell +ROOTDISK="" # filled in below + +trap "umount /tmp > /dev/null 2>&1" 0 + +MODE="upgrade" + +# include machine-dependent functions +# The following functions must be provided: +# md_get_diskdevs() - return available disk devices +# md_get_cddevs() - return available CD-ROM devices +# md_get_ifdevs() - return available network interfaces +# md_installboot() - install boot-blocks on disk +# md_checkfordisklabel() - check for valid disklabel +# md_labeldisk() - put label on a disk +# md_welcome_banner() - display friendly message +# md_not_going_to_install() - display friendly message +# md_congrats() - display friendly message +. install.md + +# include common subroutines +. install.sub + +# Good {morning,afternoon,evening,night}. +md_welcome_banner +echo -n "Proceed with upgrade? [n] " +getresp "n" +case "$resp" in + y*|Y*) + echo "Cool! Let's get to it..." + ;; + *) + md_not_going_to_install + exit + ;; +esac + +# Deal with terminal issues +md_set_term + +# XXX Work around vnode aliasing bug (thanks for the tip, Chris...) +ls -l /dev > /dev/null 2>&1 + +# We don't like it, but it sure makes a few things a lot easier. +do_mfs_mount "/tmp" "2048" + +while [ "X${ROOTDISK}" = "X" ]; do + getrootdisk +done + +# Make sure there's a disklabel there. If there isn't, puke after +# disklabel prints the error message. +md_checkfordisklabel ${ROOTDISK} +case $rval in + 1) + cat << \__disklabel_not_present_1 + +FATAL ERROR: There is no disklabel present on the root disk! You must +label the disk with SYS_INST before continuing. + +__disklabel_not_present_1 + exit + ;; + + 2) + cat << \__disklabel_corrupted_1 + +FATAL ERROR: The disklabel on the root disk is corrupted! You must +re-label the disk with SYS_INST before continuing. + +__disklabel_corrupted_1 + exit + ;; + + *) + ;; +esac + +# Assume partition 'a' of $ROOTDISK is for the root filesystem. Confirm +# this with the user. Check and mount the root filesystem. +resp="" # force one iteration +while [ "X${resp}" = "X" ]; do + echo -n "Root filesystem? [${ROOTDISK}a] " + getresp "${ROOTDISK}a" + _root_filesystem="/dev/`basename $resp`" + if [ ! -b ${_root_filesystem} ]; then + echo "Sorry, ${resp} is not a block device." + resp="" # force loop to repeat + fi +done + +echo "Checking root filesystem..." +if ! fsck -pf ${_root_filesystem}; then + echo "ERROR: can't check root filesystem!" + exit 1 +fi + +echo "Mounting root filesystem..." +if ! mount -o ro ${_root_filesystem} /mnt; then + echo "ERROR: can't mount root filesystem!" + exit 1 +fi + +# Grab the fstab so we can munge it for our own use. +if [ ! -f /mnt/etc/fstab ]; then + echo "ERROR: no /etc/fstab!" + exit 1 +fi +cp /mnt/etc/fstab /tmp/fstab + +# Grab the hosts table so we can use it. +if [ ! -f /mnt/etc/hosts ]; then + echo "ERROR: no /etc/hosts!" + exit 1 +fi +cp /mnt/etc/hosts /tmp/hosts + +# Start up the network in same/similar configuration as the installed system +# uses. +cat << \__network_config_1 + +The upgrade program would now like to enable the network. It will use the +configuration already stored on the root filesystem. This is required +if you wish to use the network installation capabilities of this program. + +__network_config_1 +echo -n "Enable network? [y] " +getresp "y" +case "$resp" in + y*|Y*) + if ! enable_network; then + echo "ERROR: can't enable network!" + exit 1 + fi + + cat << \__network_config_2 + +You will now be given the opportunity to escape to the command shell to +do any additional network configuration you may need. This may include +adding additional routes, if needed. In addition, you might take this +opportunity to redo the default route in the event that it failed above. + +__network_config_2 + echo -n "Escape to shell? [n] " + getresp "n" + case "$resp" in + y*|Y*) + echo "Type 'exit' to return to upgrade." + sh + ;; + + *) + ;; + esac + ;; + *) + ;; +esac + +# Now that the network has been configured, it is safe to configure the +# fstab. We remove all but ufs/ffs/nfs. +( + rm -f /tmp/fstab.new + while read line; do + _fstype=`echo $line | awk '{print $3}'` + if [ "X${_fstype}" = X"ufs" -o \ + "X${_fstype}" = X"ffs" -o \ + "X${_fstype}" = X"nfs" ]; then + echo $line >> /tmp/fstab.new + fi + done +) < /tmp/fstab + +if [ ! -f /tmp/fstab.new ]; then + echo "ERROR: strange fstab!" + exit 1 +fi + +# Convert ufs to ffs. +sed -e 's/ufs/ffs/' < /tmp/fstab.new > /tmp/fstab +rm -f /tmp/fstab.new + +echo "The fstab is configured as follows:" +echo "" +cat /tmp/fstab +cat << \__fstab_config_1 + +You may wish to edit the fstab. For example, you may need to resolve +dependencies in the order which the filesystems are mounted. Note that +this fstab is only for installation purposes, and will not be copied into +the root filesystem. + +__fstab_config_1 +echo -n "Edit the fstab? [n] " +getresp "n" +case "$resp" in + y*|Y*) + vi /tmp/fstab + ;; + + *) + ;; +esac + +echo "" +munge_fstab /tmp/fstab /tmp/fstab.shadow + +if ! umount /mnt; then + echo "ERROR: can't unmount previously mounted root!" + exit 1 +fi + +# Check all of the filesystems. +check_fs /tmp/fstab.shadow + +# Mount filesystems. +mount_fs /tmp/fstab.shadow + +# Install sets. +install_sets $UPGRSETS + +# Get timezone info +get_timezone + +# Fix up the fstab. +echo -n "Converting ufs to ffs in /etc/fstab..." +sed -e 's/ufs/ffs/' < /mnt/etc/fstab > /tmp/fstab +echo "done." +echo -n "Would you like to edit the resulting fstab? [y] " +getresp "y" +case "$resp" in + y*|Y*) + vi /tmp/fstab + ;; + + *) + ;; +esac + +# Copy in configuration information and make devices in target root. +( + cd /tmp + for file in fstab; do + if [ -f $file ]; then + 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..." + pid=`twiddle` + cd /mnt/dev + sh MAKEDEV all + kill $pid + echo "done." + + echo -n "Copying kernel..." + cp -p /netbsd /mnt/netbsd + echo "done." + + md_installboot ${ROOTDISK} +) + +unmount_fs /tmp/fstab.shadow + +# Pat on the back. +md_congrats + +# ALL DONE! +exit 0 diff --git a/distrib/sparc/install.md b/distrib/sparc/install.md new file mode 100644 index 00000000000..9a4fac1c029 --- /dev/null +++ b/distrib/sparc/install.md @@ -0,0 +1,175 @@ +# $NetBSD: install.md,v 1.1 1996/01/06 22:42:13 pk Exp $ +# +# Copyright (c) 1995 Jason R. Thorpe. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. All advertising materials mentioning features or use of this software +# must display the following acknowledgement: +# This product includes software developed for the NetBSD Project +# by Jason R. Thorpe. +# 4. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +# +# machine dependent section of installation/upgrade script. +# + +md_set_term() { + if [ ! -z "$TERM" ]; then + return + fi + echo -n "Specify terminal type [sun]: " + getresp "sun" + TERM="$resp" + export TERM +} + +md_get_diskdevs() { + # return available disk devices + dmesg | egrep "(^sd[0-9] |^x[dy][0-9] )" | cut -d" " -f1 | sort -u +} + +md_get_cddevs() { + # return available CDROM devices + dmesg | grep "^cd[0-9] " | cut -d" " -f1 | sort -u +} + +md_get_ifdevs() { + # return available network devices + dmesg | egrep "(^le[0-9] |^ie[0-9] )" | cut -d" " -f1 | sort -u +} + +md_installboot() { + echo "Installing boot block..." + /usr/mdec/binstall -v ffs /mnt +} + +md_checkfordisklabel() { + # $1 is the disk to check + + disklabel $1 > /dev/null 2> /tmp/checkfordisklabel + if grep "no disk label" /tmp/checkfordisklabel; then + rval="1" + elif grep "disk label corrupted" /tmp/checkfordisklabel; then + rval="2" + else + rval="0" + fi + + rm -f /tmp/checkfordisklabel +} + +md_prep_disklabel() +{ + # display example + cat << \__md_prep_disklabel_1 +Here is an example of what the partition information will look like once +you have entered the disklabel editor. Disk partition sizes and offsets +are in sector (most likely 512 bytes) units. Make sure these size/offset +pairs are on cylinder boundaries (the number of sector per cylinder is +given in the `sectors/cylinder' entry, which is not shown here). + +Do not change any parameters except the partition layout and the label name. +It's probably also wisest not to touch the `8 partitions:' line, even +in case you have defined less than eight partitions. + +[Example] +8 partitions: +# size offset fstype [fsize bsize cpg] + a: 50176 0 4.2BSD 1024 8192 16 # (Cyl. 0 - 111) + b: 64512 50176 swap # (Cyl. 112 - 255) + c: 640192 0 unknown # (Cyl. 0 - 1428) + d: 525504 114688 4.2BSD 1024 8192 16 # (Cyl. 256 - 1428) +[End of example] + +__md_prep_disklabel_1 +} + +md_welcome_banner() { +{ + if [ "$MODE" = "install" ]; then + echo "" + echo "Welcome to the NetBSD/sparc ${VERSION} installation program." + cat << \__welcome_banner_1 + +This program is designed to help you put NetBSD on your disk, +in a simple and rational way. You'll be asked several questions, +and it would probably be useful to have your disk's hardware +manual, the installation notes, and a calculator handy. +__welcome_banner_1 + + else + echo "" + echo "Welcome to the NetBSD/sparc ${VERSION} upgrade program." + cat << \__welcome_banner_2 + +This program is designed to help you upgrade your NetBSD system in a +simple and rational way. + +As a reminder, installing the `etc' binary set is NOT recommended. +Once the rest of your system has been upgraded, you should manually +merge any changes to files in the `etc' set into those files which +already exist on your system. +__welcome_banner_2 + fi + +cat << \__welcome_banner_3 + +As with anything which modifies your disk's contents, this +program can cause SIGNIFICANT data loss, and you are advised +to make sure your data is backed up before beginning the +installation process. + +Default answers are displyed in brackets after the questions. +You can hit Control-C at any time to quit, but if you do so at a +prompt, you may have to hit return. Also, quitting in the middle of +installation may leave your system in an inconsistent state. + +__welcome_banner_3 +} | more +} + +md_not_going_to_install() { + cat << \__not_going_to_install_1 + +OK, then. Enter `halt' at the prompt to halt the machine. Once the +machine has halted, power-cycle the system to load new boot code. + +__not_going_to_install_1 +} + +md_congrats() { + local what; + if [ "$MODE" = "install" ]; then + what="installed"; + else + what="upgraded"; + fi + cat << __congratulations_1 + +CONGRATULATIONS! You have successfully $what NetBSD! +To boot the installed system, enter halt at the command prompt. Once the +system has halted, reset the machine and boot from the disk. + +__congratulations_1 +} diff --git a/distrib/sparc/install.sh b/distrib/sparc/install.sh deleted file mode 100644 index e7780c8320f..00000000000 --- a/distrib/sparc/install.sh +++ /dev/null @@ -1,1289 +0,0 @@ -#!/bin/sh -# $NetBSD: install.sh,v 1.7 1995/11/16 22:29:46 pk Exp $ -# -# Copyright (c) 1995 Jason R. Thorpe. -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# 3. All advertising materials mentioning features or use of this software -# must display the following acknowledgement: -# This product includes software developed for the NetBSD Project -# by Jason R. Thorpe. -# 4. The name of the author may not be used to endorse or promote products -# derived from this software without specific prior written permission -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# - -# NetBSD installation script. -# In a perfect world, this would be a nice C program, with a reasonable -# user interface. - -VERSION=1.1 -ROOTDISK="" # filled in below -FILESYSTEMS="/tmp/filesystems" # used thoughout -FQDN="" # domain name - -trap "umount /tmp > /dev/null 2>&1" 0 - -getresp() { - read resp - if [ "X$resp" = "X" ]; then - resp=$1 - 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 -} - -rmel() { -# remove first argument from list formed by the remaining arguments - _a=$1; shift - while [ $# != 0 ]; do - if [ "$_a" != "$1" ]; then echo "$1"; fi - shift - done -} - -twiddle() -{ - while : ; do - sleep 1; echo -n "/"; - sleep 1; echo -n "-"; - sleep 1; echo -n "\\"; - sleep 1; echo -n "|"; - done > /dev/tty & echo $! -} - -set_terminal() { - echo -n "Specify terminal type [sun]: " - getresp "sun" - TERM="$resp" - export TERM -} - -# -# machine dependent section -# -md_get_diskdevs() { - # return available disk devices - dmesg | egrep "(^sd[0-9]|^x[dy][0-9])" | cut -d" " -f1 | sort -u -} - -md_get_cddevs() { - # return available CDROM devices - dmesg | grep "^cd[0-9]" | cut -d" " -f1 | sort -u -} - -md_get_ifdevs() { - # return available network devices - dmesg | egrep "(^le[0-9]|^ie[0-9])" | cut -d" " -f1 | sort -u -} - -md_installboot() { - echo "Installing boot block..." - /usr/mdec/binstall -v ffs /mnt -} - - -do_mfs_mount() { - umount $1 > /dev/null 2>&1 - if ! mount_mfs -s 2048 swap $1 ; then - cat << \__mfs_failed_1 - -FATAL ERROR: Can't mount the memory filesystem. - -__mfs_failed_1 - exit - fi - - # Bleh. Give mount_mfs a chance to DTRT. - sleep 2 -} - -getrootdisk() { - cat << \__getrootdisk_1 - -The installation program needs to know which disk to consider -the root disk. Note the unit number may be different than -the unit number you used in the standalone installation -program. - -Available disks are: - -__getrootdisk_1 - _DKDEVS=`md_get_diskdevs` - echo "$_DKDEVS" - echo "" - echo -n "Which disk is the root disk? " - getresp "" - if isin $resp $_DKDEVS ; then - ROOTDISK="$resp" - else - echo "" - echo "The disk $resp does not exist." - ROOTDISK="" - fi -} - -checkfordisklabel() { - disklabel $1 > /dev/null 2> /tmp/checkfordisklabel - if grep "no disk label" /tmp/checkfordisklabel; then - rval="1" - elif grep "disk label corrupted" /tmp/checkfordisklabel; then - rval="2" - else - rval="0" - fi - - rm -f /tmp/checkfordisklabel -} - -labelmoredisks() { - cat << \__labelmoredisks_1 - -You may label the following disks: - -__labelmoredisks_1 - _DKDEV=`rmel "${ROOTDISK}"` - echo $_DKDEVS - echo "" - echo -n "Label which disk? [done] " - getresp "done" - case "$resp" in - "done") - ;; - - *) - if echo "$_DKDEVS" | grep "^$resp" > /dev/null ; then - disklabel -e $resp - else - echo "" - echo "The disk $resp does not exist." - fi - ;; - esac -} - -addhostent() { - # $1 - IP address - # $2 - symbolic name - - # Create an entry in the hosts table. If no host table - # exists, create one. If the IP address already exists, - # replace it's entry. - if [ ! -f /tmp/hosts ]; then - echo "127.0.0.1 localhost" > /tmp/hosts - fi - - if grep "^$1 " /tmp/hosts > /dev/null; then - grep -v "^$1 " /tmp/hosts > /tmp/hosts.new - mv /tmp/hosts.new /tmp/hosts - fi - - echo "$1 $2 $2.$FQDN" >> /tmp/hosts -} - -addifconfig() { - # $1 - interface name - # $2 - interface symbolic name - # $3 - interface IP address - # $4 - interface netmask - - # Create a hostname.* file for the interface. - echo "inet $2 $4" > /tmp/hostname.$1 - - addhostent $3 $2 -} - - -configurenetwork() { - local _ifsdone - local _ifs - - _IFS=`md_get_ifdevs` - _ifsdone="" - resp="" # force at least one iteration - while [ "X${resp}" != X"done" ]; do - cat << \__configurenetwork_1 - -You may configure the following network interfaces (the interfaces -marked with [X] have been succesfully configured): - -__configurenetwork_1 - - for _ifs in $_IFS; do - if isin $_ifs $_ifsdone ; then - echo -n "[X] " - else - echo -n " " - fi - echo $_ifs - done - echo "" - echo -n "Configure which interface? [done] " - getresp "done" - case "$resp" in - "done") - ;; - *) - _ifs=$resp - if isin $_ifs $_IFS ; then - if configure_ifs $_ifs ; then - _ifsdone="$_ifs $_ifsdone" - fi - else - echo "Invalid response: \"$resp\" is not in list" - fi - ;; - esac - done -} - -configure_ifs() { - - _interface_name=$1 - - # Get IP address - resp="" # force one iteration - while [ "X${resp}" = X"" ]; do - echo -n "IP address? " - getresp "" - _interface_ip=$resp - done - - # Get symbolic name - resp="" # force one iteration - while [ "X${resp}" = X"" ]; do - echo -n "Symbolic (host) name? " - getresp "" - _interface_symname=$resp - done - - # Get netmask - resp="" # force one iteration - while [ "X${resp}" = X"" ]; do - echo -n "Netmask? " - getresp "" - _interface_mask=$resp - done - - # Configure the interface. If it - # succeeds, add it to the permanent - # network configuration info. - ifconfig ${_interface_name} down - if ifconfig ${_interface_name} inet \ - ${_interface_ip} \ - netmask ${_interface_mask} up ; then - addifconfig \ - ${_interface_name} \ - ${_interface_symname} \ - ${_interface_ip} \ - ${_interface_mask} - return 0 - fi - return 1 -} - -install_ftp() { - # Get several parameters from the user, and create - # a shell script that directs the appropriate - # commands into ftp. - cat << \__install_ftp_1 - -This is an automated ftp-based installation process. You will be asked -several questions. The correct set of commands will be placed in a script -that will be fed to ftp(1). - -__install_ftp_1 - # Get server IP address - resp="" # force one iteration - while [ "X${resp}" = X"" ]; do - echo -n "Server IP? [${_ftp_server_ip}] " - getresp "${_ftp_server_ip}" - _ftp_server_ip=$resp - done - - # Get server directory - resp="" # force one iteration - while [ "X${resp}" = X"" ]; do - echo -n "Server directory? [${_ftp_server_dir}] " - getresp "${_ftp_server_dir}" - _ftp_server_dir=$resp - done - - # Get login name - resp="" # force one iteration - while [ "X${resp}" = X"" ]; do - echo -n "Login? [${_ftp_server_login}] " - getresp "${_ftp_server_login}" - _ftp_server_login=$resp - done - - # Get password - resp="" # force one iteration - while [ "X${resp}" = X"" ]; do - echo -n "Password? [${_ftp_server_password}] " - getresp "${_ftp_server_password}" - _ftp_server_password=$resp - done - - # Get list of files for mget. - cat << \__install_ftp_2 - -You will now be asked for files to extract. Enter one file at a time. -When you are done entering files, enter 'done'. - -__install_ftp_2 - echo "#!/bin/sh" > /tmp/ftp-script.sh - echo "cd /mnt" >> /tmp/ftp-script.sh - echo "ftp -i -n $_ftp_server_ip << \__end_commands" >> \ - /tmp/ftp-script.sh - echo "user $_ftp_server_login $_ftp_server_password" >> \ - /tmp/ftp-script.sh - echo "bin" >> /tmp/ftp-script.sh - echo "cd $_ftp_server_dir" >> /tmp/ftp-script.sh - - resp="" # force one interation - while [ "X${resp}" != X"done" ]; do - echo -n "File? [done] " - getresp "done" - if [ "X${resp}" = X"done" ]; then - break - fi - - _ftp_file=`echo ${resp} | awk '{print $1}'` - echo "get ${_ftp_file} |\"tar -zxvpf -\"" >> \ - /tmp/ftp-script.sh - done - - echo "quit" >> /tmp/ftp-script.sh - echo "__end_commands" >> /tmp/ftp-script.sh - - sh /tmp/ftp-script.sh - rm -f /tmp/ftp-script.sh - echo "Extraction complete." -} - -install_common_nfs_cdrom() { - # $1 - directory containing file - local _filename - local _setsdone - local _prev - local _f - - _sets=`(cd /mnt2/$1; ls *.tar.gz)` - if [ -z "$_sets" ]; then - echo "There are no NetBSD install sets available in \"$1\"" - return - fi - - _setsdone="" - while : ; do - echo "The following sets are available for extraction:" - echo "(marked sets have already been extracted)" - echo "" - - _prev="" - for _f in $_sets ; do - if isin $_f $_setsdone; then - echo -n "[X] " - else - echo -n " " - if [ -z "$_prev" ]; then _prev=$_f; fi - fi - echo $_f - done - echo "" - - # Get the name of the file. - if [ "X$_prev" = "X" ]; then resp=n; else resp=y; fi - echo -n "Continue extraction [$resp]?" - getresp "$resp" - if [ "$resp" = "n" ]; then - break - fi - - echo -n "File name [$_prev]? " - getresp "$_prev" - _f=$resp - _filename="/mnt2/$1/$_f" - - # Ensure file exists - if [ ! -f $_filename ]; then - echo "File $_filename does not exist. Check to make" - echo "sure you entered the information properly." - continue - fi - - # Extract file - cat $_filename | (cd /mnt; tar -zxvpf -) - echo "Extraction complete." - _setsdone="$_f $_setsdone" - - done -} - -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: - -__install_cdrom_1 - _CDDEVS=`md_get_cddevs` - echo "$_CDDEVS" - echo "" - echo -n "Which is the CD-ROM with the installation media? [abort] " - getresp "abort" - case "$resp" in - abort) - echo "Aborting." - return - ;; - - *) - if isin $resp $_CDDEVS ; then - _cdrom_drive=$resp - else - echo "" - echo "The CD-ROM $resp does not exist." - echo "Aborting." - return - fi - ;; - esac - - # Get partition - resp="" # force one iteration - while [ "X${resp}" = X"" ]; do - echo -n "Partition? [c] " - getresp "c" - case "$resp" in - [a-h]) - _cdrom_partition=$resp - ;; - - *) - echo "Invalid response: $resp" - resp="" # force loop to repeat - ;; - esac - done - - # Ask for filesystem type - cat << \__install_cdrom_2 - -There are two CD-ROM filesystem types currently supported by this program: - 1) ISO-9660 (cd9660) - 2) Berkeley Fast Filesystem (ffs) - -__install_cdrom_2 - resp="" # force one iteration - while [ "X${resp}" = X"" ]; do - echo -n "Which filesystem type? [cd9660] " - getresp "cd9660" - case "$resp" in - cd9660|ffs) - _cdrom_filesystem=$resp - ;; - - *) - echo "Invalid response: $resp" - resp="" # force loop to repeat - ;; - esac - done - - # Mount the CD-ROM - mkdir /mnt2 > /dev/null 2>&1 - if ! mount -t ${_cdrom_filesystem} -o ro \ - /dev/${_cdrom_drive}${_cdrom_partition} /mnt2 ; then - echo "Cannot mount CD-ROM drive. Aborting." - return - fi - - # Get the directory where the file lives - resp="" # force one iteration - while [ "X${resp}" = X"" ]; do - echo "Enter the directory relative to the mount point that" - echo -n "contains the file. [${_cdrom_directory}] " - getresp "${_cdrom_directory}" - done - _cdrom_directory=$resp - - install_common_nfs_cdrom ${_cdrom_directory} - umount -f /mnt2 > /dev/null 2>&1 -} - -install_nfs() { - # Get the IP address of the server - resp="" # force one iteration - while [ "X${resp}" = X"" ]; do - echo -n "Server IP address? [${_nfs_server_ip}] " - getresp "${_nfs_server_ip}" - done - _nfs_server_ip=$resp - - # Get server path to mount - resp="" # force one iteration - while [ "X${resp}" = X"" ]; do - echo -n "Filesystem on server to mount? [${_nfs_server_path}] " - getresp "${_nfs_server_path}" - done - _nfs_server_path=$resp - - # Determine use of TCP - echo -n "Use TCP transport (only works with capable NFS server)? [n] " - getresp "n" - case "$resp" in - y*|Y*) - _nfs_tcp="-T" - ;; - - *) - _nfs_tcp="" - ;; - esac - - # Mount the server - mkdir /mnt2 > /dev/null 2>&1 - if ! mount_nfs $_nfs_tcp ${_nfs_server_ip}:${_nfs_server_path} \ - /mnt2 ; then - echo "Cannot mount NFS server. Aborting." - return - fi - - # Get the directory where the file lives - resp="" # force one iteration - while [ "X${resp}" = X"" ]; do - echo "Enter the directory relative to the mount point that" - echo -n "contains the file. [${_nfs_directory}] " - getresp "${_nfs_directory}" - done - _nfs_directory=$resp - - install_common_nfs_cdrom ${_nfs_directory} - umount -f /mnt2 > /dev/null 2>&1 -} - -install_tape() { - # Get the name of the tape from the user. - cat << \__install_tape_1 - -The installation program needs to know which tape device to use. Make -sure you use a "no rewind on close" device. - -__install_tape_1 - _tape=`basename $TAPE` - resp="" # force one iteration - while [ "X${resp}" = X"" ]; do - echo -n "Name of tape device? [${_tape}]" - getresp "${_tape}" - done - _tape=`basename $resp` - TAPE="/dev/${_tape}" - if [ ! -c $TAPE ]; then - echo "$TAPE does not exist or is not a character special file." - echo "Aborting." - return - fi - export TAPE - - # Rewind the tape device - echo -n "Rewinding tape..." - if ! mt rewind ; then - echo "$TAPE may not be attached to the system or may not be" - echo "a tape device. Aborting." - return - fi - echo "done." - - # Get the file number - resp="" # force one iteration - while [ "X${resp}" = X"" ]; do - echo -n "File number? " - getresp "" - case "$resp" in - [1-9]*) - _nskip=`expr $resp - 1` - ;; - - *) - echo "Invalid file number ${resp}." - resp="" # fore loop to repeat - ;; - esac - done - - # Skip to correct file. - echo -n "Skipping to source file..." - if [ "X${_nskip}" != X"0" ]; then - if ! mt fsf $_nskip ; then - echo "Could not skip $_nskip files. Aborting." - return - fi - fi - echo "done." - - cat << \__install_tape_2 - -There are 2 different ways the file can be stored on tape: - - 1) an image of a gzipped tar file - 2) a standard tar image - -__install_tape_2 - resp="" # force one iteration - while [ "X${resp}" = X"" ]; do - getresp "1" - case "$resp" in - 1) - ( - cd /mnt - dd if=$TAPE | tar -zxvpf - - ) - ;; - - 2) - ( - cd /mnt - dd if=$TAPE | tar -xvpf - - ) - ;; - - *) - echo "Invalid response: $resp." - resp="" # force loop to repeat - ;; - esac - done - echo "Extraction complete." -} - -get_timezone() { - local _a -cat << \__get_timezone_1 - -Select a time zone for your location. Timezones are represented on the -system by a directory structure rooted in "/usr/share/timezone". Most -timezones can be selected by entering a token like "MET" or "GMT-6". -Other zones are grouped by continent, with detailed zone information -separated by a slash ("/"), e.g. "US/Pacific". - -To get a listing of what's available in /usr/share/zoneinfo, enter "?" -at the prompts below. - -__get_timezone_1 - if [ X$TZ = X ]; then - TZ=`ls -l /etc/timezone 2>/dev/null | awk '{print $NF}' | - sed -e 's?/usr/share/zoneinfo/??'` - fi - while :; do - echo -n "What timezone are you in [\`?' for list] [$TZ]? " - getresp "$TZ" - case "$resp" in - "") - echo "Timezone defaults to GMT" - TZ="GMT" - break; - ;; - "?") - ls /usr/share/zoneinfo - ;; - *) - _a=$resp - while [ -d /usr/share/zoneinfo/$_a ]; do - echo -n "There are several timezones available" - echo " within zone '$_a'" - echo -n "Select a sub-timezone [\`?' for list]: " - getresp "" - case "$resp" in - "?") ls /usr/share/zoneinfo/$_a ;; - *) _a=${_a}/${resp} - if [ -f /usr/share/zoneinfo/$_a ]; then - break; - fi - ;; - esac - done - if [ -f /usr/share/zoneinfo/$_a ]; then - TZ="$_a" - echo "You have selected timezone \"$_a\"". - break 2 - fi - echo "'/usr/share/zoneinfo/$_a' is not a valid timezone on this system." - ;; - esac - done -} - -echo "" -echo "Welcome to the NetBSD/sparc ${VERSION} installation program." -cat << \__welcome_banner_1 - -This program is designed to help you put NetBSD on your disk, -in a simple and rational way. You'll be asked several questions, -and it would probably be useful to have your disk's hardware -manual, the installation notes, and a calculator handy. - -As with anything which modifies your disk's contents, this -program can cause SIGNIFICANT data loss, and you are advised -to make sure your data is backed up before beginning the -installation process. - -Default answers are displyed in brackets after the questions. -You can hit Control-C at any time to quit, but if you do so at a -prompt, you may have to hit return. Also, quitting in the middle of -installation may leave your system in an inconsistent state. - -__welcome_banner_1 - -echo -n "Proceed with installation? [n] " -getresp "n" -case "$resp" in - y*|Y*) - echo "Cool! Let's get to it..." - ;; - *) - cat << \__welcome_banner_2 - -OK, then. Enter 'halt' at the prompt to halt the machine. Once the -machine has halted, power-cycle the system to load new boot code. - -__welcome_banner_2 - exit - ;; -esac - -set_terminal - -get_timezone - -# We don't like it, but it sure makes a few things a lot easier. -##do_mfs_mount "/tmp" - -# Install the shadowed disktab file; lets us write to it for temporary -# purposes without mounting the miniroot read-write. -##cp /etc/disktab.shadow /tmp/disktab.shadow - -while [ "X${ROOTDISK}" = "X" ]; do - getrootdisk -done - -# Make sure there's a disklabel there. If there isn't, puke after -# disklabel prints the error message. -checkfordisklabel ${ROOTDISK} -case $rval in - 1) - cat << \__disklabel_not_present_1 - -FATAL ERROR: There is no disklabel present on the root disk! You must -label the disk before continuing. - -__disklabel_not_present_1 - exit - ;; - - 2) - cat << \__disklabel_corrupted_1 - -FATAL ERROR: The disklabel on the root disk is corrupted! You must -re-label the disk before continuing. - -__disklabel_corrupted_1 - exit - ;; - - *) - ;; -esac - -# Give the user the opportinuty to edit the root disklabel. -cat << \__disklabel_notice_1 - -You have already placed a disklabel onto the target root disk. -However, due to the limitations of the standalone program used -you may want to edit that label to change partition type information. -You will be given the opportunity to do that now. Note that you may -not change the size or location of any presently open partition. - -__disklabel_notice_1 -echo -n "Do you wish to edit the root disklabel? [y] " -getresp "y" -case "$resp" in - y*|Y*) -cat << \__disklabel_notice_2 -Here is an example of what the partition information will look like once -you have entered the disklabel editor. Disk partition sizes and offsets -are in sector (most likely 512 bytes) units. Make sure these size/offset -pairs are on cylinder boundaries (the number of sector per cylinder is -given in the `sectors/cylinder' entry, which is not shown here). - -Do not change any parameters except the partition layout and the label name. -It's probably also wisest not to touch the `8 partitions:' line, even -in case you have defined less than eight partitions. - -[Example] -8 partitions: -# size offset fstype [fsize bsize cpg] - a: 50176 0 4.2BSD 1024 8192 16 # (Cyl. 0 - 111) - b: 64512 50176 swap # (Cyl. 112 - 255) - c: 640192 0 unknown # (Cyl. 0 - 1428) - d: 525504 114688 4.2BSD 1024 8192 16 # (Cyl. 256 - 1428) -[End of example] - -__disklabel_notice_2 - echo -n "Hit <enter> to enter the disklabel editor: " - getresp "" - - disklabel -W ${ROOTDISK} - disklabel -e ${ROOTDISK} - ;; - - *) - ;; -esac - -cat << \__disklabel_notice_3 - -You will now be given the opportunity to place disklabels on any additional -disks on your system. -__disklabel_notice_3 - -resp="X" # force at least one iteration -while [ "X$resp" != X"done" ]; do - labelmoredisks -done - -# Assume partition 'a' of $ROOTDISK is for the root filesystem. Loop and -# get the rest. -# XXX ASSUMES THAT THE USER DOESN'T PROVIDE BOGUS INPUT. -cat << \__get_filesystems_1 - -You will now have the opportunity to specify mount points for some or -all of the partitions you have on your disk(s). -You will be prompted for device name (for example `/dev/sd0d') and -mount point (full path, e.g. `/usr'). - -Note that these do not have to be in any particular order. You will -be given the opportunity to edit the resulting 'fstab' file before -any of the filesystems are mounted. At that time you will be able -to resolve any filesystem order dependencies. - -__get_filesystems_1 - -echo "The following will be used for the root filesystem:" -echo " ${ROOTDISK}a /" - -echo "${ROOTDISK}a /" > ${FILESYSTEMS} - -resp="X" # force at least one iteration -while [ "X$resp" != X"done" ]; do - echo "" - echo -n "Device name? [done] " - getresp "done" - case "$resp" in - done) - ;; - - *) - _device_name=`basename $resp` - - # force at least one iteration - _first_char="X" - while [ "X${_first_char}" != X"/" ]; do - echo -n "Mount point? " - getresp "" - _mount_point=$resp - if [ "X${_mount_point}" = X"/" ]; then - # Invalid response; no multiple roots - _first_char="X" - else - _first_char=`echo ${_mount_point} | \ - cut -c 1` - fi - done - echo "${_device_name} ${_mount_point}" >> \ - ${FILESYSTEMS} - resp="X" # force loop to repeat - ;; - esac -done - -echo "" -echo "You have configured the following devices and mount points:" -echo "" -cat ${FILESYSTEMS} -echo "" -echo "Filesystems will now be created on these devices. If you made any" -echo -n "mistakes, you may edit this now. Edit? [n] " -getresp "n" -case "$resp" in - y*|Y*) - vi ${FILESYSTEMS} - ;; - *) - ;; -esac - -# Loop though the file, place filesystems on each device. -echo "Creating filesystems..." -( - while read line; do - _device_name=`echo $line | awk '{print $1}'` - newfs /dev/r${_device_name} - echo "" - done -) < ${FILESYSTEMS} - -# Get network configuration information, and store it for placement in the -# root filesystem later. -cat << \__network_config_1 -You will now be given the opportunity to configure the network. This will -be useful if you need to transfer the installation sets via FTP or NFS. -Even if you choose not to transfer installation sets that way, this -information will be preserved and copied into the new root filesystem. - -Note, enter all symbolic host names WITHOUT the domain name appended. -I.e. use 'hostname' NOT 'hostname.domain.name'. - -__network_config_1 -echo -n "Configure the network? [y] " -getresp "y" -case "$resp" in - y*|Y*) - echo -n "Enter system hostname: " - resp="" # force at least one iteration - while [ "X${resp}" = X"" ]; do - getresp "" - done - hostname $resp - echo $resp > /tmp/myname - - echo -n "Enter DNS domain name: " - resp="" # force at least one iteration - while [ "X${resp}" = X"" ]; do - getresp "" - done - FQDN=$resp - - configurenetwork - - echo -n "Enter IP address of default route: [none] " - getresp "none" - if [ "X${resp}" != X"none" ]; then - route delete default > /dev/null 2>&1 - if route add default $resp > /dev/null ; then - echo $resp > /tmp/mygate - fi - fi - - echo "" - echo "The host table is as follows:" - echo "" - cat /tmp/hosts - echo "" - echo "You may want to edit the host table in the event that" - echo "you need to mount an NFS server." - echo -n "Would you like to edit the host table? [n] " - getresp "n" - case "$resp" in - y*|Y*) - vi /tmp/hosts - ;; - - *) - ;; - esac - - cat << \__network_config_2 - -You will now be given the opportunity to escape to the command shell to -do any additional network configuration you may need. This may include -adding additional routes, if needed. In addition, you might take this -opportunity to redo the default route in the event that it failed above. -If you do change the default route, and wish for that change to carry over -to the installed system, execute the following command at the shell -prompt: - - echo <ip_address_of_gateway> > /tmp/mygate - -where <ip_address_of_gateway> is the IP address of the default router. - -__network_config_2 - echo -n "Escape to shell? [n] " - getresp "n" - case "$resp" in - y*|Y*) - echo "Type 'exit' to return to install." - sh - ;; - - *) - ;; - esac - ;; - *) - ;; -esac - -# Now that the network has been configured, it is safe to configure the -# fstab. -awk '{ - if ($2 == "/") - printf("/dev/%s %s ffs rw 1 1\n", $1, $2) - else - printf("/dev/%s %s ffs rw 1 2\n", $1, $2) -}' < ${FILESYSTEMS} > /tmp/fstab - -echo "The fstab is configured as follows:" -echo "" -cat /tmp/fstab -cat << \__fstab_config_1 - -You may wish to edit the fstab. For example, you may need to resolve -dependencies in the order which the filesystems are mounted. You may -also wish to take this opportunity to place NFS mounts in the fstab. -This would be especially useful if you plan to keep '/usr' on an NFS -server. - -__fstab_config_1 -echo -n "Edit the fstab? [n] " -getresp "n" -case "$resp" in - y*|Y*) - vi /tmp/fstab - ;; - - *) - ;; -esac - -# Now that the 'real' fstab is configured, we munge it into a 'shadow' -# fstab which we'll use for mounting and unmounting all of the target -# filesystems relative to /mnt. Mount all filesystems. -awk '{ - if ($2 == "/") - printf("%s /mnt %s %s %s %s\n", $1, $3, $4, $5, $6) - else - printf("%s /mnt%s %s %s %s %s\n", $1, $2, $3, $4, $5, $6) -}' < /tmp/fstab > /tmp/fstab.shadow - -echo "" - -# Must mount filesystems manually, one at a time, so we can make sure the -# mount points exist. -( - while read line; do - _dev=`echo $line | awk '{print $1}'` - _mp=`echo $line | awk '{print $2}'` - _fstype=`echo $line | awk '{print $3}'` - _opt=`echo $line | awk '{print $4}'` - - # If not the root filesystem, make sure the mount - # point is present. - if [ "X${_mp}" != X"/mnt" ]; then - mkdir -p $_mp - fi - - # Mount the filesystem. If the mount fails, exit - # with an error condition to tell the outer - # layer to bail. - if ! mount -v -t $_fstype -o $_opt $_dev $_mp ; then - # error message displayed by mount - exit 1 - fi - done -) < /tmp/fstab.shadow - -if [ "X${?}" != X"0" ]; then - cat << \__mount_filesystems_1 - -FATAL ERROR: Cannot mount filesystems. Double-check your configuration -and restart the installation process. - -__mount_filesystems_1 - exit -fi - -# Ask the user which media to load the distribution from. -cat << \__install_sets_1 - -It is now time to extract the installation sets onto the disk. -Make sure The sets are either on a local device (i.e. tape, CD-ROM) or on a -network server. - -__install_sets_1 - -ALLSETS="base comp etc games man misc text" -UPGRSETS="base comp games man misc text" -RELDIR= - -if [ -f $RELDIR/base.tar.gz ]; then - echo -n "Install from sets in the current root filesystem? [y] " - getresp "y" - case "$resp" in - y*|Y*) - for _f in $ALLSETS; do - if [ ! -f $RELDIR/${_f}.tar.gz ]; then - continue; - fi - echo -n "Install set \"$_f\" ? [y]" - getresp "y" - case "$resp" in - y*|Y*) - cat $RELDIR/${_f}.tar.gz | - (cd /mnt; tar -zxvpf -) - _yup=X - ;; - *) - continue; - ;; - esac - echo "Extraction complete." - done - resp="$_yup" - ;; - *) - resp="" - ;; - esac -else - # Go on prodding for alternate locations - resp="" # force at least one iteration -fi - -while [ "X${resp}" = X"" ]; do - 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 - - # Give the user the opportunity to extract more sets. They don't - # necessarily have to come from the same media. - echo "" - echo -n "Extract more sets (from other media)? [n] " - getresp "n" - case "$resp" in - y*|Y*) - # Force loop to repeat - resp="" - ;; - - *) - ;; - esac -done - -# 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..." - cp $file /mnt/etc/$file - fi - done - - echo "Installing timezone link for $TZ ..." - rm -f /mnt/etc/localtime - ln -s /usr/share/zoneinfo/$TZ /mnt/etc/localtime - - echo -n "Making devices..." - pid=`twiddle` - cd /mnt/dev - sh MAKEDEV all - kill $pid - echo "done." - - echo "Copying kernel..." - cp -p /netbsd /mnt/netbsd - - md_installboot ${ROOTDISK} -) - -# Unmount all filesystems and check their integrity. -( - _devs="" - _mps="" - # maintain reverse order - while read line; do - _devs="`echo $line | awk '{print $1}'` ${_devs}" - _mps="`echo $line | awk '{print $2}'` ${_mps}" - done - echo -n "Umounting filesystems... " - for _mp in ${_mps}; do - echo -n "${_mp} " - umount ${_mp} - done - echo "Done." - - echo "Checking filesystem integrity..." - for _dev in ${_devs}; do - echo "${_dev}" - fsck -f ${_dev} - done - echo "Done." -) < /tmp/fstab.shadow - -##umount -a -##echo "Checking filesystem integrity..." -##fsck -pf - -#md_installboot_xxx - -cat << \__congratulations_1 - -CONGRATULATIONS! You have successfully installed NetBSD on your disk! -To boot the installed system, enter halt at the command prompt. Once the -system has halted, reset the machine and boot from the disk. - -__congratulations_1 - -# ALL DONE! -exit diff --git a/distrib/sparc/miniroot/list b/distrib/sparc/miniroot/list index 4a42b4a5135..9bbea26cec1 100644 --- a/distrib/sparc/miniroot/list +++ b/distrib/sparc/miniroot/list @@ -1,4 +1,4 @@ -# $NetBSD: list,v 1.1 1995/12/18 22:54:44 pk Exp $ +# $NetBSD: list,v 1.2 1996/01/06 22:42:17 pk Exp $ # We can only get this program this way. COPY ${DESTDIR}/sbin/mount_mfs sbin/mount_mfs @@ -19,8 +19,6 @@ SYMLINK /tmp/hosts etc/hosts # and the installation tools COPY ${ARCHDIR}/dot.profile .profile -COPY ${ARCHDIR}/../install.sh install -COPY ${ARCHDIR}/../upgrade.sh upgrade -SPECIAL chmod 755 install upgrade +COPY ${ARCHDIR}/../install.md install.md COPY ${DESTDIR}/usr/mdec/boot boot SPECIAL sync; ${DESTDIR}/usr/mdec/binstall -v ffs ${TARGDIR} |