diff options
author | Theo de Raadt <deraadt@cvs.openbsd.org> | 2002-04-21 17:12:54 +0000 |
---|---|---|
committer | Theo de Raadt <deraadt@cvs.openbsd.org> | 2002-04-21 17:12:54 +0000 |
commit | 286c6c25aac0e1e129d58c60e02d8a7cc6d27e63 (patch) | |
tree | 112b326a3112feb499830e6d175af6b1f117ee3f /distrib | |
parent | 1e599e1c0b32bb6e9f29eb08cb34ee4cdc8c29fc (diff) |
simpleroot no longer used
Diffstat (limited to 'distrib')
-rw-r--r-- | distrib/alpha/simpleroot/Makefile.inc | 7 | ||||
-rw-r--r-- | distrib/alpha/simpleroot/list | 30 | ||||
-rw-r--r-- | distrib/simpleroot/Makefile | 82 | ||||
-rw-r--r-- | distrib/simpleroot/install.sh | 533 | ||||
-rw-r--r-- | distrib/simpleroot/install.sub | 1459 |
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." - ) -} |