summaryrefslogtreecommitdiff
path: root/distrib
diff options
context:
space:
mode:
authorTheo de Raadt <deraadt@cvs.openbsd.org>2002-04-21 17:12:54 +0000
committerTheo de Raadt <deraadt@cvs.openbsd.org>2002-04-21 17:12:54 +0000
commit286c6c25aac0e1e129d58c60e02d8a7cc6d27e63 (patch)
tree112b326a3112feb499830e6d175af6b1f117ee3f /distrib
parent1e599e1c0b32bb6e9f29eb08cb34ee4cdc8c29fc (diff)
simpleroot no longer used
Diffstat (limited to 'distrib')
-rw-r--r--distrib/alpha/simpleroot/Makefile.inc7
-rw-r--r--distrib/alpha/simpleroot/list30
-rw-r--r--distrib/simpleroot/Makefile82
-rw-r--r--distrib/simpleroot/install.sh533
-rw-r--r--distrib/simpleroot/install.sub1459
5 files changed, 0 insertions, 2111 deletions
diff --git a/distrib/alpha/simpleroot/Makefile.inc b/distrib/alpha/simpleroot/Makefile.inc
deleted file mode 100644
index 0b9ad002a27..00000000000
--- a/distrib/alpha/simpleroot/Makefile.inc
+++ /dev/null
@@ -1,7 +0,0 @@
-# $OpenBSD: Makefile.inc,v 1.5 2001/09/04 22:25:02 deraadt Exp $
-
-IMAGESIZE?= 65536 # 32MB in 512 byte blocks
-BOOT_INSTALLBOOT?= /usr/mdec/bootxx
-GZIP?= cat
-GZIPFLAGS?=
-GZIPEXT?=
diff --git a/distrib/alpha/simpleroot/list b/distrib/alpha/simpleroot/list
deleted file mode 100644
index b3e536e5f59..00000000000
--- a/distrib/alpha/simpleroot/list
+++ /dev/null
@@ -1,30 +0,0 @@
-.cshrc
-.profile
-altroot
-bin
-bsd*
-dev
-etc
-home
-mnt
-root
-sbin
-sys
-tmp
-usr/bin/chflags
-usr/bin/cksum
-usr/bin/cmp
-usr/bin/cut
-usr/bin/ftp
-usr/bin/less
-usr/bin/more
-usr/bin/rsh
-usr/bin/sed
-usr/bin/sort
-usr/bin/strings
-usr/bin/tftp
-usr/bin/vi
-usr/mdec
-usr/sbin/rdate
-usr/share/misc/termcap
-var
diff --git a/distrib/simpleroot/Makefile b/distrib/simpleroot/Makefile
deleted file mode 100644
index e3298576cb9..00000000000
--- a/distrib/simpleroot/Makefile
+++ /dev/null
@@ -1,82 +0,0 @@
-# $OpenBSD: Makefile,v 1.14 2001/06/23 19:44:56 deraadt Exp $
-
-REV= ${OSrev}
-
-ARCHDIR= ${.CURDIR}/../${MACHINE}/simpleroot
-
-.if exists(${ARCHDIR}/Makefile.inc)
-.include "${ARCHDIR}/Makefile.inc"
-.endif
-
-MOUNT_POINT?= /mnt
-VND?= svnd0
-VND_DEV= /dev/${VND}a
-VND_RDEV= /dev/r${VND}a
-DISKTYPE= simpleroot
-PID!= echo $$$$
-IMAGEDIR?= /var/tmp
-REALIMAGE!= echo ${IMAGEDIR}/image.${PID}
-IMAGE?= ${IMAGEDIR}/simpleroot${REV}.fs
-NEWFSOPTS?=
-GZIP?=
-
-LIST= ${ARCHDIR}/list
-
-.ifndef DESTDIR
-all:
- @echo setenv DESTDIR before makeing a miniroot!
- @false
-.else
-
-all:
- dd if=/dev/zero of=${REALIMAGE} count=${IMAGESIZE}
- vnconfig -v -c ${VND} ${REALIMAGE}
- disklabel -w -r ${VND} ${DISKTYPE}
-.ifdef BOOT_DISKLABEL
- disklabel -B ${BOOT_DISKLABEL} ${VND} ${DISKTYPE}
-.endif
- newfs ${NEWFSOPTS} ${VND_RDEV}
- mount ${VND_DEV} ${MOUNT_POINT}
-.ifdef BOOT_INSTALLBOOT
- /usr/mdec/installboot -v ${MOUNT_POINT}/boot ${BOOT_INSTALLBOOT} ${VND}
-.endif
- cd ${DESTDIR} && tar cf - `cat ${LIST}` | ( cd ${MOUNT_POINT}; \
- tar xpf - )
- cp ${.CURDIR}/install.sh ${MOUNT_POINT}/install
- chmod 755 ${MOUNT_POINT}/install
- sed "/^VERSION=/s/=.*/=${REV}/" < ${.CURDIR}/install.sub \
- > ${MOUNT_POINT}/install.sub
- sed -e "s/^ARCH=ARCH$/ARCH=`arch -s`/" \
- ${.CURDIR}/../${MACHINE}/install.md > ${MOUNT_POINT}/install.md
- mkdir -p ${MOUNT_POINT}/mnt2
-.if exists(/sbin/ldconfig)
- /usr/sbin/chroot ${MOUNT_POINT} /sbin/ldconfig
-.endif
- ( cd ${MOUNT_POINT} && \
- tar cf - .??* * | ${GZIP} ${GZIPFLAGS} \
- > ${IMAGEDIR}/simpleroot${REV}.tar${GZIPEXT} )
- @echo ""
- @df -i ${MOUNT_POINT}
- @echo ""
- umount ${MOUNT_POINT}
- vnconfig -u ${VND}
- cp ${REALIMAGE} ${IMAGE}
-.if (${GZIP} == "gzip")
- ${GZIP} ${IMAGE}
-.endif
- rm ${REALIMAGE}
-
-unconfig:
- -umount -f ${MOUNT_POINT}
- -vnconfig -u ${VND_DEV}
- -/bin/rm -f ${IMAGE}
-
-clean cleandir:
- /bin/rm -f core ${IMAGE}
-
-beforeinstall:
- cp ${IMAGE} ${DESTDIR}/snapshot
-
-.endif # DESTDIR check
-.include <bsd.obj.mk>
-.include <bsd.subdir.mk>
diff --git a/distrib/simpleroot/install.sh b/distrib/simpleroot/install.sh
deleted file mode 100644
index 0f9c11829a8..00000000000
--- a/distrib/simpleroot/install.sh
+++ /dev/null
@@ -1,533 +0,0 @@
-#!/bin/sh
-# $OpenBSD: install.sh,v 1.4 2001/06/23 19:44:57 deraadt Exp $
-# $NetBSD: install.sh,v 1.5.2.8 1996/08/27 18:15:05 gwr Exp $
-#
-# Copyright (c) 1996 The NetBSD Foundation, Inc.
-# All rights reserved.
-#
-# This code is derived from software contributed to The NetBSD Foundation
-# by Jason R. Thorpe.
-#
-# 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 by the NetBSD
-# Foundation, Inc. and its contributors.
-# 4. Neither the name of The NetBSD Foundation nor the names of its
-# contributors may be used to endorse or promote products derived
-# from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
-# ``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 REGENTS OR CONTRIBUTORS 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.
-#
-
-# OpenBSD 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_copy_kernel() - copy a kernel to the installed disk
-# md_get_diskdevs() - return available disk devices
-# md_get_cddevs() - return available CD-ROM devices
-# md_get_ifdevs() - return available network interfaces
-# md_get_partition_range() - return range of valid partition letters
-# md_installboot() - install boot-blocks on disk
-# md_labeldisk() - put label on a disk
-# md_prep_disklabel() - label the root disk
-# md_welcome_banner() - display friendly message
-# md_not_going_to_install() - display friendly message
-# md_congrats() - display friendly message
-# md_native_fstype() - native filesystem type for disk installs
-# md_native_fsopts() - native filesystem options for disk installs
-
-# test if / is read write
-echo "" > /tmp/test_read_write_root 2> /dev/null
-if [ "X$?" != X"0" ]; then
- echo "Please mount your rootfilesystem read/write - for"
- echo "instance - if the disk you booted from is rz0 do"
- echo "the following:"
- echo ""
- echo " mount /dev/rz0a /"
- echo ""
- echo "Then you can restart the installation"
- echo ""
- exit 0
-else
- rm -f /tmp/test_read_write_root
-fi
-
-# include machine dependent subroutines
-. ./install.md
-
-# include common subroutines
-. ./install.sub
-
-# which sets?
-THESETS="$ALLSETS $MDSETS"
-
-if [ "`df /`" = "`df /mnt`" ]; then
- # Good {morning,afternoon,evening,night}.
- md_welcome_banner
- echo -n "Proceed with installation? [n] "
-else
- echo "You seem to be trying to restart an interrupted installation!"
- echo ""
- echo "You can try to skip the disk preparation steps and continue,"
- echo "otherwise you should reboot the miniroot and start over..."
- echo -n "Skip disk initialization? [n] "
-fi
-getresp "n"
-case "$resp" in
- y*|Y*)
- echo ""
- echo "Cool! Let's get to it..."
- ;;
- *)
- md_not_going_to_install
- exit
- ;;
-esac
-
-echo ""
-echo "In case you install from an simpleroot image dd'ed onto a disk - do"
-echo -n "you plan to install OpenBSD onto the same disk ? [n] "
-getresp "n"
-case "$resp" in
- y*|Y*)
- SIMPLEROOT=simpleroot
- ;;
- *)
- SIMPLEROOT=
- ;;
-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
-
-if [ "`df /`" = "`df /mnt`" ]; then
-
- while [ "X${ROOTDISK}" = "X" ]; do
- getrootdisk
- done
-
- if [ "X${SIMPLEROOT}" = X"simpleroot" ]; then
- SIMPLEROOTDISK=${ROOTDISK}a
- if [ ! -L /mnt ]; then
- ( cd /; rmdir /mnt; ln -s / /mnt )
- fi
- else
- SIMPLEROOTDISK=NO_GOOD_GREPABLE_STRING
- fi
-
- # Deal with disklabels, including editing the root disklabel
- # and labeling additional disks. This is machine-dependent since
- # some platforms may not be able to provide this functionality.
- md_prep_disklabel ${ROOTDISK}
-
- # 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
- _first_char=`firstchar ${_mount_point}`
- if [ "X${_first_char}" != X"/" ]; then
- echo "mount point must be an absolute path!"
- fi
- done
- if [ "X${_mount_point}" = X"/" ]; then
- echo "root mount point already taken care of!"
- else
- echo "${_device_name} ${_mount_point}" \
- >> ${FILESYSTEMS}
- fi
- 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."
- echo -n "If you made any mistakes, you may edit this now. Edit? [n] "
- getresp "n"
- case "$resp" in
- y*|Y*)
- ${EDITOR} ${FILESYSTEMS}
- ;;
- *)
- ;;
- esac
- echo ""
- echo "The next step will overwrite any existing data on:"
- (
- echo -n " "
- while read _device_name _junk; do
- echo -n "${_device_name} "
- done
- echo ""
- ) < ${FILESYSTEMS}
- echo ""
-
- echo -n "Are you really sure that you're ready to proceed? [n] "
- getresp "n"
- case "$resp" in
- y*|Y*)
- ;;
- *)
- echo "ok, try again later..."
- exit
- ;;
- esac
-
- # Loop though the file, place filesystems on each device.
- echo "Creating filesystems..."
- cat ${FILESYSTEMS} | grep -v ${SIMPLEROOTDISK} | (
- while read _device_name _junk; do
- newfs /dev/r${_device_name}
- echo ""
- done
- )
-
- # TTT this should be done better
- if [ "X${SIMPLEROOT}" = X"simpleroot" ]; then
- USRDEVICE=`grep /usr$ ${FILESYSTEMS} | cut -d" " -f1`
- mkdir /tmp/mnt
- mount /dev/${USRDEVICE} /tmp/mnt
- echo -n "Copying the old /usr directory to the new location ..."
- ( cd /usr; tar cf - * ) | ( cd /tmp/mnt; tar xpf - )
- echo " done."
- umount /tmp/mnt
- rmdir /tmp/mnt
- fi
-fi
-
-# 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*)
- resp="" # force at least one iteration
- while [ "X${resp}" = X"" ]; do
- echo -n "Enter system hostname: [$resp] "
- getresp "$resp"
- done
- hostname $resp
- echo $resp > /tmp/myname
-
- resp="" # force at least one iteration
- while [ "X${resp}" = X"" ]; do
- echo -n "Enter DNS domain name: [$FQDN] "
- getresp "$FQDN"
- 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 are doing an NFS installation or an FTP installation"
- echo "without a name server and want to refer to the server by"
- echo "name rather than by its numeric ip address."
- echo -n "Would you like to edit the host table? [n] "
- getresp "n"
- case "$resp" in
- y*|Y*)
- ${EDITOR} /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
-
-if [ "`df /`" = "`df /mnt`" ]; then
- # Now that the network has been configured, it is safe to configure the
- # fstab.
- (
- while read _dev _mp; do
- if [ "$mp" = "/" ]; then
- echo /dev/$_dev $_mp ffs rw 1 1
- else
- echo /dev/$_dev $_mp ffs rw 1 2
- fi
- done
- ) < ${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*)
- ${EDITOR} /tmp/fstab
- ;;
-
- *)
- ;;
- esac
-
- echo ""
- munge_fstab /tmp/fstab /tmp/fstab.shadow
- mount_fs /tmp/fstab.shadow
-fi
-
-mount | while read line; do
- set -- $line
- if [ "$2" = "/" -a "$3" = "nfs" ]; then
- echo "You appear to be running diskless."
- echo -n "Are the install sets on one of your currently mounted filesystems? [n] "
- getresp "n"
- case "$resp" in
- y*|Y*)
- get_localdir
- ;;
- *)
- ;;
- esac
- fi
-done
-
-install_sets $THESETS
-
-# Copy in configuration information and make devices in target root.
-
-if [ ! -d /mnt/etc -o ! -d /mnt/usr/share/zoneinfo -o ! -d /mnt/dev ]; then
- echo "Something needed to complete the installation seems"
- echo "to be missing, did you forget to extract a required set?"
- echo ""
- echo "Please review the installation notes and try again..."
- echo ""
- echo "You *may* be able to correct the problem and type 'install'"
- echo "without having to extract all of the distribution sets again."
- exit
-fi
-
-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
-
-# If no zoneinfo on the installfs, give them a second chance
-# TTT if [ ! -e /usr/share/zoneinfo ]; then
- get_timezone
-# TTT fi
-if [ ! -e /mnt/usr/share/zoneinfo ]; then
- echo "Cannot install timezone link..."
-else
- echo -n "Installing timezone link..."
- rm -f /mnt/etc/localtime
- ln -s /usr/share/zoneinfo/$TZ /mnt/etc/localtime
- echo "done."
-fi
-
-
-if [ "X${SIMPLEROOT}" != X"simpleroot" ]; then
-
- md_copy_kernel
-
- md_installboot ${ROOTDISK}
-
- if [ ! -x /mnt/dev/MAKEDEV ]; then
- echo "No /dev/MAKEDEV installed, something is wrong here..."
- exit
- fi
-
- echo -n "Making all devices..."
- cd /mnt/dev
- sh MAKEDEV all
- echo "done."
- cd /
-else
- echo ""
- echo "Removing files from the simpleroot which do not belong"
- echo "to the installed sets."
- echo ""
- echo -n "Did you install the comp${VERSION} set ? [y] "
- getresp "n"
- case "$resp" in
- n*|N*)
- rm -f /sys /var/db/libc.tags
- ;;
- *)
- ;;
- esac
- echo -n "Did you install the game${VERSION} set ? [y] "
- getresp "n"
- case "$resp" in
- n*|N*)
- rm -rf /var/games
- ;;
- *)
- ;;
- esac
-fi
-
-rmdir /mnt2
-
-unmount_fs /tmp/fstab.shadow
-
-if [ "X${SIMPLEROOT}" = X"simpleroot" ]; then
- rm -f /mnt; mkdir /mnt
-fi
-
-# Pat on the back.
-md_congrats
-
-# ALL DONE!
-exit 0
diff --git a/distrib/simpleroot/install.sub b/distrib/simpleroot/install.sub
deleted file mode 100644
index 4a1625171ae..00000000000
--- a/distrib/simpleroot/install.sub
+++ /dev/null
@@ -1,1459 +0,0 @@
-#!/bin/sh
-# $OpenBSD: install.sub,v 1.12 2001/09/19 00:04:03 krw Exp $
-# $NetBSD: install.sub,v 1.5.2.8 1996/09/02 23:25:02 pk Exp $
-#
-# Copyright (c) 1996 The NetBSD Foundation, Inc.
-# All rights reserved.
-#
-# This code is derived from software contributed to The NetBSD Foundation
-# by Jason R. Thorpe.
-#
-# 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 by the NetBSD
-# Foundation, Inc. and its contributors.
-# 4. Neither the name of The NetBSD Foundation nor the names of its
-# contributors may be used to endorse or promote products derived
-# from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
-# ``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 REGENTS OR CONTRIBUTORS 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.
-#
-
-# OpenBSD installation/upgrade script - common subroutines.
-
-ROOTDISK="" # filled in below
-VERSION=
-export VERSION
-
-ALLSETS="base etc misc comp man game" # default install sets
-UPGRSETS="base misc comp man game" # default upgrade sets
-SNAPSETS="bin dev etc games man misc sbin \
- usr.bin usr.binutils usr.games usr.include \
- usr.lib usr.libexec usr.misc usr.sbin usr.share var"
-THESETS= # one of the above
-
-local_sets_dir="" # Path searched for sets by install_sets
- # on the local filesystems
-
-# decide upon an editor
-if [ X$EDITOR = X ]; then
- if [ -x /usr/bin/vi ]; then
- EDITOR=vi
- else
- EDITOR=ed
- fi
- export EDITOR
-fi
-
-# Please don't use the 1 of n form below, good idea, wrong implementation!
-# get a reponse with default[s]
-getresp() {
- valid="false"
- while [ "X$valid" = "Xfalse" ]; do
- read resp
- if [ "X$resp" = "X" ]; then
- resp=$1
- fi
- if [ $# -gt 1 ]; then
- for i in $@; do
- if [ "X$resp" = "X$i" ]; then
- valid="true"
- fi
- done
- else
- valid="true"
- fi
- if [ "X$valid" = "Xfalse" ]; then
- echo "Try again: Enter one of [$@]"
- fi
- done
-}
-
-isin() {
-# test the first argument against the remaining ones, return succes on a match
- local _a
-
- _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
- local _a
-
- _a=$1; shift
- while [ $# != 0 ]; do
- if [ "$_a" != "$1" ]; then
- echo "$1";
- fi
- shift
- done
-}
-
-cutword () {
-# read a line of data, return Nth element.
- local _a
- local _n
- local _oifs
-
- # optional field separator
- _oifs="$IFS"
- case "$1" in
- -t?*) IFS=${1#-t}; shift;;
- esac
-
- _n=$1
- read _a; set -- $_a
- IFS="$_oifs"
- if [ "$1" = "" ]; then return; fi
- eval echo \$$_n
-}
-
-cutlast () {
-# read a line of data, return last element. Equiv. of awk '{print $NF}'.
- local _a
- local _oifs
-
- # optional field separator
- _oifs="$IFS"
- case "$1" in
- -t?*) IFS=${1#-t}; shift;;
- esac
-
- read _a; set -- $_a
- IFS="$_oifs"
- if [ "$1" = "" ]; then return; fi
- while [ "$#" -gt 10 ]; do shift 10; done
- eval echo \$$#
-}
-
-firstchar () {
-# return first character of argument
- local _a
- _a=$1
- while [ ${#_a} != 1 ]; do
- _a=${_a%?}
- done
- echo $_a
-}
-
-basename () {
- local _oifs
- if [ "$1" = "" ]; then return; fi
- _oifs="$IFS"
- IFS="/"
- set -- $1
- IFS="$_oifs"
- while [ "$#" -gt 10 ]; do shift 10; done
- eval echo \$$#
-}
-
-dir_has_sets() {
- # return true when the directory $1 contains a set for $2...$n
- local _dir
- local _file
-
- _dir=$1; shift
- for _file in $*
- do
- if [ -f $_dir/${_file}${VERSION}.tar.gz ]; then
- return 0
- fi
- # Try for stupid msdos convention
- if [ -f $_dir/${_file}${VERSION}.tgz ]; then
- return 0
- fi
- # Special check for kernel
- if [ $_file = "kernel" -a -f $_dir/bsd ]; then
- return 0
- fi
- done
- return 1
-}
-
-twiddle() {
-# spin the propeller so we don't get bored
- while : ; do
- sleep 1; echo -n "/";
- sleep 1; echo -n "-";
- sleep 1; echo -n "\\";
- sleep 1; echo -n "|";
- done > /dev/tty & echo $!
-}
-
-get_localdir() {
- # $1 is relative mountpoint
- local _mp
- local _dir
-
- _mp=$1
- _dir=
- while : ; do
- echo -n "Enter the pathname where the sets are stored [$_dir] "
- getresp "$_dir"
- _dir=$resp
-
- # Allow break-out with empty response
- if [ -z "$_dir" ]; then
- echo -n "Are you sure you don't want to set the pathname? [n] "
- getresp "n"
- case "$resp" in
- y*|Y*)
- break
- ;;
- *)
- continue
- ;;
- esac
- fi
-
- if dir_has_sets "$_mp/$_dir" $THESETS
- then
- local_sets_dir="$_mp/$_dir"
- break
- else
- cat << __get_reldir_1
-The directory \"$local_sets_dir\" does not exist, or does not hold any of the
-upgrade sets.
-__get_reldir_1
- echo -n "Re-enter pathname? [y] "
- getresp "y"
- case "$resp" in
- y*|Y*)
- ;;
- *)
- local_sets_dir=""
- break
- ;;
- esac
- fi
- done
-}
-
-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
-}
-
-labelmoredisks() {
- cat << \__labelmoredisks_1
-
-You may label the following disks:
-
-__labelmoredisks_1
- echo "$_DKDEVS"
- echo ""
- echo -n "Label which disk? [done] "
- getresp "done"
- case "$resp" in
- done)
- ;;
-
- *)
- if isin $resp $_DKDEVS ; then
- md_labeldisk $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 its entry.
- if [ ! -f /tmp/hosts ]; then
- echo "127.0.0.1 localhost" > /tmp/hosts
- fi
-
- sed "/^$1 /d" < /tmp/hosts > /tmp/hosts.new
- mv /tmp/hosts.new /tmp/hosts
-
- echo "$1 $2.$FQDN $2" >> /tmp/hosts
-}
-
-addifconfig() {
- # $1 - interface name
- # $2 - interface symbolic name
- # $3 - interface IP address
- # $4 - interface netmask
- # $5 - (optional) interface link-layer directives
-
- # Create a hostname.* file for the interface.
- echo "inet $2 $4 NONE $5" > /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 successfully 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() {
-
- local _up
- local _interface_name
- local _interface_ip
- local _interface_mask
- local _interface_symname
- local _interface_extra
- local _hostname
-
- _interface_name=$1
-
- set -- `ifconfig $_interface_name | sed -n '
- 1s/.*<UP,.*$/UP/p
- 1s/.*<.*>*$/DOWN/p
- 2s/inet//
- 2s/--> [0-9.][0-9.]*//
- 2s/netmask//
- 2s/broadcast//
- 2p'`
-
- _up=$1
- _interface_ip=$2
- _interface_mask=$3
-
- # Get IP address
- resp="" # force one iteration
- while [ "X${resp}" = X"" ]; do
- echo -n "IP address? [$_interface_ip] "
- getresp "$_interface_ip"
- _interface_ip=$resp
- done
-
- # Get symbolic name
- _hostname=`hostname`
- resp="" # force one iteration
- while [ "X${resp}" = X"" ]; do
- echo -n "Symbolic (host) name? [$_hostname] "
- getresp "$_hostname"
- _interface_symname=$resp
- done
-
- # Get netmask
- resp="" # force one iteration
- while [ "X${resp}" = X"" ]; do
- echo -n "Netmask? [$_interface_mask] "
- getresp "$_interface_mask"
- _interface_mask=$resp
- done
-
- echo "Your network interface might require additional link-layer"
- echo "directives (like \`link0'). If this is the case you can enter"
- echo "these at the next prompt."
- echo ""
- echo -n "Additional link-layer arguments? [$_interface_extra] "
- getresp "$_interface_extra"
- if [ "X${resp}" != X"" ]; then
- _interface_extra=$resp
- fi
-
- # Configure the interface. If it
- # succeeds, add it to the permanent
- # network configuration info.
- if [ $_up != "UP" ]; then
- ifconfig ${_interface_name} down
- if ifconfig ${_interface_name} inet \
- ${_interface_ip} \
- netmask ${_interface_mask} ${_interface_extra} up ; then
- addifconfig \
- ${_interface_name} \
- ${_interface_symname} \
- ${_interface_ip} \
- ${_interface_mask} "${_interface_extra}"
- return 0
- fi
- else
- echo "Interface ${_interface_name} is already active."
- echo "Just saving configuration on new root filesystem."
- addifconfig \
- ${_interface_name} \
- ${_interface_symname} \
- ${_interface_ip} \
- ${_interface_mask} "${_interface_extra}"
- 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
- route show
- echo ""
- echo "Resolver enabled."
- else
- route -n show
- echo ""
- echo "Resolver not enabled."
- fi
-
- return 0
-}
-
-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
-
- # Provide a list of possible FTP servers
- echo -n "Do you want a list of potential FTP servers? [y] "
- getresp "y"
- case "$resp" in
- n*|N*) ;;
- *)
- ftp -V -a ftp://ftp.openbsd.org/pub/OpenBSD/`echo ${VERSION} | sed 's/\(.\)\(.\)/\1.\2/'`/ftplist | cat
- ;;
- esac
-
- # 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
- _ftp_server_login=anonymous
- 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
- _ftp_server_password=root@`hostname`.${FQDN}
- 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. If you specify just a setname,
-it will be treated as setname${VERSION}.tgz or you can specify the
-explict name. You can also enter 'all' to install all the standard sets,
-or 'list' to list the files avilable at ${_ftp_server_ip}:${_ftp_server_dir}.
-When you are done entering files, enter 'done'.
-
-If you were enter 'all', the following sets would be fetched/extracted:
- $THESETS
-
-Some of these sets are required for your ${MODE} and some are optional.
-Consult the intallation notes if you are not sure which sets are required!
-
-__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
- if [ "X${resp}" = X"list" ]; then
- echo "ls" >> /tmp/ftp-script.sh
- continue
- fi
- if [ "X${resp}" = X"all" ]; then
- resp="$THESETS"
- fi
-
- for _ftp_file in $resp; do
- if [ "X${_ftp_file}" = "Xkernel" ]; then
- echo -n "get " >> /tmp/ftp-script.sh
- echo "bsd" >> /tmp/ftp-script.sh
- else
- echo -n "get " >> /tmp/ftp-script.sh
- echo -n "${_ftp_file}" | \
- sed "/\./!s/\$/${VERSION}.tgz/" >> \
- /tmp/ftp-script.sh
- if [ "X${SIMPLEROOT}" != X"simpleroot" ]; then
- echo " |\"tar -zxvpf - \"" >> \
- /tmp/ftp-script.sh
- else
- echo " |\"tar -zxvpf - ./usr\"" >> \
- /tmp/ftp-script.sh
- fi
- fi
- done
- done
-
- echo "quit" >> /tmp/ftp-script.sh
- echo "__end_commands" >> /tmp/ftp-script.sh
-
- cat << \__install_ftp_3
-
-Fetching the files via ftp may take a long time, especially over a slow
-network connection. You may want to review/edit the ftp script to make
-sure that you haven't made any errors in the file names.
-__install_ftp_3
- echo -n "edit ftp script? [n] "
- getresp "n"
- case "$resp" in
- y*|Y*)
- $EDITOR /tmp/ftp-script.sh
- ;;
- *)
- ;;
- esac
-
- echo -n "submit ftp script? [y] "
- getresp "y"
- case "$resp" in
- y*|Y*)
- sh /tmp/ftp-script.sh
- echo "Extraction complete."
- ;;
- *)
- ;;
- esac
-
- rm -f /tmp/ftp-script.sh
-}
-
-install_from_mounted_fs() {
- # $1 - directory containing installation sets
- local _filename
- local _sets
- local _next
- local _f
- local _kernel
-
- _sets=""
- if dir_has_sets $1 $THESETS; then
- for _f in $THESETS ; do
- if [ "X${_f}" = "Xkernel" ]; then
- if [ -f $1/bsd ]; then
- _kernel=bsd
- fi
- elif [ -f $1/${_f}${VERSION}.tar.gz ]; then
- _sets="$_sets ${_f}${VERSION}.tar.gz"
- elif [ -f $1/${_f}${VERSION}.tgz ]; then
- _sets="$_sets ${_f}${VERSION}.tgz"
- fi
- done
- else
- echo "There are no OpenBSD install sets available in \"$1\""
- return
- fi
-
- while : ; do
- echo "The following sets are available for extraction:"
- echo "(marked sets have already been extracted)"
- echo ""
-
- _next=""
- for _f in $_sets $_kernel ; do
- if isin $_f $_setsdone; then
- echo -n "[X] "
- _next=""
- else
- echo -n " "
- if [ -z "$_next" ]; then _next=$_f; fi
- fi
- echo $_f
- done
- echo ""
-
- # Get the name of the file.
- if [ "X$_next" = "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 [$_next]? "
- getresp "$_next"
- _f=$resp
- _filename="/$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
- if [ X$_f = X$_kernel ]; then
- cp $_filename /mnt/$_f
- else
- if [ "X${SIMPLEROOT}" != X"simpleroot" ]; then
- cat $_filename | (cd /mnt; tar -zxvpf -)
- else
- cat $_filename | (cd /mnt; tar -zxvpf - ./usr)
- fi
- fi
- echo "Extraction complete."
- _setsdone="$_f $_setsdone"
-
- done
-}
-
-install_cdrom() {
- local _drive
- local _partition_range
- local _partition
- local _fstype
- local _directory
-
- # Get the cdrom device info
- cat << \__install_cdrom_1
-
-The following CD-ROM devices are installed on your system; please select
-the CD-ROM device containing the partition with the installation sets:
-
-__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
- _drive=$resp
- else
- echo ""
- echo "The CD-ROM $resp does not exist."
- echo "Aborting."
- return
- fi
- ;;
- esac
-
- # Get partition
- _partition_range=`md_get_partition_range`
- resp="" # force one iteration
- while [ "X${resp}" = X"" ]; do
- echo -n "Partition? [c] "
- getresp "c"
- case "$resp" in
- $_partition_range)
- _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)
- _fstype=$resp
- ;;
-
- *)
- echo "Invalid response: $resp"
- resp="" # force loop to repeat
- ;;
- esac
- done
-
- # Mount the CD-ROM
- if ! mount -t ${_fstype} -o ro \
- /dev/${_drive}${_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. [${_directory}] "
- getresp "${_directory}"
- done
- _directory=$resp
-
- install_from_mounted_fs /mnt2/${_directory}
- umount -f /mnt2 > /dev/null 2>&1
-}
-
-mount_a_disk() {
- # Mount a disk on /mnt2. The set of disk devices to choose from
- # is $_DKDEVS.
- # returns 0 on failure.
-
- local _drive
- local _partition_range
- local _partition
- local _fstype
- local _fsopts
- local _directory
- local _md_fstype
- local _md_fsopts
-
- getresp "abort"
- case "$resp" in
- abort)
- echo "Aborting."
- return 0
- ;;
-
- *)
- if isin $resp $_DKDEVS ; then
- _drive=$resp
- else
- echo ""
- echo "The disk $resp does not exist."
- echo "Aborting."
- return 0
- fi
- ;;
- esac
-
- # Get partition
- _partition_range=`md_get_partition_range`
- resp="" # force one iteration
- while [ "X${resp}" = X"" ]; do
- echo -n "Partition? [d] "
- getresp "d"
- case "$resp" in
- $_partition_range)
- _partition=$resp
- ;;
-
- *)
- echo "Invalid response: $resp"
- resp="" # force loop to repeat
- ;;
- esac
- done
-
- # Ask for filesystem type
- cat << \__mount_a_disk_2
-
-The following filesystem types are supported:
- 1) ffs
-__mount_a_disk_2
- _md_fstype=`md_native_fstype`
- _md_fsopts=`md_native_fsopts`
- if [ ! -z "$_md_fstype" ]; then
- echo " 2) $_md_fstype"
- else
- _md_fstype="_undefined_"
- fi
- resp="" # force one iteration
- while [ "X${resp}" = X"" ]; do
- echo -n "Which filesystem type? [ffs] "
- getresp "ffs"
- case "$resp" in
- ffs)
- _fstype=$resp
- _fsopts="ro"
- ;;
- $_md_fstype)
- _fstype=$resp
- _fsopts=$_md_fsopts
- ;;
- *)
- echo "Invalid response: $resp"
- resp="" # force loop to repeat
- ;;
- esac
- done
-
- # Mount the disk
- if ! mount -t ${_fstype} -o $_fsopts \
- /dev/${_drive}${_partition} /mnt2 ; then
- echo "Cannot mount disk. Aborting."
- return 0
- fi
- return 1
-}
-
-install_disk() {
- local _directory
-
- cat << \__install_disk_1
-
-The following disk devices are installed on your system; please select
-the disk device containing the partition with the installation sets:
-
-__install_disk_1
- _DKDEVS=`md_get_diskdevs`
- echo "$_DKDEVS"
- echo ""
- echo -n "Which is the disk with the installation sets? [abort] "
-
- if mount_a_disk ; then
- 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. [${_directory}] "
- getresp "${_directory}"
- done
- _directory=$resp
-
- install_from_mounted_fs /mnt2/${_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_from_mounted_fs /mnt2/${_nfs_directory}
- umount -f /mnt2 > /dev/null 2>&1
-}
-
-install_tape() {
- local _xcmd
-
- # 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=$(( $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
- echo -n "Which way is it? [1] "
- getresp "1"
- case "$resp" in
- 1)
- if [ "X${SIMPLEROOT}" != X"simpleroot" ]; then
- _xcmd="tar -zxvpf -"
- else
- _xcmd="tar -zxvpf - ./usr"
- fi
- ;;
-
- 2)
- if [ "X${SIMPLEROOT}" != X"simpleroot" ]; then
- _xcmd="tar -xvpf -"
- else
- _xcmd="tar -xvpf - ./usr"
- fi
- ;;
-
- *)
- echo "Invalid response: $resp."
- resp="" # force loop to repeat
- ;;
- esac
- ( cd /mnt; dd if=$TAPE | $_xcmd )
- done
- echo "Extraction complete."
-}
-
-get_timezone() {
- local _a
- local _zonepath
-
- #
- # If the zoneinfo is not on the installation medium or on the
- # installed filesystem, set TZ to GMT and return immediatly.
- #
- if [ ! -e /usr/share/zoneinfo -o ! -e /mnt/usr/share/zoneinfo ]; then
- TZ=GMT
- return
- fi
- if [ ! -d /usr/share/zoneinfo ]; then
- _zonepath=/mnt
- else
- _zonepath=""
- fi
-
-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 "CET" or "GMT-6".
-Other zones are grouped by continent, with detailed zone information
-separated by a slash ("/"), e.g. "US/Pacific" or "Canada/Mountain".
-
-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 /mnt/etc/localtime 2>/dev/null | cutlast`
- TZ=${TZ#/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 ${_zonepath}/usr/share/zoneinfo
- ;;
- *)
- _a=$resp
- while [ -d ${_zonepath}/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 ${_zonepath}/usr/share/zoneinfo/$_a ;;
- *) _a=${_a}/${resp}
- if [ -f ${_zonepath}/usr/share/zoneinfo/$_a ]; then
- break;
- fi
- ;;
- esac
- done
- if [ -f ${_zonepath}/usr/share/zoneinfo/$_a ]; then
- TZ="$_a"
- echo "You have selected timezone \"$_a\"".
- return
- fi
- echo "'/usr/share/zoneinfo/$_a' is not a valid timezone on this system."
- ;;
- esac
- done
-}
-
-install_sets()
-{
- local _yup
- _yup="FALSE"
-
- # 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 hard disk.
-Make sure the sets are either on a local device (i.e. tape, CD-ROM)
-or on a network server.
-
-You will have the chance to repeat this step or to extract sets from
-several places, so you don't have to try to load all the sets in one
-try and can recover from some errors.
-
-__install_sets_1
-
- if [ "X$local_sets_dir" != "X" ]; then
- install_from_mounted_fs ${local_sets_dir}
- if [ X"$_setsdone" != X ]; then
- _yup="TRUE"
- fi
- fi
-
- # Go on prodding for alternate locations
- resp="" # force at least one iteration
- while [ X"${resp}" = X ]; do
- # If _yup is not FALSE, it means that we extracted sets above.
- # If that's the case, bypass the menu the first time.
- if [ X"$_yup" = X"FALSE" ]; then
- echo -n "Install from (f)tp, (t)ape, (C)D-ROM, (N)FS"
- echo -n " or local (d)isk? "
- getresp ""
- case "$resp" in
- d*|D*)
- install_disk
- resp=d
- ;;
- f*|F*)
- install_ftp
- resp=f
- ;;
- t*|T*)
- install_tape
- resp=t
- ;;
- c*|C*)
- install_cdrom
- resp=c
- ;;
- n*|N*)
- install_nfs
- resp=n
- ;;
- *)
- echo "Invalid response: $resp"
- resp=""
- ;;
- esac
- else
- _yup="FALSE" # So we'll ask next time
- fi
-
- # Give the user the opportunity to extract more sets. They
- # don't necessarily have to come from the same media.
- echo ""
- echo -n "Extract more sets? [n] "
- getresp "n"
- case "$resp" in
- y*|Y*)
- # Force loop to repeat
- resp=""
- ;;
-
- *)
- ;;
- esac
- done
-}
-
-munge_fstab()
-{
- local _fstab
- local _fstab_shadow
- local _dev
- local _mp
- local _fstype
- local _rest
-
- # 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
- ( while read _dev _mp _fstype _rest; do
- # Skip comment lines
- case "$_dev" in
- \#*) continue;;
- *) ;;
- esac
- # and some filesystem types (like there are swap,kernfs,...)
- case "$_fstype" in
- ffs|ufs|nfs) ;;
- *) continue;;
- esac
- if [ "$_mp" = "/" ]; then
- echo $_dev /mnt $_fstype $_rest
- else
- echo $_dev /mnt$_mp $_fstype $_rest
- fi
- done ) < $_fstab > $_fstab_shadow
-}
-
-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
-
- _fstab=$1
-
- cat $_fstab | grep -v ${SIMPLEROOTDISK} | ( while read line; do
- set -- $line
- _dev=$1
- _mp=$2
- _fstype=$3
- _opt=$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
- # later to bail.
- if ! mount -v -t $_fstype -o $_opt $_dev $_mp ; then
- # error message displated by mount
- exit 1
- fi
- done )
-
- 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
-}
-
-unmount_fs()
-{
- # Unmount all filesystems and check their integrity.
- # Usage: [-fast] <fstab file>
- local _fast
- local _fstab
- local _pid
-
- if [ "$1" = "-fast" ]; then
- _fast=1
- _fstab=$2
- else
- _fast=0
- _fstab=$1
- fi
-
- if [ ! \( -f $_fstab -a -s $_fstab \) ]; then
- echo "fstab empty" > /dev/tty
- return
- fi
-
- if [ $_fast = 0 ]; then
- echo -n "Syncing disks..."
- #_pid=`twiddle`
- sync; sleep 4; sync; sleep 2; sync; sleep 2
- #kill $_pid
- echo "done."
- fi
-
- cat $_fstab | grep -v ${SIMPLEROOTDISK} | (
- _devs=""
- _mps=""
- # maintain reverse order
- while read line; do
- set -- $line
- _devs="$1 ${_devs}"
- _mps="$2 ${_mps}"
- done
- echo -n "Umounting filesystems... "
- for _mp in ${_mps}; do
- echo -n "${_mp} "
- umount ${_mp}
- done
- echo "Done."
-
- if [ $_fast = 0 ]; then
- exit
- fi
- echo "Checking filesystem integrity..."
- for _dev in ${_devs}; do
- echo "${_dev}"
- fsck -f ${_dev}
- done
- echo "Done."
- )
-}
-
-check_fs()
-{
- # Check filesystem integrity.
- # $1 is a file in fstab format
- local _fstab
-
- _fstab=$1
-
- cat $_fstab | grep -v ${SIMPLEROOTDISK} | (
- _devs=""
- _mps=""
- while read line; do
- set -- $line
- _devs="$1 ${_devs}"
- _mps="$2 ${_mps}"
- done
-
- echo "Checking filesystem integrity..."
- for _dev in ${_devs}; do
- echo "${_dev}"
- fsck -f ${_dev}
- done
- echo "Done."
- )
-}