Prelimary addition of the ramdisk-based miniroot. Still needs work.
authordownsj <downsj@openbsd.org>
Sun, 16 Feb 1997 18:19:55 +0000 (18:19 +0000)
committerdownsj <downsj@openbsd.org>
Sun, 16 Feb 1997 18:19:55 +0000 (18:19 +0000)
(Stolen wholesale from mvme68k.)

The miniroot subdir is obsolete, and subject to removal.

21 files changed:
distrib/hp300/HP-IB.geometry
distrib/hp300/Makefile
distrib/hp300/Makefile.inc [new file with mode: 0644]
distrib/hp300/common/dot.commonutils [new file with mode: 0644]
distrib/hp300/common/rdsetroot.c [new file with mode: 0644]
distrib/hp300/common/termcap.hp-vt [new file with mode: 0644]
distrib/hp300/list2sh.awk [new file with mode: 0644]
distrib/hp300/ramdisk/Makefile [new file with mode: 0644]
distrib/hp300/ramdisk/Makefile.inc [new file with mode: 0644]
distrib/hp300/ramdisk/disktab.preinstall [new file with mode: 0644]
distrib/hp300/ramdisk/disktab.shadow [new file with mode: 0644]
distrib/hp300/ramdisk/dot.instutils [new file with mode: 0644]
distrib/hp300/ramdisk/dot.profile [new file with mode: 0644]
distrib/hp300/ramdisk/install.md [new file with mode: 0644]
distrib/hp300/ramdisk/install.sh [new file with mode: 0644]
distrib/hp300/ramdisk/install.sub [new file with mode: 0644]
distrib/hp300/ramdisk/list [new file with mode: 0644]
distrib/hp300/ramdisk/mtree.conf [new file with mode: 0644]
distrib/hp300/ramdisk/raminst.conf [new file with mode: 0644]
distrib/hp300/ramdisk/start_rdconfig.sh [new file with mode: 0644]
distrib/hp300/runlist.sh [new file with mode: 0644]

index b1ce0a4..6dd0e13 100644 (file)
@@ -1,3 +1,4 @@
+       $OpenBSD: HP-IB.geometry,v 1.2 1997/02/16 18:19:55 downsj Exp $
        $NetBSD: HP-IB.geometry,v 1.1 1995/11/17 07:42:29 thorpej Exp $
 
 This file lists disk geometry for several types of HP-IB disks.  These
index 4ebaa58..06b1031 100644 (file)
@@ -1,5 +1,6 @@
-#      $NetBSD: Makefile,v 1.1 1995/10/03 22:47:50 thorpej Exp $
+#      $OpenBSD: Makefile,v 1.2 1997/02/16 18:19:56 downsj Exp $
+#      $NetBSD: Makefile,v 1.2 1995/10/12 21:16:53 gwr Exp $
 
-SUBDIR=        miniroot
+SUBDIR= ramdisk
 
 .include <bsd.subdir.mk>
