summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTheo de Raadt <deraadt@cvs.openbsd.org>1996-01-07 13:23:11 +0000
committerTheo de Raadt <deraadt@cvs.openbsd.org>1996-01-07 13:23:11 +0000
commit0572179d10a5477e5ebb58a0170eb8ee8c5b763c (patch)
tree4ec8f4d167113c5211c5eb2b368c44a2e5090964
parent1d8b4eab300af38356404b265e7613bb8042a255 (diff)
update from netbsd
-rw-r--r--distrib/miniroot/Makefile5
-rw-r--r--distrib/miniroot/install.sh424
-rw-r--r--distrib/miniroot/install.sub (renamed from distrib/sparc/upgrade.sh)750
-rw-r--r--distrib/miniroot/list8
-rw-r--r--distrib/miniroot/upgrade.sh314
-rw-r--r--distrib/sparc/install.md175
-rw-r--r--distrib/sparc/install.sh1289
-rw-r--r--distrib/sparc/miniroot/list6
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}