diff options
21 files changed, 2667 insertions, 2856 deletions
diff --git a/distrib/powerpc/inst-common/Makefile.inc b/distrib/powerpc/inst-common/Makefile.inc deleted file mode 100644 index eeded287978..00000000000 --- a/distrib/powerpc/inst-common/Makefile.inc +++ /dev/null @@ -1,31 +0,0 @@ -# -# $NetBSD: Makefile.inc,v 1.1 1995/07/18 04:13:14 briggs Exp $ -# - -# TOP is assumed to be defined by Makefile including this one. - -CBIN?= raminst -COMMONDIR= ${TOP}/inst-common - -MOUNT_POINT?= ${TOP}/${BASE}/fs - -LISTS= ${COMMONDIR}/list ${.CURDIR}/list -CRUNCHCONF?= ${COMMONDIR}/${CBIN}.conf -MTREE= ${COMMONDIR}/mtree.conf - -${CBIN}.mk ${CBIN}.cache ${CBIN}.c: ${CRUNCHCONF} - crunchgen -E -D ${BSDSRCDIR} -L ${DESTDIR}/usr/lib ${CRUNCHCONF} - -${CBIN}: ${CBIN}.mk ${CBIN}.cache ${CBIN}.c - make -f ${CBIN}.mk all - -do_files: - mtree -def ${MTREE} -p ${MOUNT_POINT}/ -u - TOPDIR=${TOP} CURDIR=${.CURDIR} OBJDIR=${.OBJDIR} \ - TARGDIR=${MOUNT_POINT} sh ${TOP}/runlist.sh ${LISTS} - -clean cleandir: - /bin/rm -f core ${IMAGE} ${CBIN} ${CBIN}.mk ${CBIN}.cache *.o *.lo *.c - -.include <bsd.obj.mk> -.include <bsd.subdir.mk> diff --git a/distrib/powerpc/inst-common/dot.commonutils b/distrib/powerpc/inst-common/dot.commonutils deleted file mode 100644 index 64f840321c8..00000000000 --- a/distrib/powerpc/inst-common/dot.commonutils +++ /dev/null @@ -1,129 +0,0 @@ -# -# $NetBSD: dot.commonutils,v 1.1 1995/07/18 04:13:18 briggs Exp $ -# -# Copyright (c) 1994 Christopher G. Demetriou -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# 3. All advertising materials mentioning features or use of this software -# must display the following acknowledgement: -# This product includes software developed by Christopher G. Demetriou. -# 4. The name of the author may not be used to endorse or promote products -# derived from this software without specific prior written permission -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# - -# Installation utilites (functions), to get NetBSD installed on -# the hard disk. These are meant to be invoked from the shell prompt, -# by people installing NetBSD. - -Set_tmp_dir() -{ - def_tmp_dir=`pwd` - if [ "$def_tmp_dir" = "/" -o "$def_tmp_dir" = "/mnt" ]; then - def_tmp_dir=/mnt/usr/distrib - fi - - echo -n "What directory should be used to find and/or store " - echo "installtion" - echo -n "files? [$def_tmp_dir] " - read tmp_dir - if [ "$tmp_dir" = "" ]; then - tmp_dir=$def_tmp_dir - fi - if [ ! -d "$tmp_dir" ]; then - /bin/rm -rf $tmp_dir - mkdir -p $tmp_dir - fi -} - -Tmp_dir() -{ - if [ "$tmp_dir" = "" ]; then - Set_tmp_dir - fi - cd $tmp_dir -} - -Load_fd() -{ - Tmp_dir - which= - while [ "$which" != "a" -a "$which" != "b" ]; do - echo -n "Read from which floppy drive ('a' or 'b')? [a] " - read which - if [ "X$which" = "X" ]; then - which=a - fi - done - while echo -n "Insert floppy (hit ^C to terminate, enter to load): " - do - mount -t msdos /dev/fd0$which /mnt2 - cp -rp /mnt2/* . - umount /mnt2 - done -} - -Load_tape() -{ - Tmp_dir - echo -n "Which tape drive will you be using? [rst0] " - read which - if [ "X$which" = "X" ]; then - which=rst0 - fi - echo -n "Insert the tape into the tape drive and hit return to " - echo -n "continue..." - read foo - echo "Extracting files from the tape..." - tar xvfp /dev/$which - echo "Done." -} - -Extract() -{ - Tmp_dir - echo -n "Would you like to list the files as they're extracted? [n] " - read verbose - case $verbose in - y*|Y*) - tarverbose=v - ;; - *) - tarverbose= - ;; - esac - echo -n "Are you installing a '-current' snapshot? [n] " - read snapshot - case $snapshot in - y*|Y*) - snapshot=y - ;; - *) - snapshot=n - ;; - esac - if [ $snapshot = n ] - then - cat "$1".??? | gunzip | (cd / ; tar xfp$tarverbose -) - else - cat "$1".tar.gz | gunzip | (cd /mnt ; tar xfp$tarverbose -) - fi -} diff --git a/distrib/powerpc/inst-common/list b/distrib/powerpc/inst-common/list deleted file mode 100644 index 1ed6faf3d4e..00000000000 --- a/distrib/powerpc/inst-common/list +++ /dev/null @@ -1,81 +0,0 @@ -# -# $NetBSD: list,v 1.2 1995/08/13 13:21:07 briggs Exp $ -# - -# copy the crunched binary, link to it, and kill it -COPY ${OBJDIR}/raminst raminst -LINK raminst bin/cat -LINK raminst bin/chmod -LINK raminst bin/cp -LINK raminst bin/df -LINK raminst bin/dd -LINK raminst bin/ed -LINK raminst bin/expr -LINK raminst bin/ln -LINK raminst bin/ls -LINK raminst bin/kill -LINK raminst bin/hostname -LINK raminst bin/mkdir -LINK raminst bin/mv -LINK raminst bin/pwd -LINK raminst bin/rm -#COPY ${OBJDIR}/sh bin/sh -LINK raminst bin/sh -LINK bin/sh bin/-sh -LINK raminst bin/stty -LINK raminst bin/sleep -LINK raminst bin/sync -LINK raminst bin/test -LINK raminst bin/[ -LINK raminst sbin/disklabel -LINK raminst sbin/fdisk -LINK raminst sbin/fsck -LINK raminst sbin/halt -LINK raminst sbin/ifconfig -LINK raminst sbin/init -LINK raminst sbin/mknod -LINK raminst sbin/mount -LINK raminst sbin/mount_cd9660 -LINK raminst sbin/mount_ffs -LINK raminst sbin/mount_msdos -LINK raminst sbin/mount_kernfs -LINK raminst sbin/mount_nfs -LINK raminst sbin/mount_mfs -LINK raminst sbin/newfs -LINK raminst sbin/reboot -LINK raminst sbin/route -LINK raminst sbin/slattach -LINK raminst sbin/umount -LINK raminst usr/bin/chgrp -LINK raminst usr/bin/cut -LINK raminst usr/bin/ftp -LINK raminst usr/bin/egrep -LINK raminst usr/bin/grep -LINK raminst usr/bin/gzip -LINK raminst usr/bin/more -LINK raminst usr/bin/sed -LINK raminst usr/bin/sort -LINK raminst usr/bin/pax -LINK raminst usr/bin/tip -LINK raminst usr/sbin/chown -SPECIAL /bin/rm raminst - -# copy the MAKEDEV script and make some devices -COPY ${DESTDIR}/dev/MAKEDEV dev/MAKEDEV -SPECIAL cd dev; sh MAKEDEV raminst - -# we need the contents of /usr/mdec (XXX) -# COPY ${DESTDIR}/usr/mdec/* usr/mdec - -# various files that we need in /etc for the install -COPY ${DESTDIR}/etc/group etc -COPY ${DESTDIR}/etc/master.passwd etc -COPY ${DESTDIR}/etc/passwd etc -COPY ${DESTDIR}/etc/protocols etc -COPY ${DESTDIR}/etc/pwd.db etc -COPY ${DESTDIR}/etc/services etc -COPY ${DESTDIR}/etc/spwd.db etc - -# and the common installation tools -COPY ${TOPDIR}/inst-common/dot.commonutils .commonutils -COPY ${TOPDIR}/inst-common/termcap.vt usr/share/misc/termcap diff --git a/distrib/powerpc/inst-common/mtree.conf b/distrib/powerpc/inst-common/mtree.conf deleted file mode 100644 index 6add6806ec5..00000000000 --- a/distrib/powerpc/inst-common/mtree.conf +++ /dev/null @@ -1,79 +0,0 @@ -# -# $NetBSD: mtree.conf,v 1.1 1995/07/18 04:13:24 briggs Exp $ -# - -/set type=dir uname=root gname=wheel mode=0755 -# . -. - -# ./bin -bin -# ./bin -.. - -# ./dev -dev -# ./dev -.. - -# ./etc -etc -# ./etc -.. - -# ./mnt -mnt -# ./mnt -.. - -# ./mnt2 -mnt2 -# ./mnt2 -.. - -# ./sbin -sbin -# ./sbin -.. - -# ./tmp -tmp -# ./tmp -.. - -# ./kern -kern -# ./kern -.. - -# ./usr -usr - -# ./usr/bin -bin -# ./usr/bin -.. - -# ./usr/mdec -mdec -# ./usr/mdec -.. - -# ./usr/sbin -sbin -# ./usr/sbin -.. - -# ./usr/share -share - -# ./usr/share/misc -misc -# ./usr/share/misc -.. - -# ./usr/share -.. - -# ./usr -.. diff --git a/distrib/powerpc/inst-common/raminst.conf b/distrib/powerpc/inst-common/raminst.conf deleted file mode 100644 index fdee4d29e71..00000000000 --- a/distrib/powerpc/inst-common/raminst.conf +++ /dev/null @@ -1,23 +0,0 @@ -# -# $NetBSD: raminst.conf,v 1.3 1995/09/30 20:00:47 briggs Exp $ -# -# ram.conf - unified binary for the RAM disk -# - -srcdirs bin sbin usr.bin usr.sbin -srcdirs gnu/usr.bin - -progs cat chmod chown chroot cp dd df disklabel ed expr fdisk fsck_ffs ftp -progs gzip ifconfig init ln ls mkdir mknod more mount mount_cd9660 -progs mount_ffs mount_msdos mount_nfs mv newfs printf pwd reboot rm route -progs sed sh shutdown slattach strings stty sync pax test tip umount # update - -ln chown chgrp -ln fsck_ffs fsck -ln gzip gzcat gunzip -ln sh -sh # init invokes the shell this way -ln test [ -ln mount_ffs ffs -ln newfs mount_mfs - -libs -ledit -lutil -ltermcap -lcompat -ll -lm -lz diff --git a/distrib/powerpc/inst-common/termcap.vt b/distrib/powerpc/inst-common/termcap.vt deleted file mode 100644 index d0c58f1022b..00000000000 --- a/distrib/powerpc/inst-common/termcap.vt +++ /dev/null @@ -1,67 +0,0 @@ -# -# $NetBSD: termcap.vt,v 1.1 1995/07/18 04:13:31 briggs Exp $ -# -# Copyright (c) 1980, 1985, 1989 The Regents of the University of California. -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# 3. All advertising materials mentioning features or use of this software -# must display the following acknowledgement: -# This product includes software developed by the University of -# California, Berkeley and its contributors. -# 4. Neither the name of the University 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 REGENTS 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. -# -# @(#)termcap.src 5.109 (Berkeley) 3/8/93 -# -vt200|vt220|dec-vt220|vt200-js|vt220-js|dec vt200 series with jump scroll:\ - :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:LE=\E[%dD:\ - :RI=\E[%dC:UP=\E[%dA:ae=^O:al=\E[L:as=^N:ct=\E[3g:dc=\E[P:dl=\E[M:\ - :ei=\E[4l:im=\E[4h:k1=\E[17~:k2=\E[18~:k3=\E[19~:k4=\E[20~:\ - :k5=\E[21~:k6=\E[23~:k7=\E[24~:k8=\E[25~:kD=\E[3~:kH=\E[4~:\ - :kI=\E[2~:kN=\E[6~:kP=\E[5~:kb=\177:kh=\E[1~:km:mi:ms:\ - :if=/usr/share/tabset/vt100:se=\E[27m:st=\EH:ue=\E[24m:\ - :tc=vt100: -vt100|dec-vt100|vt100-am|vt100am|dec vt100:\ - :bl=^G:cr=^M:it#8:\ - :do=^J:co#80:li#24:cl=50\E[;H\E[2J:sf=2*\ED:\ - :le=^H:bs:am:cm=5\E[%i%d;%dH:nd=2\E[C:up=2\E[A:cb=3\E[1K:\ - :ce=3\E[K:cd=50\E[J:so=2\E[7m:se=2\E[m:us=2\E[4m:ue=2\E[m:\ - :md=2\E[1m:mr=2\E[7m:mb=2\E[5m:me=2\E[m:is=\E[1;24r\E[24;1H:\ - :if=/usr/share/tabset/vt100:\ - :rs=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:ks=\E[?1h\E=:ke=\E[?1l\E>:\ - :ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:kb=^H:\ - :ho=\E[H:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:pt:sr=2*\EM:vt#3:xn:\ - :sc=\E7:rc=\E8:cs=\E[%i%d;%dr: -vt300|vt320|vt300-80|VT 300 with 80 columns, on VMS:\ - :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\ - :LE=\E[%dD:RI=\E[%dC:SR=1*\E[%dM:UP=\E[%dA:al=\E[L:\ - :am:bl=^G:bs:cd=2*\E[J:ce=2*\E[K:cl=45\E[H\E[2J:\ - :cm=%i\E[%d;%dH:co#80:cr=\r:cs=\E[%i%d;%dr:ct=\E[3g:\ - :dc=\E[P:dl=\E[M:dm=:do=\ED:ec=\E[%dX:ed=:ei=\E[4l:\ - :ho=\E[H:ic:im=\E[4h:it#8:k1=\EOP:k2=\EOQ:k3=\EOR:\ - :k4=\EOS:kd=\E[B:ke=\E[?1l\E>:kl=\E[D:kn#4:kr=\E[C:ks=\E[?1h\E=:\ - :ku=\E[A:le=^H:li#24:mb=\E[5m:md=\E[1m:me=\E[0m:mi:\ - :mr=\E[7m:ms:nd=\E[C:nl=\ED:nw=\EE:pf=\E[?4i:po=\E[?5i:\ - :ps=\E[i:rc=\E8:sc=\E7:se=\E[27m:sf=1*\ED:so=\E[7m:\ - :sr=1*\EM:st=\EH:ue=\E[24m:up=\EM:us=\E[4m:xn: diff --git a/distrib/powerpc/miniroot/Makefile b/distrib/powerpc/miniroot/Makefile deleted file mode 100644 index 8258390a71c..00000000000 --- a/distrib/powerpc/miniroot/Makefile +++ /dev/null @@ -1,68 +0,0 @@ -# $NetBSD: Makefile,v 1.1 1995/07/18 04:13:06 briggs Exp $ - -TOP= ${.CURDIR}/.. - -.include "${TOP}/Makefile.inc" -IMAGE= miniroot-${REV}.fs -CRUNCHCONF?= ${TOP}/miniroot/${CBIN}.conf -BASE=miniroot -KERNEL= ${SRCSYSDIR}/arch/powerpc/compile/MINI/bsd - -MOUNT_POINT= /mnt1 -BDEV= /dev/rd0a -CDEV= /dev/rrd0a -RDEV= /dev/rd0c - -.include "${TOP}/inst-common/Makefile.inc" - -all: ${CBIN} ${IMAGE} - @echo "all done" - -DISKTYPE= rdroot -NBLKS= 4096 -# old format, minfree, opt, b/i trks, sects, cpg -NEWFSARGS= -t ffs -m 0 -o space -c 16 - -${IMAGE}: do_prep do_mount do_files do_umount_copy do_unconfig - mv -f ${IMAGE}.tmp ${IMAGE} - if [ -e rd.pid ] ; then \ - kill `< rd.pid`; \ - rm rd.pid;\ - fi - -elfrdsetroot: ${TOP}//elfrdsetroot.c - ${HOSTCC} -o elfrdsetroot ${TOP}/elfrdsetroot.c - -setroot: ${IMAGE} bsd elfrdsetroot - ${.OBJDIR}/elfrdsetroot bsd < ${IMAGE} - -bsd: ${KERNEL} - cp ${KERNEL} bsd - -do_prep: ${CBIN} do_unconfig - sh ${.CURDIR}/start_rdconfig.sh ${RDEV} ${NBLKS} -# dd if=/usr/mdec/sdboot of=${CDEV} - disklabel -w ${CDEV} ${DISKTYPE} - -do_mount: - -newfs ${NEWFSARGS} -s ${NBLKS} ${CDEV} - mount ${BDEV} ${MOUNT_POINT} - -do_umount_copy: - @echo "" - @df -i ${MOUNT_POINT} - @echo "" - -umount ${MOUNT_POINT} - dd if=${CDEV} of=${IMAGE}.tmp bs=4b count=`expr ${NBLKS} / 4 ` - -do_unconfig: - -umount ${MOUNT_POINT} - if [ -e rd.pid ] ; then \ - kill `< rd.pid`; \ - rm rd.pid;\ - fi - - -.PRECIOUS: ${IMAGE} - - diff --git a/distrib/powerpc/miniroot/disktab.preinstall b/distrib/powerpc/miniroot/disktab.preinstall deleted file mode 100644 index 81a0bb0a052..00000000000 --- a/distrib/powerpc/miniroot/disktab.preinstall +++ /dev/null @@ -1,32 +0,0 @@ -# -# $NetBSD: disktab.preinstall,v 1.1 1995/07/18 04:13:07 briggs Exp $ -# -# Disk geometry and partition layout tables. -# Key: -# dt controller type -# ty type of disk (fixed, removeable, simulated) -# d[0-4] drive-type-dependent parameters -# ns #sectors/track -# nt #tracks/cylinder -# nc #cylinders/disk -# sc #sectors/cylinder, nc*nt default -# su #sectors/unit, sc*nc default -# se sector size, DEV_BSIZE default -# rm rpm, 3600 default -# sf supports bad144-style bad sector forwarding -# sk sector skew per track, default 0 -# cs sector skew per cylinder, default 0 -# hs headswitch time, default 0 -# ts one-cylinder seek time, default 0 -# il sector interleave (n:1), 1 default -# bs boot block size, default BBSIZE -# sb superblock size, default SBSIZE -# o[a-h] partition offsets in sectors -# p[a-h] partition sizes in sectors -# b[a-h] partition block sizes in bytes -# f[a-h] partition fragment sizes in bytes -# t[a-h] partition types (filesystem, swap, etc) -# -# All partition sizes reserve space for bad sector tables. -# (5 cylinders needed for maintenance + replacement sectors) -# diff --git a/distrib/powerpc/miniroot/disktab.shadow b/distrib/powerpc/miniroot/disktab.shadow deleted file mode 100644 index 5b01c7be7d9..00000000000 --- a/distrib/powerpc/miniroot/disktab.shadow +++ /dev/null @@ -1,32 +0,0 @@ -# -# $NetBSD: disktab.shadow,v 1.1.1.1 1996/05/19 19:43:39 leo Exp $ -# -# Disk geometry and partition layout tables. -# Key: -# dt controller type -# ty type of disk (fixed, removeable, simulated) -# d[0-4] drive-type-dependent parameters -# ns #sectors/track -# nt #tracks/cylinder -# nc #cylinders/disk -# sc #sectors/cylinder, nc*nt default -# su #sectors/unit, sc*nc default -# se sector size, DEV_BSIZE default -# rm rpm, 3600 default -# sf supports bad144-style bad sector forwarding -# sk sector skew per track, default 0 -# cs sector skew per cylinder, default 0 -# hs headswitch time, default 0 -# ts one-cylinder seek time, default 0 -# il sector interleave (n:1), 1 default -# bs boot block size, default BBSIZE -# sb superblock size, default SBSIZE -# o[a-h] partition offsets in sectors -# p[a-h] partition sizes in sectors -# b[a-h] partition block sizes in bytes -# f[a-h] partition fragment sizes in bytes -# t[a-h] partition types (filesystem, swap, etc) -# -# All partition sizes reserve space for bad sector tables. -# (5 cylinders needed for maintenance + replacement sectors) -# diff --git a/distrib/powerpc/miniroot/dot.instutils b/distrib/powerpc/miniroot/dot.instutils deleted file mode 100644 index 94a55659fe5..00000000000 --- a/distrib/powerpc/miniroot/dot.instutils +++ /dev/null @@ -1,156 +0,0 @@ -# -# $NetBSD: dot.instutils,v 1.1 1995/07/18 04:13:08 briggs Exp $ -# -# Copyright (c) 1994 Christopher G. Demetriou -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# 3. All advertising materials mentioning features or use of this software -# must display the following acknowledgement: -# This product includes software developed by Christopher G. Demetriou. -# 4. The name of the author may not be used to endorse or promote products -# derived from this software without specific prior written permission -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# - -# Installation configuration utilites (functions), to get NetBSD configured -# reasonably once it is installed on the hard disk. These are meant to be -# invoked from the shell prompt, by people installing NetBSD. - -Configure() -{ - DEV=/mnt/dev - ETC=/mnt/etc - - echo "You will now be prompted for information about this" - echo "machine. If you hit return, the default answer (in" - echo "brackets) will be used." - - echo "" - echo -n "What is this machine's hostname? [unknown.host.domain] " - read hname - if [ "$hname" = "" ]; then - hname=unknown.host.domain - fi - echo $hname > ${ETC}/myname - proto_domain=`echo $hname | sed -e 's/[^.]*\.//'` - - echo "" - echo "What domain is this machine in (this is NOT its YP" - echo -n "domain name)? [$proto_domain] " - read dname - if [ "$dname" = "" ]; then - dname=$proto_domain - fi - - echo "" - if [ -e ${ETC}/sendmail.cf ]; then - echo "WARNING: A default sendmail.cf exists, and probably" - echo "needs to be tuned and/or replaced, to work properly at" - echo "your site!" - else - echo "WARNING: No default sendmail.cf installed. Did you" - echo "forget to install the 'etc' distribution?" - fi - - echo "127.0.0.1 localhost localhost.$dname" > ${ETC}/hosts - - echo "" - echo -n "Does this machine have an ethernet interface? [y] " - read resp - case "$resp" in - n*) - ;; - *) - intf= - while [ "$intf" = "" ]; do - echo -n "What is the primary interface name " - echo -n "(e.g. ae0, etc)? " - read intf - done - echo -n "What is the hostname for this interface? [$hname] " - read ifname - if [ "$ifname" = "" ]; then - ifname=$hname - fi - ifaddr= - while [ "$ifaddr" = "" ]; do - echo -n "What is the IP address associated with " - echo -n "interface ${intf}? " - read ifaddr - done - echo "$ifaddr $ifname `echo $ifname | sed -e s/\.$dname//`" \ - >> ${ETC}/hosts - - echo -n "Does this interface have a special netmask? [n] " - read resp - case "$resp" in - y*) - echo -n "What is the netmask? [0xffffff00] " - read ifnetmask - if [ "$ifnetmask" = "" ]; then - ifnetmask=0xffffff00 - fi - ;; - *) - ifnetmask= - ;; - esac - - echo -n "Does this interface need additional flags? [n] " - read resp - case "$resp" in - y*) - echo -n "What flags? [link0] " - read ifflags - if [ "$ifflags" = "" ]; then - ifflags=link0 - fi - ;; - *) - ifflags= - ;; - esac - echo "inet $ifname $ifnetmask $ifflags" > ${ETC}/hostname.$intf - - echo "" - echo -n "WARNING: if you have any more ethernet interfaces, " - echo "you will have to configure" - echo -n "them by hand. Read the comments in /etc/netstart to" - echo "learn how to do this." - ;; - esac - - echo "" - echo -n "Making device nodes..." - cd ${DEV} - sh MAKEDEV all - echo " done." - - sync - - echo "You may now reboot your machine with the shutdown command." - echo " shutdown -r now" - echo "to reboot or" - echo " shutdown -h now" - echo "to halt." - echo "Remember to erase the miniroot name from the booter's" - echo "booting preferences dialog box before booting again." -} diff --git a/distrib/powerpc/miniroot/dot.profile b/distrib/powerpc/miniroot/dot.profile deleted file mode 100644 index 1076ba966bf..00000000000 --- a/distrib/powerpc/miniroot/dot.profile +++ /dev/null @@ -1,51 +0,0 @@ -# -# $NetBSD: dot.profile,v 1.1 1995/07/18 04:13:09 briggs Exp $ -# -# Copyright (c) 1994 Christopher G. Demetriou -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# 3. All advertising materials mentioning features or use of this software -# must display the following acknowledgement: -# This product includes software developed by Christopher G. Demetriou. -# 4. The name of the author may not be used to endorse or promote products -# derived from this software without specific prior written permission -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# - -export PATH=/sbin:/bin:/usr/bin:/usr/sbin:/ -export HISTFILE=/.sh_history -export TERM=vt200 - -umask 022 - -set -o emacs # emacs-style command line editing - -# set up some sane defaults -echo 'erase ^?, werase ^H, kill ^U, intr ^C' -stty newcrt werase ^H intr ^C kill ^U erase ^? 9600 -echo '' - -# pull in the function definitions that people will use from the shell prompt. -. /.commonutils -. /.instutils - -# run the installation script. -install diff --git a/distrib/powerpc/miniroot/install.md b/distrib/powerpc/miniroot/install.md deleted file mode 100644 index 346865d4c1f..00000000000 --- a/distrib/powerpc/miniroot/install.md +++ /dev/null @@ -1,304 +0,0 @@ -# $OpenBSD: install.md,v 1.5 1997/09/30 17:52:47 deraadt 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. -# - -# -# machine dependent section of installation/upgrade script. -# -# - -TMPWRITEABLE=/tmp/writeable -KERNFSMOUNTED=/tmp/kernfsmounted - -md_copy_kernel() { - echo "This must be done later by hand" -} - -md_set_term() { - if [ ! -z "$TERM" ]; then - return - fi - echo -n "Specify terminal type [xterm]: " - getresp "xterm" - TERM="$resp" - export TERM -} - -md_machine_arch() { - cat /kern/machine -} - -md_get_diskdevs() { - egrep "^ofdisk[0-9] " < /kern/msgbuf | sed -e "s/ofdisk/sd/" -} - -md_get_cddevs() { - egrep "^ofdisk[0-9] " < /kern/msgbuf | sed -e "s/ofdisk/sd/" -} - -md_get_ifdevs() { - # return available network devices - egrep "(^ofnet[0-9] )"< /kern/msgbuf | cut -d" " -f1 | sort -u -} - -md_get_partition_range() { - # return range of valid partition letters - echo "[a-p]" -} - -md_installboot() { - echo "This must be done later by hand" -} -md_labeldisk() { - echo "huh" -} - -md_checkforfdisklabel() { - # $1 is the disk to check - local rval - - fdisk $1 >>/dev/null 2>/tmp/checkfordisklabel - if grep "invalid fdisk" /tmp/checkfordisklabel; then - rval=1 - else - rval=0 - fi - rm -f /tmp/checkfordisklabel - return $rval -} - -md_checkfordisklabel() { - # $1 is the disk to check - local rval - - disklabel $1 >> /dev/null 2> /tmp/checkfordisklabel - if grep "no disk label" /tmp/checkfordisklabel; then - rval=1 - elif grep "disk label corrupted" /tmp/checkfordisklabel; then - rval=2 - else - rval=0 - fi - - rm -f /tmp/checkfordisklabel - return $rval -} - -md_prep_disklabel() -{ - local _disk - - _disk=$1 - md_checkforfdisklabel $_disk - md_checkfordisklabel $_disk - case $? in - 0) - echo -n "Do you wish to edit the fdisk label on $_disk? [y] " - ;; - 1) - echo "WARNING: Disk $_disk has no fdisk label" - echo -n "Do you want to create one with the fdisk editor? [y] " - ;; - esac - - getresp "y" - case "$resp" in - y*|Y*) - fdisk -u $_disk - ;; - *) ;; - esac - - case $? in - 0) - echo -n "Do you wish to edit the disklabel on $_disk? [y] " - ;; - 1) - echo "WARNING: Disk $_disk has no label" - echo -n "Do you want to create one with the disklabel editor? [y] " - ;; - 2) - echo "WARNING: Label on disk $_disk is corrupted" - echo -n "Do you want to try and repair the damage using the disklabel editor? [y] " - ;; - esac - - getresp "y" - case "$resp" in - y*|Y*) ;; - *) return ;; - esac - - # display example - cat << \__md_prep_disklabel_1 - -Here is an example of what the partition information will look like once -you have entered the disklabel editor. Disk partition sizes and offsets -are in sector (most likely 512 bytes) units. Make sure these size/offset -pairs are on cylinder boundaries (the number of sector per cylinder is -given in the `sectors/cylinder' entry, which is not shown here). - -Do not change any parameters except the partition layout and the label name. -It's probably also wisest not to touch the `8 partitions:' line, even -in case you have defined less than eight partitions. - -[Example] -8 partitions: -# size offset fstype [fsize bsize cpg] - a: 50176 0 4.2BSD 1024 8192 16 # (Cyl. 0 - 111) - b: 64512 50176 swap # (Cyl. 112 - 255) - c: 640192 0 unknown # (Cyl. 0 - 1428) - d: 525504 114688 4.2BSD 1024 8192 16 # (Cyl. 256 - 1428) -[End of example] - -__md_prep_disklabel_1 - echo -n "Press [Enter] to continue " - getresp "" - disklabel -W ${_disk} - disklabel -E ${_disk} -} - -md_welcome_banner() { -{ - if [ "$MODE" = "install" ]; then - echo "" - echo "Welcome to the OpenBSD/powerpc ${VERSION} installation program." - cat << \__welcome_banner_1 - -This program is designed to help you put OpenBSD on your disk, -in a simple and rational way. You'll be asked several questions, -and it would probably be useful to have your disk's hardware -manual, the installation notes, and a calculator handy. -__welcome_banner_1 - - else - echo "" - echo "Welcome to the OpenBSD/powerpc ${VERSION} upgrade program." - cat << \__welcome_banner_2 - -This program is designed to help you upgrade your OpenBSD system in a -simple and rational way. - -As a reminder, installing the `etc' binary set is NOT recommended. -Once the rest of your system has been upgraded, you should manually -merge any changes to files in the `etc' set into those files which -already exist on your system. -__welcome_banner_2 - fi - -cat << \__welcome_banner_3 - -As with anything which modifies your disk's contents, this -program can cause SIGNIFICANT data loss, and you are advised -to make sure your data is backed up before beginning the -installation process. - -Default answers are displayed in brackets after the questions. -You can hit Control-C at any time to quit, but if you do so at a -prompt, you may have to hit return. Also, quitting in the middle of -installation may leave your system in an inconsistent state. - -__welcome_banner_3 -} | more -} - -md_not_going_to_install() { - cat << \__not_going_to_install_1 - -OK, then. Enter `halt' at the prompt to halt the machine. Once the -machine has halted, power-cycle the system to load new boot code. - -__not_going_to_install_1 -} - -md_congrats() { - local what; - if [ "$MODE" = "install" ]; then - what="installed"; - else - what="upgraded"; - fi - cat << __congratulations_1 - -CONGRATULATIONS! You have successfully $what OpenBSD! -To boot the installed system, enter halt at the command prompt. Once the -system has halted, reset the machine and boot from the disk. - -__congratulations_1 -} - -md_native_fstype() { -} -md_native_fsopts() { -} - -md_makerootwritable() { - # 2048 is the size in DEV_BIZE blocks - - if [ -e ${TMPWRITEABLE} ] - then - md_mountkernfs - return - fi - umount /tmp >> /dev/null 2>&1 - if ! mount -t ffs -u /dev/rd0a / ; then - cat << \__rd0_failed_1 - -FATAL ERROR: Can't mount the ram filesystem. - -__rd0_failed_1 - exit - fi - - # Bleh. Give mount_mfs a chance to DTRT. - sleep 2 - > ${TMPWRITEABLE} - - md_mountkernfs -} -md_mountkernfs() { - if [ -e ${KERNFSMOUNTED} ] - then - return - fi - if ! mount -t kernfs /kern /kern - then - cat << \__kernfs_failed_1 -FATAL ERROR: Can't mount kernfs filesystem -__kernfs_failed_1 - exit - fi - > ${KERNFSMOUNTED} -} diff --git a/distrib/powerpc/miniroot/install.sh b/distrib/powerpc/miniroot/install.sh deleted file mode 100644 index 806e137bb26..00000000000 --- a/distrib/powerpc/miniroot/install.sh +++ /dev/null @@ -1,413 +0,0 @@ -#!/bin/sh -# $OpenBSD: install.sh,v 1.2 1997/02/21 17:42:09 rahnds 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. -# - -# NetBSD installation script. -# In a perfect world, this would be a nice C program, with a reasonable -# user interface. - -FILESYSTEMS="/tmp/filesystems" # used thoughout -FQDN="" # domain name - -trap "umount /tmp >> /dev/null 2>&1" 0 - -MODE="install" - -# include machine-dependent functions -# The following functions must be provided: -# md_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 -# md_makerootwritable() - make root writable (at least /tmp) - -# include machine dependent subroutines -. install.md - -# include common subroutines -. install.sub - -# which sets? -THESETS="$ALLSETS" - -# Good {morning,afternoon,evening,night}. -md_welcome_banner -echo -n "Proceed with installation? [n] " -getresp "n" -case "$resp" in - y*|Y*) - echo "Cool! Let's get to it..." - ;; - *) - md_not_going_to_install - exit - ;; -esac - -# XXX Work around vnode aliasing bug (thanks for the tip, Chris...) -ls -l /dev >> /dev/null 2>&1 - -# Deal with terminal issues -md_set_term - -# Get timezone info -get_timezone - -# Make sure we can write files (at least in /tmp) -# This might make an MFS mount on /tmp, or it may -# just re-mount the root with read-write enabled. -md_makerootwritable - -# Install the shadowed disktab file; lets us write to it for temporary -# purposes without mounting the miniroot read-write. -cp /etc/disktab.shadow /tmp/disktab.shadow - -while [ "X${ROOTDISK}" = "X" ]; do - getrootdisk -done - -# 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 - if [ "X${_mount_point}" = X"/" ]; then - # Invalid response; no multiple roots - _first_char="X" - else - _first_char=`firstchar ${_mount_point}` - fi - done - echo "${_device_name} ${_mount_point}" >> ${FILESYSTEMS} - resp="X" # force loop to repeat - ;; - esac -done - -echo "" -echo "You have configured the following devices and mount points:" -echo "" -cat ${FILESYSTEMS} -echo "" -echo "Filesystems will now be created on these devices. If you made any" -echo -n "mistakes, you may edit this now. Edit? [n] " -getresp "n" -case "$resp" in - y*|Y*) - ${EDITOR} ${FILESYSTEMS} - ;; - *) - ;; -esac - -# Loop though the file, place filesystems on each device. -echo "Creating filesystems..." -( - while read _device_name _junk; do - newfs /dev/r${_device_name} - echo "" - done -) < ${FILESYSTEMS} - -# Get network configuration information, and store it for placement in the -# root filesystem later. -cat << \__network_config_1 -You will now be given the opportunity to configure the network. This will -be useful if you need to transfer the installation sets via FTP or NFS. -Even if you choose not to transfer installation sets that way, this -information will be preserved and copied into the new root filesystem. - -Note, enter all symbolic host names WITHOUT the domain name appended. -I.e. use 'hostname' NOT 'hostname.domain.name'. - -__network_config_1 -echo -n "Configure the network? [y] " -getresp "y" -case "$resp" in - y*|Y*) - resp="" # force at least one iteration - if [ -f /etc/myname ]; then - resp=`cat /etc/myname` - fi - echo -n "Enter system hostname: [$resp] " - while [ "X${resp}" = X"" ]; do - getresp "$resp" - done - hostname $resp - echo $resp > /tmp/myname - - echo -n "Enter DNS domain name: " - resp="" # force at least one iteration - while [ "X${resp}" = X"" ]; do - getresp "" - done - FQDN=$resp - - configurenetwork - - echo -n "Enter IP address of default route: [none] " - getresp "none" - if [ "X${resp}" != X"none" ]; then - route delete default >> /dev/null 2>&1 - if route add default $resp >> /dev/null ; then - echo $resp > /tmp/mygate - fi - fi - - echo -n "Enter IP address of primary nameserver: [none] " - getresp "none" - if [ "X${resp}" != X"none" ]; then - echo "domain $FQDN" > /tmp/resolv.conf - echo "nameserver $resp" >> /tmp/resolv.conf - echo "search $FQDN" >> /tmp/resolv.conf - - echo -n "Would you like to use the nameserver now? [y] " - getresp "y" - case "$resp" in - y*|Y*) - cp /tmp/resolv.conf \ - /tmp/resolv.conf.shadow - ;; - - *) - ;; - esac - fi - - echo "" - echo "The host table is as follows:" - echo "" - cat /tmp/hosts - echo "" - echo "You may want to edit the host table in the event that" - echo "you need to mount an NFS server." - echo -n "Would you like to edit the host table? [n] " - getresp "n" - case "$resp" in - y*|Y*) - ${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 - -# 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 - -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 $ALLSETS $MDSETS - -# Copy in configuration information and make devices in target root. -( - cd /tmp - for file in fstab hostname.* hosts myname mygate resolv.conf; do - if [ -f $file ]; then - echo -n "Copying $file..." - cp $file /mnt/etc/$file - echo "done." - fi - done - - # If no zoneinfo on the installfs, give them a second chance - if [ ! -e /usr/share/zoneinfo ]; then - get_timezone - 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 - - echo "if dev.tar.gz was not extracted it will be necessary" - echo "to go to /mnt/dev and run \"sh MAKEDEV all\"" -# if [ ! -x /mnt/dev/MAKEDEV ]; then -# echo "No /dev/MAKEDEV installed, something is wrong here..." -# else -# echo -n "Making devices..." -# pid=`twiddle` -# cd /mnt/dev -# sh MAKEDEV all -# kill $pid -# echo "done." -# fi - md_copy_kernel - - md_installboot ${ROOTDISK} -) - -unmount_fs /tmp/fstab.shadow - -# Pat on the back. -md_congrats - -# ALL DONE! -exit 0 diff --git a/distrib/powerpc/miniroot/install.sub b/distrib/powerpc/miniroot/install.sub deleted file mode 100644 index 05494870cbc..00000000000 --- a/distrib/powerpc/miniroot/install.sub +++ /dev/null @@ -1,1335 +0,0 @@ -#!/bin/sh -# $OpenBSD: install.sub,v 1.5 1997/02/21 17:42:11 rahnds 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= # filled in automatically (see list) -export VERSION - -ALLDIST="base comp etc games man misc text" # default install sets -ALLSNAP_1="etc games man misc text bin dev sbin" -ALLSNAP_2="usr.bin usr.binutils usr.games usr.include bsd" -ALLSNAP_3="usr.lib usr.libexec usr.misc usr.sbin usr.share var" -ALLSETS="${ALLDIST} ${ALLSNAP_1} ${ALLSNAP_2} ${ALLSNAP_3}" - -UPGRSETS="base comp games man misc text" # default upgrade sets -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 -fi - -getresp() { - read resp - if [ "X$resp" = "X" ]; then - resp=$1 - fi -} - -isin() { -# test the first argument against the remaining ones, return succes on a match - _a=$1; shift - while [ $# != 0 ]; do - if [ "$_a" = "$1" ]; then return 0; fi - shift - done - return 1 -} - -rmel() { -# remove first argument from list formed by the remaining arguments - 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}.tar.gz ]; then - return 0 - fi - # Try for stupid msdos convention - if [ -f $_dir/${_file}.tgz ]; then - return 0 - fi - done - return 1 -} - -twiddle() { -# spin the propeller so we don't get bored - while : ; do - sleep 1; echo -n "\010/"; - sleep 1; echo -n "\010-"; - sleep 1; echo -n "\010\\\\"; - sleep 1; echo -n "\010|"; - 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 it's 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 $2.$FQDN" >> /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 succesfully configured): - -__configurenetwork_1 - - for _ifs in $_IFS; do - if isin $_ifs $_ifsdone ; then - echo -n "[X] " - else - echo -n " " - fi - echo $_ifs - done - echo "" - echo -n "Configure which interface? [done] " - getresp "done" - case "$resp" in - "done") - ;; - *) - _ifs=$resp - if isin $_ifs $_IFS ; then - if configure_ifs $_ifs ; then - _ifsdone="$_ifs $_ifsdone" - fi - else - echo "Invalid response: \"$resp\" is not in list" - fi - ;; - esac - done -} - -configure_ifs() { - - local _up - local _interface_name - local _interface_ip - local _interface_mask - local _interface_symname - local _interface_extra - - _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 - resp="" # force one iteration - while [ "X${resp}" = X"" ]; do - echo -n "Symbolic (host) name? " - getresp "" - _interface_symname=$resp - done - - # Get netmask - resp="" # force one iteration - while [ "X${resp}" = X"" ]; do - echo -n "Netmask? [$_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 - netstat -r - echo "" - echo "Resolver enabled." - else - netstat -rn - 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 - # Get server IP address - resp="" # force one iteration - while [ "X${resp}" = X"" ]; do - echo -n "Server IP? [${_ftp_server_ip}] " - getresp "${_ftp_server_ip}" - _ftp_server_ip=$resp - done - - # Get server directory - resp="" # force one iteration - while [ "X${resp}" = X"" ]; do - echo -n "Server directory? [${_ftp_server_dir}] " - getresp "${_ftp_server_dir}" - _ftp_server_dir=$resp - done - - # Get login name - resp="" # force one iteration - while [ "X${resp}" = X"" ]; do - echo -n "Login? [${_ftp_server_login}] " - getresp "${_ftp_server_login}" - _ftp_server_login=$resp - done - - # Get password - resp="" # force one iteration - while [ "X${resp}" = X"" ]; do - echo -n "Password? [${_ftp_server_password}] " - getresp "${_ftp_server_password}" - _ftp_server_password=$resp - done - - # Get list of files for mget. - cat << \__install_ftp_2 - -You will now be asked for files to extract. Enter one file at a time. -When you are done entering files, enter 'done'. - -__install_ftp_2 - echo "#!/bin/sh" > /tmp/ftp-script.sh - echo "cd /mnt" >> /tmp/ftp-script.sh - echo "ftp -i -n $_ftp_server_ip << \__end_commands" >> \ - /tmp/ftp-script.sh - echo "user $_ftp_server_login $_ftp_server_password" >> \ - /tmp/ftp-script.sh - echo "bin" >> /tmp/ftp-script.sh - echo "cd $_ftp_server_dir" >> /tmp/ftp-script.sh - - resp="" # force one interation - while [ "X${resp}" != X"done" ]; do - echo -n "File? [done] " - getresp "done" - if [ "X${resp}" = X"done" ]; then - break - fi - - _ftp_file=`echo ${resp} | cutword 1'` - echo "get ${_ftp_file} |\"pax -r -z -v\"" >> \ - /tmp/ftp-script.sh - done - - echo "quit" >> /tmp/ftp-script.sh - echo "__end_commands" >> /tmp/ftp-script.sh - - sh /tmp/ftp-script.sh - rm -f /tmp/ftp-script.sh - echo "Extraction complete." -} - -install_from_mounted_fs() { - # $1 - directory containing installation sets - local _filename - local _sets - local _next - local _f - - _sets="" - if dir_has_sets $1 $THESETS; then - for _f in $THESETS ; do - if [ -f $1/${_f}.tar.gz ]; then - _sets="$_sets ${_f}.tar.gz" - elif [ -f $1/${_f}.tgz ]; then - _sets="$_sets ${_f}.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 ; do - if isin $_f $_setsdone; then - echo -n "[X] " - 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 - cat $_filename | (cd /mnt; pax -r -pe -z ) - 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 ${_filesystem} -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=`expr $resp - 1` - ;; - - *) - echo "Invalid file number ${resp}." - resp="" # fore loop to repeat - ;; - esac - done - - # Skip to correct file. - echo -n "Skipping to source file..." - if [ "X${_nskip}" != X"0" ]; then - if ! mt fsf $_nskip ; then - echo "Could not skip $_nskip files. Aborting." - return - fi - fi - echo "done." - - cat << \__install_tape_2 - -There are 2 different ways the file can be stored on tape: - - 1) an image of a gzipped tar file - 2) a standard tar image - -__install_tape_2 - resp="" # force one iteration - while [ "X${resp}" = X"" ]; do - echo -n "Which way is it? [1] " - getresp "1" - case "$resp" in - 1) - _xcmd="pax -r -pe -z" - ;; - - 2) - _xcmd="pax -r -pe" - ;; - - *) - 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 -a ! -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 "MET" or "GMT-6". -Other zones are grouped by continent, with detailed zone information -separated by a slash ("/"), e.g. "US/Pacific". - -To get a listing of what's available in /usr/share/zoneinfo, enter "?" -at the prompts below. - -__get_timezone_1 - if [ X$TZ = X ]; then - TZ=`ls -l /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\"". - break 2 - 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. - -__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 - ;; - f*|F*) - install_ftp - ;; - t*|T*) - install_tape - ;; - c*|C*) - install_cdrom - ;; - n*|N*) - install_nfs - ;; - *) - echo "Invalid response: $resp" - resp="" - ;; - esac - else - _yup="FALSE" # So we'll ask next time - fi - - # Give the user the opportunity to extract more sets. They - # don't necessarily have to come from the same media. - 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 - - ( 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 ) < $_fstab - - 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 - - ( - _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." - ) < $_fstab -} - -check_fs() -{ - # Check filesystem integrity. - # $1 is a file in fstab format - local _fstab - - _fstab=$1 - - ( - _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." - ) < $_fstab -} diff --git a/distrib/powerpc/miniroot/list b/distrib/powerpc/miniroot/list deleted file mode 100644 index 862096d9aca..00000000000 --- a/distrib/powerpc/miniroot/list +++ /dev/null @@ -1,15 +0,0 @@ -# $NetBSD: list,v 1.1 1995/07/18 04:13:12 briggs Exp $ - -# the disktab explanation file -COPY disktab.preinstall etc - -# and the installation tools -LINK sbin/init usr/bin/vi -COPY dot.profile .profile -COPY dot.instutils .instutils -COPY install.sh install -COPY install.md install.md -COPY install.sub install.sub -COPY disktab.shadow etc/disktab.shadow - -SPECIAL chmod 755 install diff --git a/distrib/powerpc/miniroot/raminst.conf b/distrib/powerpc/miniroot/raminst.conf deleted file mode 100644 index 8546e2efadd..00000000000 --- a/distrib/powerpc/miniroot/raminst.conf +++ /dev/null @@ -1,25 +0,0 @@ -# -# $NetBSD: raminst.conf,v 1.3 1995/09/30 20:00:47 briggs Exp $ -# -# ram.conf - unified binary for the RAM disk -# - -srcdirs bin sbin usr.bin usr.sbin -srcdirs gnu/usr.bin - -progs cat chmod chown cut cp dd df disklabel ed grep expr fdisk fsck_ffs ftp -progs gzip ifconfig init hostname kill ln ls mkdir mknod more mount -progs mount_cd9660 mount_kernfs mount_ffs mount_msdos mount_nfs -progs mv newfs pwd reboot rm route sed sleep sh slattach sort stty -progs sync pax test tip umount vim - -ln vim vi -ln chown chgrp -ln fsck_ffs fsck -ln sh -sh # init invokes the shell this way -ln test [ -ln mount_ffs ffs -ln newfs mount_mfs -ln grep egrep - -libs -ledit -lutil -ltermcap -lcompat -ll -lm -lz diff --git a/distrib/powerpc/miniroot/start_rdconfig.sh b/distrib/powerpc/miniroot/start_rdconfig.sh deleted file mode 100644 index d22552b968e..00000000000 --- a/distrib/powerpc/miniroot/start_rdconfig.sh +++ /dev/null @@ -1,4 +0,0 @@ -echo rdconfig ${1} ${2} -rdconfig ${1} ${2} & -echo $! >rd.pid - diff --git a/distrib/powerpc/ramdisk/Makefile b/distrib/powerpc/ramdisk/Makefile index 1b30d9b5f3d..ff899540d1c 100644 --- a/distrib/powerpc/ramdisk/Makefile +++ b/distrib/powerpc/ramdisk/Makefile @@ -1,9 +1,10 @@ -# $OpenBSD: Makefile,v 1.2 1997/10/15 14:09:04 pefo Exp $ +# $OpenBSD: Makefile,v 1.3 1998/05/29 04:34:19 rahnds Exp $ TOP= ${.CURDIR}/.. .include "${TOP}/Makefile.inc" BSD_RD= bsd.rd +BSDOFW_RD= bsdofw.rd IMAGE= mr.fs CBIN?= instbin LISTS= ${.CURDIR}/list @@ -17,7 +18,6 @@ VND_DEV= /dev/${VND}a VND_RDEV= /dev/r${VND}a VND_CRDEV= /dev/r${VND}c PID!= echo $$$$ -REALIMAGE!= echo /var/tmp/image.${PID} DISKTYPE= rdroot @@ -31,17 +31,26 @@ all ${IMAGE}: @false .else -all: ${BSD_RD} +all: ${BSD_RD} ${BSDOFW_RD} ${BSD_RD}: ${CBIN} ${IMAGE} bsd rdsetroot cp bsd ${BSD_RD} ${.OBJDIR}/rdsetroot ${BSD_RD} < ${IMAGE} - rm ${IMAGE} + +${BSDOFW_RD}: ${CBIN} ${IMAGE} bsdofw rdsetroot + cp bsdofw ${BSDOFW_RD} + ${.OBJDIR}/rdsetroot ${BSDOFW_RD} < ${IMAGE} ${IMAGE}: rd_setup do_files rd_teardown .endif +bsdofw: + cd ${.TOP}/../../sys/arch/powerpc/conf && config RAMDISKOFW + cd ${.TOP}/../../sys/arch/powerpc/compile/RAMDISKOFW && \ + make clean && make + cp ${.TOP}/../../sys/arch/powerpc/compile/RAMDISKOFW/bsd bsdofw + bsd: cd ${.TOP}/../../sys/arch/powerpc/conf && config RAMDISK cd ${.TOP}/../../sys/arch/powerpc/compile/RAMDISK && \ @@ -49,8 +58,8 @@ bsd: cp ${.TOP}/../../sys/arch/powerpc/compile/RAMDISK/bsd bsd rd_setup: - dd if=/dev/zero of=${REALIMAGE} bs=512 count=${NBLKS} - vnconfig -v -c ${VND} ${REALIMAGE} + dd if=/dev/zero of=${IMAGE} bs=512 count=${NBLKS} + vnconfig -v -c ${VND} ${IMAGE} disklabel -w -r ${VND} ${DISKTYPE} newfs ${NEWFSARGS} ${VND_RDEV} fsck ${VND_RDEV} @@ -60,8 +69,6 @@ rd_teardown: @df -i ${MOUNT_POINT} -umount ${MOUNT_POINT} -vnconfig -u ${VND} - cp ${REALIMAGE} ${IMAGE} - rm ${REALIMAGE} rdsetroot: ${TOP}/common/rdsetroot.c ${HOSTCC} -DDEBUG -o rdsetroot ${TOP}/common/rdsetroot.c @@ -69,12 +76,12 @@ rdsetroot: ${TOP}/common/rdsetroot.c unconfig: -umount -f ${MOUNT_POINT} -vnconfig -u ${VND} - -/bin/rm -f ${IMAGE} .PRECIOUS: ${IMAGE} install: cp ${BSD_RD} ${DESTDIR}/snapshot/${BSD_RD} + cp ${BSDOFW_RD} ${DESTDIR}/snapshot/${BSDOFW_RD} ${CBIN}.conf: ${LISTS} awk -f ${UTILS}/makeconf.awk CBIN=${CBIN} ${LISTS} > ${CBIN}.conf diff --git a/distrib/powerpc/ramdisk/install.sh b/distrib/powerpc/ramdisk/install.sh new file mode 100644 index 00000000000..f918fe5b198 --- /dev/null +++ b/distrib/powerpc/ramdisk/install.sh @@ -0,0 +1,578 @@ +#!/bin/sh +# $OpenBSD: install.sh,v 1.1 1998/05/29 04:34:20 rahnds Exp $ +# $NetBSD: install.sh,v 1.5.2.8 1996/08/27 18:15:05 gwr Exp $ +# +# Copyright (c) 1997,1998 Todd Miller, Theo de Raadt +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. All advertising materials mentioning features or use of this software +# must display the following acknowledgement: +# This product includes software developed by Todd Miller and +# Theo de Raadt +# 4. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# 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 +# md_makerootwritable() - make root writable (at least /tmp) +# md_machine_arch() - get machine architecture + +# 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}. + echo ================================================== + 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 + +# 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 + +# Make sure we can write files (at least in /tmp) +# This might make an MFS mount on /tmp, or it may +# just re-mount the root with read-write enabled. +if [ "`df /`" = "`df /tmp`" ]; then + md_makerootwritable +fi + +# Get the machine architecture (must be done after md_makerootwritable) +ARCH=`md_machine_arch` + +if [ "`df /`" = "`df /mnt`" ]; then + # Install the shadowed disktab file; lets us write to it for temporary + # purposes without mounting the miniroot read-write. + if [ -f /etc/disktab.shadow ]; then + cp /etc/disktab.shadow /tmp/disktab.shadow + fi + + while : ; do + if [ "X${ROOTDISK}" = "X" ]; then + while [ "X${ROOTDISK}" = "X" ]; do + getrootdisk + done + DISK=$ROOTDISK + else + DISK="" + while [ "X${DISK}" = "X" ]; do + getanotherdisk + done + if [ "${DISK}" = "done" ]; then + break + fi + 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 ${DISK} + + # 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 for ${DISK}. +You will be prompted for the mount point (full path, including the prepending +'/' character) for each BSD partition on ${DISK}. Enter "none" to skip a +partition or "done" when you are finished. +__get_filesystems_1 + + if [ "${DISK}" = "${ROOTDISK}" ]; then + echo + echo "The following partitions will be used for the root filesystem and swap:" + echo " ${ROOTDISK}a /" + echo " ${ROOTDISK}b swap" + + echo "${ROOTDISK}a /" > ${FILESYSTEMS} + fi + + # XXX - allow the user to name mount points on disks other than ROOTDISK + # also allow a way to enter non-BSD partitions (but don't newfs!) + # Get the list of BSD partitions and store sizes + _npartitions=0 + for _p in `disklabel ${DISK} 2>&1 | grep '^ *[a-p]:.*BSD' | sed 's/^ *\([a-p]\): *\([0-9][0-9]*\) .*/\1\2/'`; do + _pp=`firstchar ${_p}` + if [ "${DISK}" = "${ROOTDISK}" -a "$_pp" = "a" ]; then + continue + fi + _ps=`echo ${_p} | sed 's/^.//'` + _partitions[${_npartitions}]=${_pp} + _psizes[${_npartitions}]=${_ps} + _npartitions=$(( ${_npartitions} + 1 )) + done + + # Now prompt the user for the mount points. Loop until "done" + echo "" + _i=0 + resp="X" + while [ $_npartitions -gt 0 -a X${resp} != X"done" ]; do + _pp=${_partitions[${_i}]} + _ps=$(( ${_psizes[${_i}]} / 2 )) + _mp=${_mount_points[${_i}]} + + # Get the mount point from the user + while : ; do + echo -n "Mount point for ${DISK}${_pp} (size=${_ps}k) [$_mp, RET, none, or done]? " + getresp "$_mp" + case "X${resp}" in + X/*) _mount_points[${_i}]=$resp + break ;; + Xdone|X) + break ;; + Xnone) _mount_points[${_i}]= + break;; + *) echo "mount point must be an absolute path!";; + esac + done + _i=$(( ${_i} + 1 )) + if [ $_i -ge $_npartitions ]; then + _i=0 + fi + done + + # Now write it out + _i=0 + while test $_i -lt $_npartitions; do + if [ -n "${_mount_points[${_i}]}" ]; then + echo "${DISK}${_partitions[${_i}]} ${_mount_points[${_i}]}" >> ${FILESYSTEMS} + _mount_points[${_i}]="" + fi + _i=$(( ${_i} + 1 )) + done + 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 "If you made any mistakes, you may edit this now." + echo -n "Edit using ${EDITOR}? [n] " + getresp "n" + case "$resp" in + y*|Y*) + ${EDITOR} ${FILESYSTEMS} + ;; + *) + ;; + esac + echo + 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..." + ( + while read _device_name _junk; do + newfs /dev/r${_device_name} + done + ) < ${FILESYSTEMS} +else + # Get the root device + ROOTDISK=`df /mnt | sed -e '/^\//!d' -e 's/\/dev\/\([^ ]*\)[a-p] .*/\1/'` + while [ "X${ROOTDISK}" = "X" ]; do + getrootdisk + done +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, HTTP, 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. + +__network_config_1 +echo -n "Configure the network? [y] " +getresp "y" +case "$resp" in + y*|Y*) + resp="" # force at least one iteration + _nam="" + if [ -f /tmp/myname ]; then + _nam=`cat /tmp/myname` + fi + while [ "X${resp}" = X"" ]; do + echo -n "Enter system hostname (short form): [$_nam] " + getresp "$_nam" + done + hostname $resp + echo $resp > /tmp/myname + + resp="" # force at least one iteration + if [ -f /tmp/resolv.conf ]; then + FQDN=`grep '^domain ' /tmp/resolv.conf | \ + sed -e 's/^domain //'` + fi + while [ "X${resp}" = X"" ]; do + echo -n "Enter DNS domain name: [$FQDN] " + getresp "$FQDN" + done + FQDN=$resp + + configurenetwork + + resp="none" + if [ -f /tmp/mygate ]; then + resp=`cat /tmp/mygate` + fi + echo -n "Enter IP address of default route: [$resp] " + getresp "$resp" + 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 + + resp="none" + if [ -f /tmp/resolv.conf ]; then + resp=`grep '^nameserver ' /tmp/resolv.conf | \ + sed -e 's/^nameserver //'` + fi + echo -n "Enter IP address of primary nameserver: [$resp] " + getresp "$resp" + 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 "lookup file bind" >> /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 + + if [ ! -f /tmp/resolv.conf.shadow ]; then + echo "" + echo "The host table is as follows:" + echo "" + cat /tmp/hosts + cat << __hosts_table_1 + +You may want to edit the host table in the event that you are doing an +NFS installation or an FTP installation without a name server and want +to refer to the server by name rather than by its numeric ip address. +__hosts_table_1 + echo -n "Would you like to edit the host table with ${EDITOR}? [n] " + getresp "n" + case "$resp" in + y*|Y*) + ${EDITOR} /tmp/hosts + ;; + + *) + ;; + esac + fi + + cat << \__network_config_2 + +You will now be given the opportunity to escape to the command shell to do +any additional network configuration you may need. This may include adding +additional routes, if needed. In addition, you might take this opportunity +to redo the default route in the event that it failed above. +__network_config_2 + echo -n "Escape to shell? [n] " + getresp "n" + case "$resp" in + y*|Y*) + echo "Type 'exit' to return to 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 + +# XXX We no longer do the following. It is not neccessary. It can be done +# XXX after the install is complete. +# +# echo "The fstab is configured as follows:" +# echo "" +# cat /tmp/fstab +# cat << \__fstab_config_1 +# +#You may wish to edit the fstab. 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 with ${EDITOR}? [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 + +resp="" # force one iteration +echo +echo 'Please enter the initial password that the root acount will have.' +while [ "X${resp}" = X"" ]; do + echo -n "Password (will not echo): " + stty -echo + getresp "${_password}" + stty echo + echo "" + _password=$resp + + echo -n "Password (again): " + stty -echo + getresp "${_password}" + stty echo + echo "" + if [ "${_password}" != "${resp}" ]; then + echo "Passwords do not match, try again." + resp="" + 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 +if [ ! -e /usr/share/zoneinfo ]; then + get_timezone +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 + + +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..." +#pid=`twiddle` +cd /mnt/dev +sh MAKEDEV all +#kill $pid +echo "done." +cd / + +_encr=`echo ${_password} | /mnt/usr/bin/encrypt -b 7` +echo "1,s@^root::@root:${_encr}:@ +w +q" | ed /mnt/etc/master.passwd 2> /dev/null +/mnt/usr/sbin/pwd_mkdb -p -d /mnt/etc /etc/master.passwd + +unmount_fs /tmp/fstab.shadow + +# Pat on the back. +md_congrats + +# ALL DONE! +exit 0 diff --git a/distrib/powerpc/ramdisk/install.sub b/distrib/powerpc/ramdisk/install.sub new file mode 100644 index 00000000000..692fac312c5 --- /dev/null +++ b/distrib/powerpc/ramdisk/install.sub @@ -0,0 +1,2071 @@ +#!/bin/sh +# $OpenBSD: install.sub,v 1.1 1998/05/29 04:34:20 rahnds Exp $ +# $NetBSD: install.sub,v 1.5.2.8 1996/09/02 23:25:02 pk Exp $ +# +# Copyright (c) 1997,1998 Todd Miller, Theo de Raadt +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. All advertising materials mentioning features or use of this software +# must display the following acknowledgement: +# This product includes software developed by Todd Miller and +# Theo de Raadt +# 4. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# 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= +VERSION_MAJOR=$(( $VERSION / 10 )) +VERSION_MINOR=$(( $VERSION % 10 )) +export VERSION VERSION_MAJOR VERSION_MINOR + +ALLSETS="base etc misc comp text man game xbase xfont xserv" # default install sets +UPGRSETS="base misc comp text man game xbase xfont xserv" # default upgrade sets +SNAPSETS="bin dev etc games man misc sbin text \ + 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() { + set -o noglob + 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 + set +o noglob +} + +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 +} + +addel() { +# add first argument to list formed by the remaining arguments +# adds to the tail if the element does not already exist + local _a + local _seen + + _seen="" + _a=$1; shift + while [ $# != 0 ]; do + echo "$1" + if [ "$_a" = "$1" ]; then + _seen="yes" + fi + shift + done + if [ "X$_seen" = "X" ]; then + echo "$_a" + fi +} + +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 +} + +list_has_sets() { + # return true when the list $1 contains a set, given dir $2 for $3...$n + local _list + local _file + + _list=$1; shift + for _file in $* + do + if isin ${_file}${VERSION}.tar.gz $_list; then + return 0 + fi + # Try for stupid msdos convention + if isin ${_file}${VERSION}.tgz $_list; then + return 0 + fi + # Special check for kernel + if test $_file = "kernel" && isin bsd $_list; then + return 0 + fi + done + return 1 +} + +ftp_list_files() { + # log in via ftp to host $1 as user $2 with password $3 + # and return a list of all files in the directory $4 on stdout + local _host + local _user + local _pass + local _dir + + _host=$1; shift + _user=$1; shift + _pass=$1; shift + _dir=$1; shift + + ftp ${_ftp_active} -V -n $_host <<__ptf +user $_user $_pass +cd $_dir +ls +quit +__ptf +} + +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 +} + +getanotherdisk() { + cat << \__getanotherdisk_1 + +Now you can select another disk to initialize. (Do not re-select a disk +you have already entered information for). Available disks are: + +__getanotherdisk_1 + _DKDEVS=`md_get_diskdevs` + echo "$_DKDEVS" + echo "" + echo -n "Which one? [done] " + getresp "" + if [ "X${resp}" = "X" ]; then + DISK=done + elif isin $resp $_DKDEVS ; then + DISK="$resp" + else + echo "" + echo "The disk $resp does not exist." + DISK="" + fi +} + +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 +boot program (especially on a PC with multiple disk controllers). +Available disks are: + +__getrootdisk_1 + local _defdsk; + + _DKDEVS=`md_get_diskdevs` + _defdsk=`echo $_DKDEVS | cutlast` + if [ "${_defdsk}" != "${_DKDEVS}" ]; then + _defdsk="" + fi + echo "$_DKDEVS" + echo "" + echo -n "Which disk is the root disk [${_defdsk}]? " + getresp "${_defdsk}" + 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 it's 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 $2.$FQDN" >> /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 + local _ouranswer + local _reprompt + + _IFS=`md_get_ifdevs` + _ifsdone="" + _ouranswer="" + _reprompt=1 + resp="" # force at least one iteration + while [ "X${resp}" != X"done" ]; do + if [ $_reprompt = 1 ]; then + cat << \__configurenetwork_1 + +You may configure the following network interfaces (the interfaces +marked with [X] have been succesfully configured): + +__configurenetwork_1 + + for _ifs in $_IFS; do + if [ "X${_ouranswer}" = "X" ]; then + _ouranswer=$_ifs + fi + if isin $_ifs $_ifsdone ; then + echo -n " [X] " + else + echo -n " [ ] " + fi + echo $_ifs + done + echo "" + fi + echo -n "Configure which interface? (or, enter 'done') [$_ouranswer] " + getresp "$_ouranswer" + case "$resp" in + "done") + ;; + "") + _reprompt=0 + ;; + *) + _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 + _ouranswer="done" + _reprompt=1 + ;; + 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="" + if [ "X${_interface_mask}" = X"" ]; then + _interface_mask=255.255.255.0 + fi + 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. Values used by some drivers are:" + echo " -link0 BNC" + echo " link0 -link1 AUI" + echo " link0 link1 UTP" + echo "(But please keep in mind not all drivers use flags like this)." + 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 +} + +# Print the selector and get a response +# The list of sets is passed in as $1, sets $resp +get_selection() { + local _next + local _f + local _sets + + _sets=$1 + _next="" + for _f in $_sets ; do + if isin $_f $_setsdone ; then + echo -n " [X] " + _next="" + else + echo -n " [ ] " + if [ -z "$_next" ]; then + _next=$_f + fi + fi + echo $_f + done + + # Get the name of the file. + echo -n "File name [$_next]? " + getresp "$_next" +} + +install_url() { +# Get several parameters from the user, and xfer +# files from the server. +# Note: _ftp_server_ip, _ftp_server_dir, _ftp_server_login, +# _ftp_server_password, and _ftp_active must be global. + +local _sets +local _kernel +local _f +local _file_list +local _get_files +local _failed_files +local _osetsdone +local _url_type +local _url_base +local _tfile +local _matched +local _action + +# Is this an ftp or http install? +_url_type=$1; shift + +echo +echo "This is an automated ${_url_type}-based installation process. You will be asked" +echo "questions and then the files will be retrieved iteratively via ftp(1)." +echo + +# Proxy the connections? +if [ "X${_proxy_host}" = X"" ]; then + _proxy_host=none +fi +echo -n "HTTP/FTP proxy URL? (if you use a proxy) [${_proxy_host}] " +getresp "${_proxy_host}" +if [ "X${resp}" = X"none" ]; then + unset _proxy_host ftp_proxy http_proxy +else + _proxy_host=$resp + export ftp_proxy=${_proxy_host} + export http_proxy=${_proxy_host} +fi +if [ "${_url_type}" = "ftp" -a "X$ftp_proxy" = "X" ]; then + # Use active mode ftp? (irrelevant if using a proxy) + case "${_ftp_active}" in + -A) resp=y ;; + *) resp=n ;; + esac + echo "By default, ftp will attempt a passive connection and fall back to a normal" + echo "(active) connection if that doesn't work. However, there are some very" + echo "old ftp servers that claim to support passive mode, but really do not." + echo "In this case, you should explicately request an active session." + echo -n "Do you want to use active ftp? [${resp}] " + getresp "${resp}" + case "$resp" in + y*|Y*) _ftp_active=-A ;; + *) unset _ftp_active ;; + esac +fi + +# Provide a list of possible servers +echo -n "Do you want a list of potential ${_url_type} servers? [y] " +getresp "y" +case "$resp" in +n*|N*) ;; +*) + ftp ${_ftp_active} -V -a -o - ftp://ftp.openbsd.org/pub/OpenBSD/${VERSION_MAJOR}.${VERSION_MINOR}/ftplist | grep "^${_url_type}:" + ;; +esac + +# Get server IP address +resp="" # force one iteration +while [ "X${resp}" = X"" ]; do + eval echo -n "Server IP address or hostname? [\$_${_url_type}_server_ip]\ " + eval getresp "\$_${_url_type}_server_ip" + eval _${_url_type}_server_ip=$resp +done + +# Get server directory +if [ "${_url_type}" = "ftp" -a "X${_ftp_server_dir}" = X"" ]; then + # Default ftp dir + _ftp_server_dir="pub/OpenBSD/${VERSION_MAJOR}.${VERSION_MINOR}/${ARCH}" +fi +resp="" # force one iteration +while [ "X${resp}" = X"" ]; do + eval echo -n "Server directory? [\$_${_url_type}_server_dir]\ " + eval getresp "\$_${_url_type}_server_dir" + eval _${_url_type}_server_dir=$resp +done + +if [ "${_url_type}" = "ftp" ]; then + # Need default values even if we proxy ftp... + if [ "X${_ftp_server_login}" = X"" ]; then + _ftp_server_login=anonymous + fi + if [ "X${_ftp_server_password}" = X"" ]; then + _ftp_server_password=root@`hostname`.${FQDN} + fi + + # Get login name + resp="" # force one iteration + while [ "X${resp}" = X"" ]; do + echo -n "Login? [${_ftp_server_login}] " + getresp "${_ftp_server_login}" + _ftp_server_login=$resp + done + + # Get password unless anonymous + if [ ${_ftp_server_login} != "anonymous" ]; then + resp="" # force one iteration + while [ "X${resp}" = X"" ]; do + echo -n "Password (will not echo): " + stty -echo + getresp "${_ftp_server_password}" + stty echo + echo "" + _ftp_server_password=$resp + + echo -n "Password (again): " + stty -echo + getresp "${_ftp_server_password}" + stty echo + echo "" + if [ "${_ftp_server_password}" != "${resp}" ]; then + echo "Passwords do not match, try again." + resp="" + fi + done + else + # only used by ftp_list_files() + _ftp_server_password=root@`hostname`.${FQDN} + fi +fi + +# Build up the base url since it is so nasty... +if [ "${_url_type}" = "ftp" -a "${_ftp_server_login}" != "anonymous" ]; then + eval _url_base=${_url_type}://${_ftp_server_login}:${_ftp_server_password}@\$_${_url_type}_server_ip/\$_${_url_type}_server_dir +else + eval _url_base=${_url_type}://\$_${_url_type}_server_ip/\$_${_url_type}_server_dir +fi + +# Get list of files from the server. +# XXX - check for nil $_file_list and deal +if [ "${_url_type}" = "ftp" -a "X${ftp_proxy}" = X"" ]; then + _file_list=`ftp_list_files "$_ftp_server_ip" "$_ftp_server_login" "$_ftp_server_password" "$_ftp_server_dir"` +else + # Assumes index file is "index.txt" for http (or proxy) + # We can't use index.html since the format is server-dependent + _file_list=`ftp -o - -V ${_url_base}/index.txt | sed 's/
//'` +fi + +_sets="" +if list_has_sets "$_file_list" $THESETS; then + for _f in $THESETS ; do + if [ "X${_f}" = "Xkernel" ]; then + if isin bsd $_file_list; then + _kernel=bsd + fi + elif isin ${_f}${VERSION}.tar.gz $_file_list; then + _sets="$_sets ${_f}${VERSION}.tar.gz" + elif isin ${_f}${VERSION}.tgz $_file_list; then + _sets="$_sets ${_f}${VERSION}.tgz" + fi + done +else + eval echo "There are no OpenBSD install sets available in \"\$_${_url_type}_server_dir\"." + echo -n "Search for *.tar.gz and *.tgz files? [y] " + getresp "y" + case "$resp" in + n*|N*) return ;; + *) ;; + esac + # *.tar.gz and *.tgz are possible sets + _sets="" + _kernel="" + for _f in ${_file_list} ; do + case "$_f" in + *.tar.gz|*.tgz) _sets="$_sets ${_f}" + esac + done + if [ "X${_sets}" = X"" ]; then + echo "There are no *.tar.gz or *.tgz files in that dir." + echo -n "See a directory listing? [y] " + getresp "y" + case "$resp" in + n*|N*) return ;; + *) ;; + esac + echo "" + echo "${_file_list}" + echo "" + return + else + echo "Adding *.tar.gz and *.tgz files to selector." + fi +fi + +# Yes, all those blackslashes really are necesary... +eval echo "\\\\n"\ +"You will now be asked for files to extract. In addition to the\\\\n"\ +"files listed in the selector you may enter any file located at\\\\n"\ +"\$_${_url_type}_server_ip:\$_${_url_type}_server_dir. You can also enter\\\\n"\ +"'all' to install all the standard sets, or 'list' to list the\\\\n"\ +"files avilable at \$_${_url_type}_server_ip:\$_${_url_type}_server_dir.\\\\n"\ +"When you are done selecting files, enter 'done'.\\\\n"\ +"Some of these sets are required for your ${MODE} and some are optional --\\\\n"\ +"You will want at least the base and bsd sets.\\\\n"\ +"Consult the installation notes if you are not sure which sets are required!" +_osetsdone="$_setsdone" +# Set a minimal default +for _f in $_sets $_kernel; do + case "$_f" in + base*.tar.gz|base*.tgz|etc*.tar.gz|etc*.tgz|bsd) + if ! isin ${_f} ${_setsdone}; then + _get_files=`addel ${_f} ${_get_files}` + _setsdone=`addel ${_f} ${_setsdone}` + fi + ;; + esac +done + +# Allow the user to select/de-select additional sets +while : ; do + echo "" + echo "The following sets are available for extraction." + echo "Enter filename, \`list', \`all', or \`done'." + echo "You may de-select a set by prepending a '-' to it's name." + echo "" + get_selection "$_sets $_kernel" + + if [ "X${resp}" = X"done" ]; then + break + elif [ "X${resp}" = X"list" ]; then + echo "" + eval echo "\$_${_url_type}_server_dir:" + echo "${_file_list}" + continue + elif [ "X${resp}" = X"all" ]; then + _get_files="$_sets $_kernel" + _setsdone="$_sets $_kernel" + break + fi + + # Change +/- into add/remove + _action=add + case "$resp" in + +*) resp="${resp#?}" + ;; + -*) resp="${resp#?}" + _action=remove + ;; + esac + + # Major hack to allow the user to select globbing patterns + set -o noglob + _tfile=/tmp/install_case.$$ # safe in single user mode + cat >$_tfile << OOF + case \$_f in + $resp) # Add/remove file to extraction list + if [ "\$_action" = "add" ]; then + _get_files=\`addel \${_f} \${_get_files}\` + _setsdone=\`addel \${_f} \${_setsdone}\` + elif [ "\$_action" = "remove" ]; then + _get_files=\`rmel \${_f} \${_get_files}\` + _setsdone=\`rmel \${_f} \${_setsdone}\` + else + echo "Unknown action: \$_action" + fi + _matched=\$(( \$_matched + 1 )) + ;; + esac +OOF + set +o noglob + + # Eww. + _matched=0 + for _f in $_sets $_kernel; do + . $_tfile + done + rm -f $_tfile + + if [ $_matched -eq 0 ]; then + eval echo "File \$_${_url_type}_server_dir/$resp does not exist. Check to make" + echo "sure you entered the information properly or enter 'list' for a file list." + fi +done + +# User may have said "done" without selecting any files +if [ "X${_get_files}" = X"" ]; then + return +fi + +echo +echo "Fetching files via ${_url_type} may take a long time, especially over a slow network" +echo -n "connection. Ready to download files? [y] " +getresp "y" +case "$resp" in + y*|Y*) + ;; + *) + _setsdone="$_osetsdone" + return + ;; +esac + +# Download the files one at a time and keep track of which ones failed +while test -n "${_get_files}" ; do + _failed_files="" + for _f in $_get_files ; do + echo "" + if [ "X${_f}" = "X${_kernel}" ]; then + ( cd /mnt ; ftp ${_ftp_active} -V ${_url_base}/${_f} ) + else + ( cd /mnt ; ftp ${_ftp_active} -o - -V ${_url_base}/${_f} | tar zxvpf - ) + fi + if [ $? -ne 0 ]; then + # Mark xfer as having failed,. + _setsdone=`rmel $_f $_setsdone` + _failed_files="${_failed_files} ${_f}" + fi + done + + # Give them the option of refetching failed files. + _get_files="" + while test -n "${_failed_files}" ; do + echo "" + echo "The following files failed to transfer and extract correctly:" + echo "Choose which one(s) to refetch or 'done' to exit selector." + echo "You may de-select a file by prepending a '-' to it's name." + echo "" + get_selection "$_failed_files" + + if [ "X${resp}" = X"done" ]; then + break + elif [ "X${resp}" = X"list" ]; then + echo "" + eval echo "\$_${_url_type}_server_dir:" + echo "${_file_list}" + echo "" + continue + fi + + # Change +/- into add/remove + _action=add + case "$resp" in + +*) resp="${resp#?}" + ;; + -*) resp="${resp#?}" + _action=remove + ;; + esac + + # Major hack to allow the user to select globbing patterns + set -o noglob + _tfile=/tmp/install_case.$$ # safe in single user mode + cat >$_tfile << OOF + case \$_f in + $resp) # Add/remove file to extraction list + if [ "\$_action" = "add" ]; then + _get_files=\`addel \${_f} \${_get_files}\` + _setsdone=\`addel \${_f} \${_setsdone}\` + elif [ "\$_action" = "remove" ]; then + _get_files=\`rmel \${_f} \${_get_files}\` + _setsdone=\`rmel \${_f} \${_setsdone}\` + else + echo "Unknown action: \$_action" + fi + _matched=\$(( \$_matched + 1 )) + ;; + esac +OOF + set +o noglob + + # Eww. + _matched=0 + for _f in $_failed_files; do + . $_tfile + done + rm -f $_tfile + + if [ $_matched -eq 0 ]; then + eval echo "File \$_${_url_type}_server_dir/$resp does not exist. Check to make" + echo "sure you entered the information properly or enter 'list' for a file list." + fi + done +done +} + +install_from_mounted_fs() { +# $1 - directory containing installation sets +local _sets +local _kernel +local _f +local _get_files +local _failed_files +local _osetsdone +local _tfile +local _matched +local _action + +if [ ! -d $1 ]; then + echo "No such directory: $1" + return +fi + +_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\"." + echo -n "Search for *.tar.gz and *.tgz files? [y] " + getresp "y" + case "$resp" in + n*|N*) return ;; + *) ;; + esac + # *.tar.gz and *.tgz are possible sets + _sets="" + _kernel="" + _sets=`cd $1 ; echo *.tar.gz *.tgz` + if [ "X${_sets}" = X'*.tar.gz *.tgz' ]; then + echo "There are no *.tar.gz or *.tgz files in that dir." + echo -n "See a directory listing? [y] " + getresp "y" + case "$resp" in + n*|N*) return ;; + *) ;; + esac + echo "" + ( cd $1 && ls ) + echo "" + return + else + echo "Adding *.tar.gz and *.tgz files to selector." + fi +fi + +echo "\n"\ +"You will now be asked for files to extract. In addition to the\n"\ +"files listed in the selector you may enter any file located in\n"\ +"$1. You can also enter 'all' to install all the standard\n"\ +"sets, or 'list' to list the files avilable in $1.\n"\ +"When you are done selecting files, enter 'done'.\n"\ +"Some of these sets are required for your ${MODE} and some are optional --\n"\ +"You will want at least the base and bsd sets.\n"\ +"Consult the intallation notes if you are not sure which sets are required!" +_osetsdone="$_setsdone" +# Set a minimal default +for _f in $_sets $_kernel; do + case "$_f" in + base*.tar.gz|base*.tgz|etc*.tar.gz|etc*.tgz|bsd) + if ! isin ${_f} ${_setsdone}; then + _get_files=`addel ${_f} ${_get_files}` + _setsdone=`addel ${_f} ${_setsdone}` + fi + ;; + esac +done + +# Allow the user to select/de-select additional sets +while : ; do + echo "" + echo "The following sets are available for extraction." + echo "Enter filename, \`list', \`all', or \`done'." + echo "You may de-select a set by prepending a '-' to it's name." + echo "" + get_selection "$_sets $_kernel" + + if [ "X${resp}" = X"done" ]; then + break + elif [ "X${resp}" = X"list" ]; then + echo "" + echo "${1}:" + ( cd $1 && ls ) + continue + elif [ "X${resp}" = X"all" ]; then + _get_files="$_sets $_kernel" + _setsdone="$_sets $_kernel" + break + fi + + # Change +/- into add/remove + _action=add + case "$resp" in + +*) resp="${resp#?}" + ;; + -*) resp="${resp#?}" + _action=remove + ;; + esac + + # Major hack to allow the user to select globbing patterns + set -o noglob + _tfile=/tmp/install_case.$$ # safe in single user mode + cat >$_tfile << OOF + case \$_f in + $resp) # Add/remove file to extraction list + if [ "\$_action" = "add" ]; then + _get_files=\`addel \${_f} \${_get_files}\` + _setsdone=\`addel \${_f} \${_setsdone}\` + elif [ "\$_action" = "remove" ]; then + _get_files=\`rmel \${_f} \${_get_files}\` + _setsdone=\`rmel \${_f} \${_setsdone}\` + else + echo "Unknown action: \$_action" + fi + _matched=\$(( \$_matched + 1 )) + ;; + esac +OOF + set +o noglob + + # Eww. + _matched=0 + for _f in $_sets $_kernel; do + . $_tfile + done + rm -f $_tfile + + if [ $_matched = 0 ]; then + echo "File $1/$resp does not exist. Check to make" + echo "sure you entered the information properly or enter 'list' for a file list." + fi +done + +# User may have said "done" without selecting any files +if [ "X${_get_files}" = X"" ]; then + return +fi + +echo +echo -n "Ready to extract selected file sets? [y] " +getresp "y" +case "$resp" in + y*|Y*) + ;; + *) + _setsdone="$_osetsdone" + return + ;; +esac + +# Extract the files one at a time and keep track of which ones failed +while test -n "${_get_files}" ; do + _failed_files="" + for _f in $_get_files ; do + echo "" + echo "$1/${_f}:" + if [ "X${_f}" = "X${_kernel}" ]; then + cp $1/$_f /mnt/$_f + else + cat $1/$_f | (cd /mnt; tar -zxvpf -) + fi + if [ $? -ne 0 ]; then + # Mark xfer as having failed,. + _setsdone=`rmel $_f $_setsdone` + _failed_files="${_failed_files} ${_f}" + fi + done + + # Give them the option of retrying failed files. + _get_files="" + while test -n "${_failed_files}" ; do + echo "" + echo "The following files failed to extract correctly:" + echo "Choose which one(s) to retry or 'done' to exit selector." + echo "You may de-select a file by prepending a '-' to it's name." + echo "" + get_selection "$_failed_files" + + if [ "X${resp}" = X"done" ]; then + break + elif [ "X${resp}" = X"list" ]; then + echo "" + echo "${1}:" + ( cd $1 && ls ) + echo "" + continue + fi + + # Change +/- into add/remove + _action=add + case "$resp" in + +*) resp="${resp#?}" + ;; + -*) resp="${resp#?}" + _action=remove + ;; + esac + + # Major hack to allow the user to select globbing patterns + set -o noglob + _tfile=/tmp/install_case.$$ # safe in single user mode + cat >$_tfile << OOF + case \$_f in + $resp) # Add/remove file to extraction list + if [ "\$_action" = "add" ]; then + _get_files=\`addel \${_f} \${_get_files}\` + _setsdone=\`addel \${_f} \${_setsdone}\` + elif [ "\$_action" = "remove" ]; then + _get_files=\`rmel \${_f} \${_get_files}\` + _setsdone=\`rmel \${_f} \${_setsdone}\` + else + echo "Unknown action: \$_action" + fi + _matched=\$(( \$_matched + 1 )) + ;; + esac +OOF + set +o noglob + + # Eww. + _matched=0 + for _f in $_failed_files; do + . $_tfile + done + rm -f $_tfile + + if [ $_matched = 0 ]; then + echo "File $1/$resp does not exist. Check to make" + echo "sure you entered the information properly or enter 'list' for a file list." + fi + done +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: +cd9660 ISO-9660 +ffs Berkeley Fast Filesystem + +__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 +if [ "X${_directory}" = X"" ]; then + _directory="/${VERSION_MAJOR}.${VERSION_MINOR}/${ARCH}" +fi +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 _def_partition +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 +cat <<__mount_a_disk_1 + +The following partitions have been found on $_drive: + +__mount_a_disk_1 +disklabel $_drive 2>/dev/null | grep '^ .:' +echo +_likely_partition_range=`disklabel $_drive 2>/dev/null | \ + sed -n -e '/swap/s/.*//' -e '/unused/s/.*//' \ + -e '/^ .:/{s/^ \(.\).*/\1/;H;}' \ + -e '${g;s/\n//g;s/^/[/;s/$/]/p;}'` +_partition_range=`disklabel $_drive 2>/dev/null | \ + sed -n -e '/^ .:/{s/^ \(.\).*/\1/;H;}' \ + -e '${g;s/\n//g;s/^/[/;s/$/]/p;}'` +_def_partition=`echo $_likely_partition_range | \ + sed -n 's/^\[\(.\).*\]/\1/p'` +if [ -z "$_def_partition" ]; then + _def_partition=`echo $_partition_range | \ + sed -n 's/^\[\(.\).*\]/\1/p'` + if [ -z "$_def_partition" ]; then + echo "There are no usable partitions on that disk" + return 0 + fi +fi +resp="" # force one iteration +while [ "X${resp}" = X"" ]; do + echo -n "Partition? [$_def_partition] " + getresp "$_def_partition" + 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: +default (deduced from the disklabel) +ffs +__mount_a_disk_2 +_md_fstype=`md_native_fstype` +_md_fsopts=`md_native_fsopts` +if [ ! -z "$_md_fstype" ]; then + echo " $_md_fstype" +else + _md_fstype="_undefined_" +fi +resp="" # force one iteration +while [ "X${resp}" = X"" ]; do + echo -n "Which filesystem type? [default] " + getresp "default" + case "$resp" in + default) + _fstype="" + _fsopts="ro" + ;; + ffs) + _fstype="-t $resp" + _fsopts="ro" + ;; + $_md_fstype) + _fstype="-t $resp" + _fsopts=$_md_fsopts + ;; + *) + echo "Invalid response: $resp" + resp="" # force loop to repeat + ;; + esac +done + +# Mount the disk +if ! mount $_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 or hostname? [${_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=`expr $resp - 1` + ;; + + *) + echo "Invalid file number ${resp}." + resp="" # fore loop to repeat + ;; + esac +done + +# Skip to correct file. +echo -n "Skipping to source file..." +if [ "X${_nskip}" != X"0" ]; then + if ! mt fsf $_nskip ; then + echo "Could not skip $_nskip files. Aborting." + return + fi +fi +echo "done." + +cat << \__install_tape_2 + +There are 2 different ways the file can be stored on tape: + +1) an image of a gzipped tar file +2) a standard tar image + +__install_tape_2 +resp="" # force one iteration +while [ "X${resp}" = X"" ]; do + echo -n "Which way is it? [1] " + getresp "1" + case "$resp" in + 1) + _xcmd="tar -zxvpf -" + ;; + + 2) + _xcmd="tar -xvpf -" + ;; + + *) + 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 -a ! -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 "MET" 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 -F ${_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 -F ${_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, h(ttp), (t)ape, (C)D-ROM," + echo -n " (N)FS or local (d)isk? " + getresp "" + case "$resp" in + d*|D*) + install_disk + resp=d + ;; + f*|F*) + install_url ftp + resp=f + ;; + h*|H*) + install_url http + resp=h + ;; + 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 + + if [ ! -f /mnt/bsd ]; then + cat << \__install_sets_2 + +You still do not have a /bsd in your filesystem (ie. the kernel), which +seems to indicate that you are still missing important distribution files. +So please continue installing... +__install_sets_2 + resp="" + fi + if [ ! -f /mnt/bin/cat ]; then + cat << \__install_sets_3 + +You still do not have a /bin/cat in your filesystem (ie. a sample random file +which you probably want). This seems to indicate that you are still missing +important distribution files. So please continue installing... +__install_sets_3 + resp="" + 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 + +( 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 ) < $_fstab + +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: [-check] <fstab file> +local _check +local _fstab +local _pid + +if [ "$1" = "-check" ]; then + _check=1 + _fstab=$2 +else + _check=0 + _fstab=$1 +fi + +if [ ! \( -f $_fstab -a -s $_fstab \) ]; then + echo "fstab empty" > /dev/tty + return +fi + +( + _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 [ $_check = 1 ]; then + echo "Checking filesystem integrity..." + for _dev in ${_devs}; do + echo "${_dev}" + fsck -f ${_dev} + done + fi + echo "Done." +) < $_fstab +} + +check_fs() +{ +# Check filesystem integrity. +# $1 is a file in fstab format +local _fstab + +_fstab=$1 + +( + _devs="" + _mps="" + while read line; do + 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." +) < $_fstab +} diff --git a/distrib/powerpc/ramdisk/list b/distrib/powerpc/ramdisk/list index df756d88ea9..00f5aa7142f 100644 --- a/distrib/powerpc/ramdisk/list +++ b/distrib/powerpc/ramdisk/list @@ -1,4 +1,4 @@ -# $OpenBSD: list,v 1.4 1998/04/06 20:27:31 pefo Exp $ +# $OpenBSD: list,v 1.5 1998/05/29 04:34:20 rahnds Exp $ SRCDIRS distrib/special SRCDIRS usr.bin bin sbin usr.sbin gnu/usr.bin @@ -66,7 +66,7 @@ SYMLINK ../../instbin usr/bin/build usr/bin/vi # copy the MAKEDEV script and make some devices COPY ${DESTDIR}/dev/MAKEDEV dev/MAKEDEV SPECIAL cd dev; sh MAKEDEV ramdisk -SPECIAL /bin/rm dev/MAKEDEV +#SPECIAL /bin/rm dev/MAKEDEV # we need the contents of /usr/mdec COPY ${DESTDIR}/usr/mdec/ofwboot usr/mdec/ofwboot |