diff --git a/distrib/hp300/Makefile.inc b/distrib/hp300/Makefile.inc
new file mode 100644 (file)
index 0000000..39f77a6
--- /dev/null
@@ -0,0 +1,11 @@
+#      $OpenBSD: Makefile.inc,v 1.1 1997/02/16 18:19:57 downsj Exp $
+#      $NetBSD: Makefile.inc,v 1.2.6.1 1996/08/29 03:10:06 gwr Exp $
+
+# Revision is 2.0
+REV=   20
+
+LDSTATIC=      -static
+
+# Hack needed to find kernel images...
+BSDSRCDIR?=    /usr/src
+SRCSYSDIR?=    ${BSDSRCDIR}/sys
diff --git a/distrib/hp300/common/dot.commonutils b/distrib/hp300/common/dot.commonutils
new file mode 100644 (file)
index 0000000..29634c2
--- /dev/null
@@ -0,0 +1,111 @@
+#
+#      $OpenBSD: dot.commonutils,v 1.1 1997/02/16 18:19:58 downsj Exp $
+#      $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_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/hp300/common/rdsetroot.c b/distrib/hp300/common/rdsetroot.c
new file mode 100644 (file)
index 0000000..5edc335
--- /dev/null
@@ -0,0 +1,229 @@
+/*     $OpenBSD: rdsetroot.c,v 1.1 1997/02/16 18:19:59 downsj Exp $    */
+/*     $NetBSD: rdsetroot.c,v 1.2 1995/10/13 16:38:39 gwr Exp $        */
+
+/*
+ * Copyright (c) 1994 Gordon W. Ross
+ * 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. 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.
+ */
+
+/*
+ * Copy a ramdisk image into the space reserved for it.
+ * Kernel variables: rd_root_size, rd_root_image
+ */
+
+#include <sys/types.h>
+#include <sys/file.h>
+#include <sys/mman.h>
+
+#include <stdio.h>
+#include <a.out.h>
+
+extern off_t lseek();
+
+struct exec head;
+char *file;
+
+/* Virtual addresses of the symbols we frob. */
+long rd_root_image_va, rd_root_size_va;
+
+/* Offsets relative to start of data segment. */
+long rd_root_image_off, rd_root_size_off;
+
+/* value in the location at rd_root_size_off */
+int rd_root_size_val;
+
+/* pointers to pieces of mapped file */
+char *dataseg;
+
+/* and lengths */
+int data_len;
+int data_off;
+int data_pgoff;
+
+main(argc,argv)
+       char **argv;
+{
+       int fd, n;
+       int *ip;
+       char *cp;
+
+       if (argc < 2) {
+               printf("%s: missing file name\n", argv[0]);
+               exit(1);
+       }
+       file = argv[1];
+
+       fd = open(file, O_RDWR);
+       if (fd < 0) {
+               perror(file);
+               exit(1);
+       }
+
+       n = read(fd, &head, sizeof(head));
+       if (n < sizeof(head)) {
+               printf("%s: reading header\n", file);
+               exit(1);
+       }
+
+       if (N_BADMAG(head)) {
+               printf("%s: bad magic number\n");
+               exit(1);
+       }
+
+#ifdef DEBUG
+       printf(" text:  %9d\n", head.a_text);
+       printf(" data:  %9d\n", head.a_data);
+       printf("  bss:  %9d\n", head.a_bss);
+       printf(" syms:  %9d\n", head.a_syms);
+       printf("entry: 0x%08X\n", head.a_entry);
+       printf("trsiz:  %9d\n", head.a_trsize);
+       printf("drsiz:  %9d\n", head.a_drsize);
+#endif
+
+       if (head.a_syms <= 0) {
+               printf("%s: no symbols\n", file);
+               exit(1);
+       }
+       if (head.a_trsize ||
+               head.a_drsize)
+       {
+               printf("%s: has relocations\n");
+               exit(1);
+       }
+
+       find_rd_root_image(file);
+
+       /*
+        * Map in the whole data segment.
+        * The file offset needs to be page aligned.
+        */
+       data_off = N_DATOFF(head);
+       data_len = head.a_data;
+       /* align... */
+       data_pgoff = N_PAGSIZ(head) - 1;
+       data_pgoff &= data_off;
+       data_off -= data_pgoff;
+       data_len += data_pgoff;
+       /* map in in... */
+       dataseg = mmap(NULL,    /* any address is ok */
+                                  data_len, /* length */
+                                  PROT_READ | PROT_WRITE,
+                                  MAP_SHARED,
+                                  fd, data_off);
+       if ((long)dataseg == -1) {
+               printf("%s: can not map data seg\n", file);
+               perror(file);
+               exit(1);
+       }
+       dataseg += data_pgoff;
+
+       /*
+        * Find value in the location: rd_root_size
+        */
+       ip = (int*) (dataseg + rd_root_size_off);
+       rd_root_size_val = *ip;
+#ifdef DEBUG
+       printf("rd_root_size  val: 0x%08X (%d blocks)\n",
+               rd_root_size_val, (rd_root_size_val >> 9));
+#endif
+
+       /*
+        * Copy the symbol table and string table.
+        */
+#ifdef DEBUG
+       printf("copying root image...\n");
+#endif
+       n = read(0, dataseg + rd_root_image_off,
+                        rd_root_size_val);
+       if (n < 0) {
+               perror("read");
+               exit(1);
+       }
+
+       msync(dataseg - data_pgoff, data_len
+#ifdef sun
+                 ,0
+#endif
+                 );
+
+#ifdef DEBUG
+       printf("...copied %d bytes\n", n);
+#endif
+       close(fd);
+       exit(0);
+}
+
+
+/*
+ * Find locations of the symbols to patch.
+ */
+struct nlist wantsyms[] = {
+       { "_rd_root_size", 0 },
+       { "_rd_root_image", 0 },
+       { NULL, 0 },
+};
+
+find_rd_root_image(file)
+       char *file;
+{
+       int data_va;
+       int std_entry;
+
+       if (nlist(file, wantsyms)) {
+               printf("%s: no rd_root_image symbols?\n", file);
+               exit(1);
+       }
+       std_entry = N_TXTADDR(head) +
+           (head.a_entry & (N_PAGSIZ(head)-1));
+       data_va = N_DATADDR(head);
+       if (head.a_entry != std_entry) {
+               printf("%s: warning: non-standard entry point: 0x%08x\n",
+                          file, head.a_entry);
+               printf("\texpecting entry=0x%X\n", std_entry);
+               data_va += (head.a_entry - std_entry);
+       }
+
+       rd_root_size_off = wantsyms[0].n_value - data_va;
+       rd_root_image_off     = wantsyms[1].n_value - data_va;
+#ifdef DEBUG
+       printf(".data segment  va: 0x%08X\n", data_va);
+       printf("rd_root_size   va: 0x%08X\n", wantsyms[0].n_value);
+       printf("rd_root_image  va: 0x%08X\n", wantsyms[1].n_value);
+       printf("rd_root_size  off: 0x%08X\n", rd_root_size_off);
+       printf("rd_root_image off: 0x%08X\n", rd_root_image_off);
+#endif
+
+       /*
+        * Sanity check locations of db_* symbols
+        */
+       if (rd_root_image_off < 0 || rd_root_image_off >= head.a_data) {
+               printf("%s: rd_root_image not in data segment?\n", file);
+               exit(1);
+       }
+       if (rd_root_size_off < 0 || rd_root_size_off >= head.a_data) {
+               printf("%s: rd_root_size not in data segment?\n", file);
+               exit(1);
+       }
+}
diff --git a/distrib/hp300/common/termcap.hp-vt b/distrib/hp300/common/termcap.hp-vt
new file mode 100644 (file)
index 0000000..df406fc
--- /dev/null
@@ -0,0 +1,134 @@
+#
+#      $OpenBSD: termcap.hp-vt,v 1.1 1997/02/16 18:19:59 downsj Exp $
+#      $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.
+#
+#
+hpansi|hp700|hewlett packard 700/44 in HP-PCterm mode:\
+       :am:eo:xn:xo:\
+       :co#80:li#25:\
+       :@7=\E[4~:RA=\E[?7l:S4=\E[>11h\EPO**x0/65;1/67\E\\:\
+       :S5=\E[>11l\EP1**x0/11;1/13\E[m\E\\:SA=\E[?7h:XF=g:XN=e:\
+       :ac=k\277l\332m\300j\331n\305w\302q\304u\264t\303v\301x\263:\
+       :al=\E[L:bl=^G:bt=\E[Z:cd=\E[J:ce=\E[K:cl=\E[2J\E[H:\
+       :cm=\E[%i%d;%dH:cr=^M:dc=\E[P:dl=\E[M:do=\E[B:ei=:ho=\E[H:\
+       :ic=\E[@:im=:\
+       :is=\E[44"p\E[?7h\E[>10h\E[>12h\EP1;1|3/7F\E\\:\
+       :k1=\E[17~:k2=\E[18~:k3=\E[19~:k4=\E[20~:k5=\E[21~:\
+       :k6=\E[23~:k7=\E[24~:k8=\E[25~:k9=\E[26~:k;=\E[28~:\
+       :kB=\E[Z:kN=\E[6~:kP=\E[5~:kb=^H:kd=\E[B:kh=\E[1~:kl=\E[D:\
+       :kr=\E[C:ku=\E[A:le=\E[D:me=\E[m:nd=\E[C:se=\E[m:sf=^J:\
+       :so=\E[7m:ta=^I:ue=\E[m:up=\E[A:us=\E[4m:ve=\E[?25h:\
+       :vi=\E[?25l:
+hp2392|2392|2393|239x series:\
+       :co#80:\
+       :bt=\Ei:cm=\E&a%dy%dC:cv=\E&a%dY:im=\EQ:k1=\Ep\r:k2=\Eq\r:\
+       :k3=\Er\r:k4=\Es\r:k5=\Et\r:k6=\Eu\r:k7=\Ev\r:k8=\Ew\r:\
+       :kF=\EU:kN=\Eu:kP=\Ev:kR=\EV:kh=\Eh:ue=\E&d@:us=\E&dD:\
+       :tc=hpsub:
+hpsub|hp terminals -- capability subset:\
+       :am:da:db:mi:xo:xs:\
+       :li#24:\
+       :al=\EL:bl=^G:cd=\EJ:ce=\EK:ch=\E&a%dC:cl=\EH\EJ:cr=^M:\
+       :dc=\EP:dl=\EM:do=\EB:ei=\ER:if=/usr/share/tabset/stdcrt:\
+       :is=\E&s1A\E<\E&k0\\:kb=^H:kd=\EB:ke=\E&s0A:kh=\Eh:kl=\ED:\
+       :kr=\EC:ks=\E&s1A:ku=\EA:le=^H:me=\E&d@:nd=\EC:se=\E&d@:\
+       :sf=^J:so=\E&dB:ta=^I:up=\EA:
+hpex|hp extended capabilites:\
+       :cm=\E&a%dy%dC:cr=^M:cv=\E&a%dY:do=^J:im=\EQ:kb=^H:kd=^J:\
+       :kl=^H:nw=^M^J:sf=^J:ta=^I:ue=\E&d@:us=\E&dD:\
+       :tc=hpsub:
+hp300h|HP Catseye console:\
+       :am:da:db:mi:xs:\
+       :co#128:li#51:lm#0:sg#0:\
+       :al=\EL:bl=^G:bt=\Ei:cd=\EJ:ce=\EK:ch=\E&a%dC:\
+       :cl=\E&a0y0C\EJ:cm=\E&a%dy%dC:cr=^M:ct=\E3:cv=\E&a%dY:\
+       :dc=\EP:dl=\EM:do=\EB:ei=\ER:if=/usr/share/tabset/stdcrt:\
+       :im=\EQ:kb=^H:kd=\EB:ke=\E&s0A:kh=\Eh:kl=\ED:kr=\EC:\
+       :ks=\E&s1A:ku=\EA:le=^H:me=\E&d@:nd=\EC:se=\E&d@:sf=^J:\
+       :so=\E&dB:ta=^I:ue=\E&d@:up=\EA:us=\E&dD:
+hp700-wy|HP700/41 emulating wyse30:\
+       :am:bw:mi:ms:\
+       :co#80:it#8:li#24:sg#1:ug#1:\
+       :al=0.7*\EE:bt=\EI:cd=\EY:ce=10\ET:cl=^Z:cm=\E=%+ %+ :\
+       :cr=^M:ct=\E0:cv=\E[%+ :dc=\EW:dl=\ER:do=^V:ei=\Er:ho=^^:\
+       :i1=\E~"\EC\Er\E(\EG0\003\E`9\E`1:\
+       :if=/usr/share/tabset/stdcrt:im=\Eq:kB=\EI:kC=^Z:kE=\ET:\
+       :kI=\Eq:kM=\Er:kS=\EY:kT=\EI:kb=\177:kd=^V:kh=^^:kl=^H:kr=^L:\
+       :ku=^K:le=^H:ll=^^^K:me=10\EG0:nd=^L:se=10\EG0:so=10\EG4:\
+       :sr=\Ej:st=\E1:ta=^I:ue=10\EG0:up=^K:us=10\EG8:
+hp70092|70092a|70092A|hp70092a|hp70092A|HP 700/92:\
+       :am:da:db:xs:\
+       :Nl#8:co#80:lh#2:li#24:lm#0:lw#8:\
+       :LF=\E&j@:LO=\E&jB:ac=:ae=^O:al=\EL:as=^N:bl=^G:bt=\Ei:\
+       :ce=\EK:ch=\E&a%dC:cl=\E&a0y0C\EJ:cm=\E&a%dy%dC:cr=^M:\
+       :ct=\E3:cv=\E&a%dY:dc=\EP:dl=\EM:do=\EB:ei=\ER:im=\EQ:\
+       :k1=\Ep:k2=\Eq:k3=\Er:k4=\Es:k5=\Et:k6=\Eu:k7=\Ev:k8=\Ew:\
+       :kA=\EL:kC=\EJ:kD=\EP:kE=\EK:kF=\ES:kH=\EF:kI=\EQ:kL=\EM:\
+       :kM=\ER:kN=\EU:kP=\EV:kR=\ET:kS=\EJ:kT=\E1:ka=\E3:kb=^H:\
+       :kd=\EB:ke=\E&s0A:kh=\Eh:kl=\ED:kr=\EC:ks=\E&s1A:kt=\E2:\
+       :ku=\EA:le=^H:mb=\E&dA:md=\E&dB:me=\E&d@:mh=\E&dH:mr=\E&dB:\
+       :nd=\EC:se=\E&d@:so=\E&dJ:sr=\ET:st=\E1:ta=^I:ue=\E&d@:\
+       :up=\EA:us=\E&dD:
+#
+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/hp300/list2sh.awk b/distrib/hp300/list2sh.awk
new file mode 100644 (file)
index 0000000..b48b9e4
--- /dev/null
@@ -0,0 +1,40 @@
+#      $OpenBSD: list2sh.awk,v 1.1 1997/02/16 18:19:57 downsj Exp $
+#      $NetBSD: list2sh.awk,v 1.1 1995/07/18 04:12:59 briggs Exp $
+
+BEGIN {
+       printf("cd ${CURDIR}\n");
+       printf("\n");
+}
+/^$/ || /^#/ {
+       print $0;
+       next;
+}
+$1 == "COPY" {
+       printf("echo '%s'\n", $0);
+       printf("cp %s ${TARGDIR}/%s\n", $2, $3);
+       next;
+}
+$1 == "LINK" {
+       printf("echo '%s'\n", $0);
+       printf("(cd ${TARGDIR}; ln %s %s)\n", $2, $3);
+       next;
+}
+$1 == "SPECIAL" {
+       printf("echo '%s'\n", $0);
+       printf("(cd ${TARGDIR};");
+       for (i = 2; i <= NF; i++)
+               printf(" %s", $i);
+       printf(")\n");
+       next;
+}
+{
+       printf("echo '%s'\n", $0);
+       printf("echo 'Unknown keyword \"%s\" at line %d of input.'\n", $1, NR);
+       printf("exit 1\n");
+       exit 1;
+}
+END {
+       printf("\n");
+       printf("exit 0\n");
+       exit 0;
+}
diff --git a/distrib/hp300/ramdisk/Makefile b/distrib/hp300/ramdisk/Makefile
new file mode 100644 (file)
index 0000000..681081c
--- /dev/null
@@ -0,0 +1,77 @@
+#      $OpenBSD: Makefile,v 1.1 1997/02/16 18:20:00 downsj Exp $
+#      $NetBSD: Makefile,v 1.1 1995/07/18 04:13:06 briggs Exp $
+
+TOP=           ${.CURDIR}/..
+
+.include "${TOP}/Makefile.inc"
+IMAGE=         miniroot-${REV}.fs
+CRUNCHCONF?=    ${.CURDIR}/${CBIN}.conf
+BASE=miniroot
+
+MOUNT_POINT=   /mnt1
+BDEV=          /dev/rd0a
+CDEV=          /dev/rrd0a
+RDEV=          /dev/rd0c
+
+KERNEL=                ${SRCSYSDIR}/arch/hp300/compile/MINIROOT/bsd
+
+all: ${CBIN} ${IMAGE}
+       @echo "all done"
+
+.include "Makefile.inc"
+
+DISKTYPE=       rdroot
+NBLKS=          4096
+# old format, minfree, opt, b/i  trks, sects, cpg
+#NEWFSARGS= -t ffs -m 0 -o space -u 32 -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
+
+rdsetroot:     ${TOP}/common/rdsetroot.c
+       ${HOSTCC} -o rdsetroot ${TOP}/common/rdsetroot.c
+
+setroot: ${IMAGE} bsd 
+       ${.CURDIR}/${__objdir}/rdsetroot bsd < ${IMAGE}
+
+bsd:   ${KERNEL}
+       cp ${KERNEL} bsd
+
+writetape:
+       echo rewinding tape < /dev/rst0
+       buffer -i /usr/mdec/stboot -o /dev/nrst0
+       buffer -i /usr/mdec/bootst -o /dev/nrst0
+       buffer -B -p75 -i bsd -o /dev/nrst0
+       echo rewinding tape < /dev/rst0
+
+
+do_prep: ${CBIN} do_unconfig
+       sh ${.CURDIR}/start_rdconfig.sh ${RDEV} ${NBLKS}
+       disklabel -w -r ${RDEV} ${DISKTYPE}
+       
+do_mount:
+       -newfs ${NEWFSARGS} -s ${NBLKS} ${CDEV} ${DISKTYPE}
+       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/hp300/ramdisk/Makefile.inc b/distrib/hp300/ramdisk/Makefile.inc
new file mode 100644 (file)
index 0000000..c7eb7ca
--- /dev/null
@@ -0,0 +1,32 @@
+#
+#      $OpenBSD: Makefile.inc,v 1.1 1997/02/16 18:20:01 downsj Exp $
+#      $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}/ramdisk
+
+MOUNT_POINT?=  ${TOP}/${BASE}/fs
+
+LISTS=         ${.CURDIR}/list
+CRUNCHCONF?=   ${COMMONDIR}/${CBIN}.conf
+MTREE=         ${COMMONDIR}/mtree.conf
+
+${CBIN}.mk ${CBIN}.cache ${CBIN}.c: ${CRUNCHCONF}
+       crunchgen -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/hp300/ramdisk/disktab.preinstall b/distrib/hp300/ramdisk/disktab.preinstall
new file mode 100644 (file)
index 0000000..82d1ab7
--- /dev/null
@@ -0,0 +1,33 @@
+#
+#      $OpenBSD: disktab.preinstall,v 1.1 1997/02/16 18:20:01 downsj Exp $
+#      $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/hp300/ramdisk/disktab.shadow b/distrib/hp300/ramdisk/disktab.shadow
new file mode 100644 (file)
index 0000000..696963b
--- /dev/null
@@ -0,0 +1,33 @@
+#
+#      $OpenBSD: disktab.shadow,v 1.1 1997/02/16 18:20:02 downsj Exp $
+#      $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/hp300/ramdisk/dot.instutils b/distrib/hp300/ramdisk/dot.instutils
new file mode 100644 (file)
index 0000000..8f4fddc
--- /dev/null
@@ -0,0 +1,157 @@
+#
+#      $OpenBSD: dot.instutils,v 1.1 1997/02/16 18:20:02 downsj Exp $
+#      $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    "\a"
+       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    "\a"
+               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/hp300/ramdisk/dot.profile b/distrib/hp300/ramdisk/dot.profile
new file mode 100644 (file)
index 0000000..4c5987b
--- /dev/null
@@ -0,0 +1,50 @@
+#
+#      $OpenBSD: dot.profile,v 1.1 1997/02/16 18:20:03 downsj Exp $
+#      $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.
+#
+
+PATH=/sbin:/bin:/usr/bin:/usr/sbin:/
+export PATH
+TERM=vt200
+export TERM
+
+# 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.
+umask 022
+install
diff --git a/distrib/hp300/ramdisk/install.md b/distrib/hp300/ramdisk/install.md
new file mode 100644 (file)
index 0000000..10b6e98
--- /dev/null
@@ -0,0 +1,266 @@
+#       $OpenBSD: install.md,v 1.1 1997/02/16 18:20:03 downsj 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_get_diskdevs() {
+       egrep "^sd[0-9] " < /kern/msgbuf
+}
+
+md_get_cddevs() {
+       egrep "^cd[0-9] " < /kern/msgbuf
+}
+
+md_get_ifdevs() {                                                         
+        # return available network devices                               
+       egrep "(^ie[0-9] )|(^le[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 "Nothing to do."
+}
+md_labeldisk() {
+       echo "huh"
+}
+
+
+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_checkfordisklabel $_disk
+       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/hp300 ${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/hp300 ${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_makerootwritable() {
+
+       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/hp300/ramdisk/install.sh b/distrib/hp300/ramdisk/install.sh
new file mode 100644 (file)
index 0000000..f66aaa2
--- /dev/null
@@ -0,0 +1,410 @@
+#!/bin/sh
+#      $OpenBSD: install.sh,v 1.1 1997/02/16 18:20:03 downsj Exp $
+#      $NetBSD: install.sh,v 1.5.2.8 1996/08/27 18:15:05 gwr Exp $
+#
+# Copyright (c) 1996 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# This code is derived from software contributed to The NetBSD Foundation
+# by Jason R. Thorpe.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+#    must display the following acknowledgement:
+#        This product includes software developed by the NetBSD
+#        Foundation, Inc. and its contributors.
+# 4. Neither the name of The NetBSD Foundation nor the names of its
+#    contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+#      OpenBSD installation script.
+#      In a perfect world, this would be a nice C program, with a reasonable
+#      user interface.
+
+FILESYSTEMS="/tmp/filesystems"         # used thoughout
+FQDN=""                                        # domain name
+
+trap "umount /tmp >> /dev/null 2>&1" 0
+
+MODE="install"
+
+# include machine-dependent functions
+# The following functions must be provided:
+#      md_copy_kernel()        - copy a kernel to the installed disk
+#      md_get_diskdevs()       - return available disk devices
+#      md_get_cddevs()         - return available CD-ROM devices
+#      md_get_ifdevs()         - return available network interfaces
+#      md_get_partition_range() - return range of valid partition letters
+#      md_installboot()        - install boot-blocks on disk
+#      md_labeldisk()          - put label on a disk
+#      md_prep_disklabel()     - label the root disk
+#      md_welcome_banner()     - display friendly message
+#      md_not_going_to_install() - display friendly message
+#      md_congrats()           - display friendly message
+#      md_native_fstype()      - native filesystem type for disk installs
+#      md_native_fsopts()      - native filesystem options for disk installs
+#      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
+       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/hp300/ramdisk/install.sub b/distrib/hp300/ramdisk/install.sub
new file mode 100644 (file)
index 0000000..18e836f
--- /dev/null
@@ -0,0 +1,1331 @@
+#!/bin/sh
+#      $OpenBSD: install.sub,v 1.1 1997/02/16 18:20:04 downsj 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
+
+ALLSETS="base comp etc games man misc text"    # default install sets
+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 NetBSD 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] "
+                               _next=""
+                       else
+                               echo -n "    "
+                               if [ -z "$_next" ]; then _next=$_f; fi
+                       fi
+                       echo $_f
+               done
+               echo ""
+
+               # Get the name of the file.
+               if [ "X$_next" = "X" ]; then resp=n; else resp=y; fi
+               echo -n "Continue extraction [$resp]?"
+               getresp "$resp"
+               if [ "$resp" = "n" ]; then
+                       break
+               fi
+
+               echo -n "File name [$_next]? "
+               getresp "$_next"
+               _f=$resp
+               _filename="/$1/$_f"
+
+               # Ensure file exists
+               if [ ! -f $_filename ]; then
+                       echo "File $_filename does not exist.  Check to make"
+                       echo "sure you entered the information properly."
+                       continue
+               fi
+
+               # Extract file
+               cat $_filename | (cd /mnt; tar --unlink -zxvpf -)
+               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="tar --unlink -zxvpf -"
+                       ;;
+
+               2)
+                       _xcmd="tar --unlink -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".
+
+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/hp300/ramdisk/list b/distrib/hp300/ramdisk/list
new file mode 100644 (file)
index 0000000..e679456
--- /dev/null
@@ -0,0 +1,90 @@
+#      $OpenBSD: list,v 1.1 1997/02/16 18:20:05 downsj Exp $
+
+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/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_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}/common/dot.commonutils        .commonutils
+COPY   ${TOPDIR}/common/termcap.hp-vt  usr/share/misc/termcap
+
+# 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/hp300/ramdisk/mtree.conf b/distrib/hp300/ramdisk/mtree.conf
new file mode 100644 (file)
index 0000000..dd3b013
--- /dev/null
@@ -0,0 +1,80 @@
+#
+#      $OpenBSD: mtree.conf,v 1.1 1997/02/16 18:20:05 downsj Exp $
+#      $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/hp300/ramdisk/raminst.conf b/distrib/hp300/ramdisk/raminst.conf
new file mode 100644 (file)
index 0000000..00e66ad
--- /dev/null
@@ -0,0 +1,26 @@
+#
+#      $OpenBSD: raminst.conf,v 1.1 1997/02/16 18:20:05 downsj Exp $
+#      $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 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/hp300/ramdisk/start_rdconfig.sh b/distrib/hp300/ramdisk/start_rdconfig.sh
new file mode 100644 (file)
index 0000000..d22552b
--- /dev/null
@@ -0,0 +1,4 @@
+echo rdconfig ${1} ${2}
+rdconfig ${1} ${2} &
+echo  $! >rd.pid 
+
diff --git a/distrib/hp300/runlist.sh b/distrib/hp300/runlist.sh
new file mode 100644 (file)
index 0000000..05a67ab
--- /dev/null
@@ -0,0 +1,14 @@
+#      $OpenBSD: runlist.sh,v 1.1 1997/02/16 18:19:57 downsj Exp $
+#      $NetBSD: runlist.sh,v 1.1 1995/07/18 04:13:01 briggs Exp $
+
+if [ "X$1" = "X-d" ]; then
+       SHELLCMD=cat
+       shift
+else
+       SHELLCMD="sh"
+fi
+
+( while [ "X$1" != "X" ]; do
+       cat $1
+       shift
+done ) | awk -f ${TOPDIR}/list2sh.awk | ${SHELLCMD}