summaryrefslogtreecommitdiff
path: root/distrib
diff options
context:
space:
mode:
authorNiklas Hallqvist <niklas@cvs.openbsd.org>1997-05-07 12:46:59 +0000
committerNiklas Hallqvist <niklas@cvs.openbsd.org>1997-05-07 12:46:59 +0000
commitd48e8aff47b9a89c1a3e6143764547a3ae49ec02 (patch)
treec990088fafe82f4f70d779f4666189af9a72961a /distrib
parent1a826585c4670a8614850f07dd07676af8842ded (diff)
*Very* rough cut at a ramdisk-kernel that fits onto a floppy.
The ecoffrdsetroot support is from millert@openbsd.org. Mostly copied from the powerpc ports, thus a lot of powerpc specific stuff remains. Needs a lot of work, hopefully done in the next few days.
Diffstat (limited to 'distrib')
-rw-r--r--distrib/alpha/Makefile5
-rw-r--r--distrib/alpha/Makefile.inc3
-rw-r--r--distrib/alpha/ecoffrdsetroot.c212
-rw-r--r--distrib/alpha/inst-common/Makefile.inc31
-rw-r--r--distrib/alpha/inst-common/dot.commonutils129
-rw-r--r--distrib/alpha/inst-common/list81
-rw-r--r--distrib/alpha/inst-common/mtree.conf79
-rw-r--r--distrib/alpha/inst-common/raminst.conf23
-rw-r--r--distrib/alpha/inst-common/termcap.vt67
-rw-r--r--distrib/alpha/list2sh.awk39
-rw-r--r--distrib/alpha/ramdisk/Makefile62
-rw-r--r--distrib/alpha/ramdisk/disktab.preinstall32
-rw-r--r--distrib/alpha/ramdisk/disktab.shadow32
-rw-r--r--distrib/alpha/ramdisk/dot.instutils154
-rw-r--r--distrib/alpha/ramdisk/dot.profile49
-rw-r--r--distrib/alpha/ramdisk/install.md267
-rw-r--r--distrib/alpha/ramdisk/install.sh413
-rw-r--r--distrib/alpha/ramdisk/install.sub1335
-rw-r--r--distrib/alpha/ramdisk/list15
-rw-r--r--distrib/alpha/ramdisk/raminst.conf28
-rw-r--r--distrib/alpha/runlist.sh13
21 files changed, 3069 insertions, 0 deletions
diff --git a/distrib/alpha/Makefile b/distrib/alpha/Makefile
new file mode 100644
index 00000000000..6d855cc5f47
--- /dev/null
+++ b/distrib/alpha/Makefile
@@ -0,0 +1,5 @@
+# $OpenBSD: Makefile,v 1.1 1997/05/07 12:46:49 niklas Exp $
+
+SUBDIR= ramdisk simpleroot
+
+.include <bsd.subdir.mk>
diff --git a/distrib/alpha/Makefile.inc b/distrib/alpha/Makefile.inc
new file mode 100644
index 00000000000..bd889a0c9b1
--- /dev/null
+++ b/distrib/alpha/Makefile.inc
@@ -0,0 +1,3 @@
+# $OpenBSD: Makefile.inc,v 1.1 1997/05/07 12:46:49 niklas Exp $
+
+REV=21
diff --git a/distrib/alpha/ecoffrdsetroot.c b/distrib/alpha/ecoffrdsetroot.c
new file mode 100644
index 00000000000..5997ee9a726
--- /dev/null
+++ b/distrib/alpha/ecoffrdsetroot.c
@@ -0,0 +1,212 @@
+/* $OpenBSD: ecoffrdsetroot.c,v 1.1 1997/05/07 12:46:49 niklas Exp $ */
+
+/*
+ * Copyright (c) 1997 Todd C. Milller
+ * 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 <err.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <sys/types.h>
+#include <sys/file.h>
+#include <sys/mman.h>
+#include <sys/exec_ecoff.h>
+#include <nlist.h>
+
+void find_rd_root_image __P((char *));
+
+struct ecoff_exechdr 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;
+
+/*
+ * To find locations of the symbols to patch.
+ */
+struct nlist wantsyms[] = {
+ { "_rd_root_size", 0 },
+ { "_rd_root_image", 0 },
+ { NULL, 0 },
+};
+
+int
+main(argc,argv)
+ int argc;
+ char **argv;
+{
+ int fd, n;
+ int *ip;
+ char *cp;
+
+ if (argc < 2)
+ errx(1, "missing file name");
+ file = argv[1];
+
+ fd = open(file, O_RDWR);
+ if (fd < 0)
+ err(1, "open %s", file);
+
+ n = read(fd, &head, sizeof(head));
+ if (n < sizeof(head))
+ errx(1, "%s: short read reading header", file);
+
+ if (head.a.magic != ECOFF_OMAGIC)
+ errx(1, "%s: bad magic number (0%o)", file, head.a.magic);
+
+#ifdef DEBUG
+ (void)printf("ecoff header\n");
+ (void)printf(" nscns: %9ld\n", head.f.f_nscns); */
+ (void)printf("timdat: %9ld\n", head.f.f_timdat); */
+ (void)printf("symptr: %9ld\n", head.f.f_symptr); */
+ (void)printf(" nsyms: %9ld\n", head.f.f_nsyms); */
+ (void)printf("opthdr: %9ld\n", head.f.f_opthdr); */
+ (void)printf(" flags: %9ld\n", head.f.f_flags); */
+ (void)printf("a.out header\n");
+ (void)printf("vstamp: %9ld\n", head.a.vstamp);
+ (void)printf(" tsize: %9ld\n", head.a.tsize);
+ (void)printf(" dsize: %9ld\n", head.a.dsize);
+ (void)printf(" bsize: %9ld\n", head.a.bsize);
+ (void)printf(" entry: 0x%08X\n", head.a.entry);
+ (void)printf(" text: %9ld\n", head.a.text_start);
+ (void)printf(" data: %9ld\n", head.a.data_start);
+ (void)printf(" bss: %9ld\n", head.a.bss_start);
+#endif
+
+ if (head.f.f_nsyms <= 0)
+ errx(1, "%s: no symbols", file);
+
+ find_rd_root_image(file);
+
+ /*
+ * Map in the whole data segment.
+ * The file offset needs to be page aligned.
+ */
+ data_off = ECOFF_DATOFF(&head);
+ data_len = head.a.dsize;
+#if 0
+ /* align... */
+ data_pgoff = N_PAGSIZ(head) - 1;
+ data_pgoff &= data_off;
+ data_off -= data_pgoff;
+ data_len += data_pgoff;
+#endif
+ /* 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)
+ err(1, "%s: can not map data seg", file);
+#if 0
+ dataseg += data_pgoff;
+#endif
+
+ /*
+ * Find value in the location: rd_root_size
+ */
+ ip = (int *) (dataseg + rd_root_size_off);
+ rd_root_size_val = *ip;
+#ifdef DEBUG
+ (void)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
+ (void)printf("copying root image...\n");
+#endif
+ n = read(0, dataseg + rd_root_image_off, rd_root_size_val);
+ if (n < 0)
+ err(1, "read root image");
+
+ msync(dataseg - data_pgoff, data_len
+#ifdef sun
+ ,0
+#endif
+ );
+
+#ifdef DEBUG
+ (void)printf("...copied %d bytes\n", n);
+#endif
+ (void)close(fd);
+ exit(0);
+}
+
+
+void
+find_rd_root_image(file)
+ char *file;
+{
+ u_long data_va = head.a.data_start;
+
+ if (nlist(file, wantsyms))
+ errx(1, "%s: no rd_root_image symbols?", file);
+
+ rd_root_size_off = wantsyms[0].n_value - data_va;
+ rd_root_image_off = wantsyms[1].n_value - data_va;
+#ifdef DEBUG
+ (void)printf(".data segment va: 0x%08X\n", data_va);
+ (void)printf("rd_root_size va: 0x%08X\n", wantsyms[0].n_value);
+ (void)printf("rd_root_image va: 0x%08X\n", wantsyms[1].n_value);
+ (void)printf("rd_root_size off: 0x%08X\n", rd_root_size_off);
+ (void)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_start)
+ errx(1, "%s: rd_root_image not in data segment?", file);
+ if (rd_root_size_off < 0 || rd_root_size_off >= head.a.data_start)
+ errx(1, "%s: rd_root_size not in data segment?", file);
+}
diff --git a/distrib/alpha/inst-common/Makefile.inc b/distrib/alpha/inst-common/Makefile.inc
new file mode 100644
index 00000000000..4e52e3081d8
--- /dev/null
+++ b/distrib/alpha/inst-common/Makefile.inc
@@ -0,0 +1,31 @@
+#
+# $OpenBSD: Makefile.inc,v 1.1 1997/05/07 12:46:51 niklas Exp $
+#
+
+# TOP is assumed to be defined by Makefile including this one.
+
+CBIN?= raminst
+COMMONDIR= ${TOP}/inst-common
+
+MOUNT_POINT?= ${TOP}/${BASE}/fs
+
+LISTS= ${COMMONDIR}/list ${.CURDIR}/list
+CRUNCHCONF?= ${COMMONDIR}/${CBIN}.conf
+MTREE= ${COMMONDIR}/mtree.conf
+
+${CBIN}.mk ${CBIN}.cache ${CBIN}.c: ${CRUNCHCONF}
+ crunchgen -E -D ${BSDSRCDIR} -L ${DESTDIR}/usr/lib ${CRUNCHCONF}
+
+${CBIN}: ${CBIN}.mk ${CBIN}.cache ${CBIN}.c
+ make -f ${CBIN}.mk all
+
+do_files:
+ mtree -def ${MTREE} -p ${MOUNT_POINT}/ -u
+ TOPDIR=${TOP} CURDIR=${.CURDIR} OBJDIR=${.OBJDIR} \
+ TARGDIR=${MOUNT_POINT} sh ${TOP}/runlist.sh ${LISTS}
+
+clean cleandir:
+ /bin/rm -f core ${IMAGE} ${CBIN} ${CBIN}.mk ${CBIN}.cache *.o *.lo *.c
+
+.include <bsd.obj.mk>
+.include <bsd.subdir.mk>
diff --git a/distrib/alpha/inst-common/dot.commonutils b/distrib/alpha/inst-common/dot.commonutils
new file mode 100644
index 00000000000..cbaf182de9d
--- /dev/null
+++ b/distrib/alpha/inst-common/dot.commonutils
@@ -0,0 +1,129 @@
+#
+# $OpenBSD: dot.commonutils,v 1.1 1997/05/07 12:46:52 niklas Exp $
+#
+# Copyright (c) 1994 Christopher G. Demetriou
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+# must display the following acknowledgement:
+# This product includes software developed by Christopher G. Demetriou.
+# 4. The name of the author may not be used to endorse or promote products
+# derived from this software without specific prior written permission
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+# Installation utilites (functions), to get NetBSD installed on
+# the hard disk. These are meant to be invoked from the shell prompt,
+# by people installing NetBSD.
+
+Set_tmp_dir()
+{
+ def_tmp_dir=`pwd`
+ if [ "$def_tmp_dir" = "/" -o "$def_tmp_dir" = "/mnt" ]; then
+ def_tmp_dir=/mnt/usr/distrib
+ fi
+
+ echo -n "What directory should be used to find and/or store "
+ echo "installtion"
+ echo -n "files? [$def_tmp_dir] "
+ read tmp_dir
+ if [ "$tmp_dir" = "" ]; then
+ tmp_dir=$def_tmp_dir
+ fi
+ if [ ! -d "$tmp_dir" ]; then
+ /bin/rm -rf $tmp_dir
+ mkdir -p $tmp_dir
+ fi
+}
+
+Tmp_dir()
+{
+ if [ "$tmp_dir" = "" ]; then
+ Set_tmp_dir
+ fi
+ cd $tmp_dir
+}
+
+Load_fd()
+{
+ Tmp_dir
+ which=
+ while [ "$which" != "a" -a "$which" != "b" ]; do
+ echo -n "Read from which floppy drive ('a' or 'b')? [a] "
+ read which
+ if [ "X$which" = "X" ]; then
+ which=a
+ fi
+ done
+ while echo -n "Insert floppy (hit ^C to terminate, enter to load): "
+ do
+ mount -t msdos /dev/fd0$which /mnt2
+ cp -rp /mnt2/* .
+ umount /mnt2
+ done
+}
+
+Load_tape()
+{
+ Tmp_dir
+ echo -n "Which tape drive will you be using? [rst0] "
+ read which
+ if [ "X$which" = "X" ]; then
+ which=rst0
+ fi
+ echo -n "Insert the tape into the tape drive and hit return to "
+ echo -n "continue..."
+ read foo
+ echo "Extracting files from the tape..."
+ tar xvfp /dev/$which
+ echo "Done."
+}
+
+Extract()
+{
+ Tmp_dir
+ echo -n "Would you like to list the files as they're extracted? [n] "
+ read verbose
+ case $verbose in
+ y*|Y*)
+ tarverbose=v
+ ;;
+ *)
+ tarverbose=
+ ;;
+ esac
+ echo -n "Are you installing a '-current' snapshot? [n] "
+ read snapshot
+ case $snapshot in
+ y*|Y*)
+ snapshot=y
+ ;;
+ *)
+ snapshot=n
+ ;;
+ esac
+ if [ $snapshot = n ]
+ then
+ cat "$1".??? | gunzip | (cd / ; tar xfp$tarverbose -)
+ else
+ cat "$1".tar.gz | gunzip | (cd /mnt ; tar xfp$tarverbose -)
+ fi
+}
diff --git a/distrib/alpha/inst-common/list b/distrib/alpha/inst-common/list
new file mode 100644
index 00000000000..a2bd15ed010
--- /dev/null
+++ b/distrib/alpha/inst-common/list
@@ -0,0 +1,81 @@
+#
+# $OpenBSD: list,v 1.1 1997/05/07 12:46:52 niklas Exp $
+#
+
+# copy the crunched binary, link to it, and kill it
+COPY ${OBJDIR}/raminst raminst
+LINK raminst bin/cat
+LINK raminst bin/chmod
+LINK raminst bin/cp
+LINK raminst bin/df
+LINK raminst bin/dd
+LINK raminst bin/ed
+LINK raminst bin/expr
+LINK raminst bin/ln
+LINK raminst bin/ls
+LINK raminst bin/kill
+LINK raminst bin/hostname
+LINK raminst bin/mkdir
+LINK raminst bin/mv
+LINK raminst bin/pwd
+LINK raminst bin/rm
+#COPY ${OBJDIR}/sh bin/sh
+LINK raminst bin/sh
+LINK bin/sh bin/-sh
+LINK raminst bin/stty
+LINK raminst bin/sleep
+LINK raminst bin/sync
+LINK raminst bin/test
+LINK raminst bin/[
+LINK raminst sbin/disklabel
+LINK raminst sbin/fdisk
+LINK raminst sbin/fsck
+LINK raminst sbin/halt
+LINK raminst sbin/ifconfig
+LINK raminst sbin/init
+LINK raminst sbin/mknod
+LINK raminst sbin/mount
+LINK raminst sbin/mount_cd9660
+LINK raminst sbin/mount_ffs
+LINK raminst sbin/mount_msdos
+LINK raminst sbin/mount_kernfs
+LINK raminst sbin/mount_nfs
+LINK raminst sbin/mount_mfs
+LINK raminst sbin/newfs
+LINK raminst sbin/reboot
+LINK raminst sbin/route
+LINK raminst sbin/slattach
+LINK raminst sbin/umount
+LINK raminst usr/bin/chgrp
+LINK raminst usr/bin/cut
+LINK raminst usr/bin/ftp
+LINK raminst usr/bin/egrep
+LINK raminst usr/bin/grep
+LINK raminst usr/bin/gzip
+LINK raminst usr/bin/more
+LINK raminst usr/bin/sed
+LINK raminst usr/bin/sort
+LINK raminst usr/bin/pax
+LINK raminst usr/bin/tip
+LINK raminst usr/sbin/chown
+SPECIAL /bin/rm raminst
+
+# copy the MAKEDEV script and make some devices
+COPY ${DESTDIR}/dev/MAKEDEV dev/MAKEDEV
+SPECIAL cd dev; sh MAKEDEV raminst
+
+# we need the contents of /usr/mdec (XXX)
+# COPY ${DESTDIR}/usr/mdec/* usr/mdec
+
+# various files that we need in /etc for the install
+COPY ${DESTDIR}/etc/group etc
+COPY ${DESTDIR}/etc/master.passwd etc
+COPY ${DESTDIR}/etc/passwd etc
+COPY ${DESTDIR}/etc/protocols etc
+COPY ${DESTDIR}/etc/pwd.db etc
+COPY ${DESTDIR}/etc/services etc
+COPY ${DESTDIR}/etc/spwd.db etc
+
+# and the common installation tools
+COPY ${TOPDIR}/inst-common/dot.commonutils .commonutils
+COPY ${TOPDIR}/inst-common/termcap.vt usr/share/misc/termcap
diff --git a/distrib/alpha/inst-common/mtree.conf b/distrib/alpha/inst-common/mtree.conf
new file mode 100644
index 00000000000..3cdab3cbc97
--- /dev/null
+++ b/distrib/alpha/inst-common/mtree.conf
@@ -0,0 +1,79 @@
+#
+# $OpenBSD: mtree.conf,v 1.1 1997/05/07 12:46:52 niklas 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/alpha/inst-common/raminst.conf b/distrib/alpha/inst-common/raminst.conf
new file mode 100644
index 00000000000..daa1cba3e18
--- /dev/null
+++ b/distrib/alpha/inst-common/raminst.conf
@@ -0,0 +1,23 @@
+#
+# $OpenBSD: raminst.conf,v 1.1 1997/05/07 12:46:53 niklas Exp $
+#
+# ram.conf - unified binary for the RAM disk
+#
+
+srcdirs bin sbin usr.bin usr.sbin
+srcdirs gnu/usr.bin
+
+progs cat chmod chown chroot cp dd df disklabel ed expr fdisk fsck_ffs ftp
+progs gzip ifconfig init ln ls mkdir mknod more mount mount_cd9660
+progs mount_ffs mount_msdos mount_nfs mv newfs printf pwd reboot rm route
+progs sed sh shutdown slattach strings stty sync pax test tip umount # update
+
+ln chown chgrp
+ln fsck_ffs fsck
+ln gzip gzcat gunzip
+ln sh -sh # init invokes the shell this way
+ln test [
+ln mount_ffs ffs
+ln newfs mount_mfs
+
+libs -ledit -lutil -ltermcap -lcompat -ll -lm -lz
diff --git a/distrib/alpha/inst-common/termcap.vt b/distrib/alpha/inst-common/termcap.vt
new file mode 100644
index 00000000000..a75712f23ed
--- /dev/null
+++ b/distrib/alpha/inst-common/termcap.vt
@@ -0,0 +1,67 @@
+#
+# $OpenBSD: termcap.vt,v 1.1 1997/05/07 12:46:53 niklas Exp $
+#
+# Copyright (c) 1980, 1985, 1989 The Regents of the University of California.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+# must display the following acknowledgement:
+# This product includes software developed by the University of
+# California, Berkeley and its contributors.
+# 4. Neither the name of the University nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# @(#)termcap.src 5.109 (Berkeley) 3/8/93
+#
+vt200|vt220|dec-vt220|vt200-js|vt220-js|dec vt200 series with jump scroll:\
+ :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:LE=\E[%dD:\
+ :RI=\E[%dC:UP=\E[%dA:ae=^O:al=\E[L:as=^N:ct=\E[3g:dc=\E[P:dl=\E[M:\
+ :ei=\E[4l:im=\E[4h:k1=\E[17~:k2=\E[18~:k3=\E[19~:k4=\E[20~:\
+ :k5=\E[21~:k6=\E[23~:k7=\E[24~:k8=\E[25~:kD=\E[3~:kH=\E[4~:\
+ :kI=\E[2~:kN=\E[6~:kP=\E[5~:kb=\177:kh=\E[1~:km:mi:ms:\
+ :if=/usr/share/tabset/vt100:se=\E[27m:st=\EH:ue=\E[24m:\
+ :tc=vt100:
+vt100|dec-vt100|vt100-am|vt100am|dec vt100:\
+ :bl=^G:cr=^M:it#8:\
+ :do=^J:co#80:li#24:cl=50\E[;H\E[2J:sf=2*\ED:\
+ :le=^H:bs:am:cm=5\E[%i%d;%dH:nd=2\E[C:up=2\E[A:cb=3\E[1K:\
+ :ce=3\E[K:cd=50\E[J:so=2\E[7m:se=2\E[m:us=2\E[4m:ue=2\E[m:\
+ :md=2\E[1m:mr=2\E[7m:mb=2\E[5m:me=2\E[m:is=\E[1;24r\E[24;1H:\
+ :if=/usr/share/tabset/vt100:\
+ :rs=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:ks=\E[?1h\E=:ke=\E[?1l\E>:\
+ :ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:kb=^H:\
+ :ho=\E[H:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:pt:sr=2*\EM:vt#3:xn:\
+ :sc=\E7:rc=\E8:cs=\E[%i%d;%dr:
+vt300|vt320|vt300-80|VT 300 with 80 columns, on VMS:\
+ :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+ :LE=\E[%dD:RI=\E[%dC:SR=1*\E[%dM:UP=\E[%dA:al=\E[L:\
+ :am:bl=^G:bs:cd=2*\E[J:ce=2*\E[K:cl=45\E[H\E[2J:\
+ :cm=%i\E[%d;%dH:co#80:cr=\r:cs=\E[%i%d;%dr:ct=\E[3g:\
+ :dc=\E[P:dl=\E[M:dm=:do=\ED:ec=\E[%dX:ed=:ei=\E[4l:\
+ :ho=\E[H:ic:im=\E[4h:it#8:k1=\EOP:k2=\EOQ:k3=\EOR:\
+ :k4=\EOS:kd=\E[B:ke=\E[?1l\E>:kl=\E[D:kn#4:kr=\E[C:ks=\E[?1h\E=:\
+ :ku=\E[A:le=^H:li#24:mb=\E[5m:md=\E[1m:me=\E[0m:mi:\
+ :mr=\E[7m:ms:nd=\E[C:nl=\ED:nw=\EE:pf=\E[?4i:po=\E[?5i:\
+ :ps=\E[i:rc=\E8:sc=\E7:se=\E[27m:sf=1*\ED:so=\E[7m:\
+ :sr=1*\EM:st=\EH:ue=\E[24m:up=\EM:us=\E[4m:xn:
diff --git a/distrib/alpha/list2sh.awk b/distrib/alpha/list2sh.awk
new file mode 100644
index 00000000000..a97df93aaea
--- /dev/null
+++ b/distrib/alpha/list2sh.awk
@@ -0,0 +1,39 @@
+# $OpenBSD: list2sh.awk,v 1.1 1997/05/07 12:46:50 niklas 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/alpha/ramdisk/Makefile b/distrib/alpha/ramdisk/Makefile
new file mode 100644
index 00000000000..5804a3df944
--- /dev/null
+++ b/distrib/alpha/ramdisk/Makefile
@@ -0,0 +1,62 @@
+# $OpenBSD: Makefile,v 1.1 1997/05/07 12:46:54 niklas Exp $
+
+TOP= ${.CURDIR}/..
+
+.include "${TOP}/Makefile.inc"
+IMAGE= ramdisk${REV}.fs
+CRUNCHCONF?= ${TOP}/ramdisk/${CBIN}.conf
+BASE= ramdisk
+KERNEL= ${TOP}/../../sys/arch/${MACHINE}/compile/RAMDISK/bsd
+
+MOUNT_POINT= /mnt
+
+VND?= vnd0
+VND_DEV= /dev/${VND}a
+VND_RDEV= /dev/r${VND}a
+VND_CRDEV= /dev/r${VND}c
+PID!= echo $$$$
+REALIMAGE!= echo /tmp/image.${PID}
+
+.include "${TOP}/inst-common/Makefile.inc"
+
+all: ${CBIN} ${IMAGE}
+ @echo "all done"
+
+DISKTYPE= rdroot
+NBLKS= 5120
+# old format, minfree, opt, b/i trks, sects, cpg
+NEWFSARGS= -t ffs -m 0 -o space -c 16 -i 16384
+
+setroot: ${IMAGE} bsd ecoffrdsetroot
+ ${.OBJDIR}/ecoffrdsetroot bsd < ${IMAGE}
+
+${IMAGE}: do_prep do_mount do_files do_umount unconfig
+ mv -f ${REALIMAGE} ${IMAGE}
+
+ecoffrdsetroot: ${TOP}/ecoffrdsetroot.c
+ ${HOSTCC} -o ecoffrdsetroot ${TOP}/ecoffrdsetroot.c
+
+bsd: ${KERNEL}
+ cp ${KERNEL} bsd
+
+do_prep: ${CBIN} unconfig
+ dd if=/dev/zero of=${REALIMAGE} count=${NBLKS}
+ vnconfig -v -c ${VND} ${REALIMAGE}
+ disklabel -w -r ${VND} ${DISKTYPE}
+
+do_mount:
+ -newfs ${NEWFSARGS} -s ${NBLKS} ${VND_RDEV} ${DISKTYPE}
+ mount ${VND_DEV} ${MOUNT_POINT}
+
+do_umount:
+ @echo ""
+ @df -i ${MOUNT_POINT}
+ @echo ""
+ -umount ${MOUNT_POINT}
+
+unconfig:
+ -umount ${MOUNT_POINT}
+ -vnconfig -u ${VND} && cat /*bin/* > /dev/null
+ -rm -f ${REALIMAGE}
+
+.PRECIOUS: ${IMAGE}
diff --git a/distrib/alpha/ramdisk/disktab.preinstall b/distrib/alpha/ramdisk/disktab.preinstall
new file mode 100644
index 00000000000..06d70368756
--- /dev/null
+++ b/distrib/alpha/ramdisk/disktab.preinstall
@@ -0,0 +1,32 @@
+#
+# $OpenBSD: disktab.preinstall,v 1.1 1997/05/07 12:46:54 niklas 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/alpha/ramdisk/disktab.shadow b/distrib/alpha/ramdisk/disktab.shadow
new file mode 100644
index 00000000000..a8dc67ed293
--- /dev/null
+++ b/distrib/alpha/ramdisk/disktab.shadow
@@ -0,0 +1,32 @@
+#
+# $OpenBSD: disktab.shadow,v 1.1 1997/05/07 12:46:55 niklas 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/alpha/ramdisk/dot.instutils b/distrib/alpha/ramdisk/dot.instutils
new file mode 100644
index 00000000000..bdfdef6bdb1
--- /dev/null
+++ b/distrib/alpha/ramdisk/dot.instutils
@@ -0,0 +1,154 @@
+#
+# $OpenBSD: dot.instutils,v 1.1 1997/05/07 12:46:55 niklas Exp $
+#
+# Copyright (c) 1994 Christopher G. Demetriou
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+# must display the following acknowledgement:
+# This product includes software developed by Christopher G. Demetriou.
+# 4. The name of the author may not be used to endorse or promote products
+# derived from this software without specific prior written permission
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+# Installation configuration utilites (functions), to get NetBSD configured
+# reasonably once it is installed on the hard disk. These are meant to be
+# invoked from the shell prompt, by people installing NetBSD.
+
+Configure()
+{
+ DEV=/mnt/dev
+ ETC=/mnt/etc
+
+ echo "You will now be prompted for information about this"
+ echo "machine. If you hit return, the default answer (in"
+ echo "brackets) will be used."
+
+ echo ""
+ echo -n "What is this machine's hostname? [unknown.host.domain] "
+ read hname
+ if [ "$hname" = "" ]; then
+ hname=unknown.host.domain
+ fi
+ echo $hname > ${ETC}/myname
+ proto_domain=`echo $hname | sed -e 's/[^.]*\.//'`
+
+ echo ""
+ echo "What domain is this machine in (this is NOT its YP"
+ echo -n "domain name)? [$proto_domain] "
+ read dname
+ if [ "$dname" = "" ]; then
+ dname=$proto_domain
+ fi
+
+ echo ""
+ if [ -e ${ETC}/sendmail.cf ]; then
+ echo "WARNING: A default sendmail.cf exists, and probably"
+ echo "needs to be tuned and/or replaced, to work properly at"
+ echo "your site!"
+ else
+ echo "WARNING: No default sendmail.cf installed. Did you"
+ echo "forget to install the 'etc' distribution?"
+ fi
+
+ echo "127.0.0.1 localhost localhost.$dname" > ${ETC}/hosts
+
+ echo ""
+ echo -n "Does this machine have an ethernet interface? [y] "
+ read resp
+ case "$resp" in
+ n*)
+ ;;
+ *)
+ intf=
+ while [ "$intf" = "" ]; do
+ echo -n "What is the primary interface name "
+ echo -n "(e.g. ae0, etc)? "
+ read intf
+ done
+ echo -n "What is the hostname for this interface? [$hname] "
+ read ifname
+ if [ "$ifname" = "" ]; then
+ ifname=$hname
+ fi
+ ifaddr=
+ while [ "$ifaddr" = "" ]; do
+ echo -n "What is the IP address associated with "
+ echo -n "interface ${intf}? "
+ read ifaddr
+ done
+ echo "$ifaddr $ifname `echo $ifname | sed -e s/\.$dname//`" \
+ >> ${ETC}/hosts
+
+ echo -n "Does this interface have a special netmask? [n] "
+ read resp
+ case "$resp" in
+ y*)
+ echo -n "What is the netmask? [0xffffff00] "
+ read ifnetmask
+ if [ "$ifnetmask" = "" ]; then
+ ifnetmask=0xffffff00
+ fi
+ ;;
+ *)
+ ifnetmask=
+ ;;
+ esac
+
+ echo -n "Does this interface need additional flags? [n] "
+ read resp
+ case "$resp" in
+ y*)
+ echo -n "What flags? [link0] "
+ read ifflags
+ if [ "$ifflags" = "" ]; then
+ ifflags=link0
+ fi
+ ;;
+ *)
+ ifflags=
+ ;;
+ esac
+ echo "inet $ifname $ifnetmask $ifflags" > ${ETC}/hostname.$intf
+
+ echo ""
+ echo -n "WARNING: if you have any more ethernet interfaces, "
+ echo "you will have to configure"
+ echo -n "them by hand. Read the comments in /etc/netstart to"
+ echo "learn how to do this."
+ ;;
+ esac
+
+ echo ""
+ echo -n "Making device nodes..."
+ cd ${DEV}
+ sh MAKEDEV all
+ echo " done."
+
+ sync
+
+ echo "You may now reboot your machine with the shutdown command."
+ echo " shutdown -r now"
+ echo "to reboot or"
+ echo " shutdown -h now"
+ echo "to halt."
+}
diff --git a/distrib/alpha/ramdisk/dot.profile b/distrib/alpha/ramdisk/dot.profile
new file mode 100644
index 00000000000..a2b330dc8f0
--- /dev/null
+++ b/distrib/alpha/ramdisk/dot.profile
@@ -0,0 +1,49 @@
+#
+# $OpenBSD: dot.profile,v 1.1 1997/05/07 12:46:55 niklas 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/alpha/ramdisk/install.md b/distrib/alpha/ramdisk/install.md
new file mode 100644
index 00000000000..5aaf553dc21
--- /dev/null
+++ b/distrib/alpha/ramdisk/install.md
@@ -0,0 +1,267 @@
+# $OpenBSD: install.md,v 1.1 1997/05/07 12:46:56 niklas 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 "(^ed[0-9] |^[dl]e[0-9] )"< /kern/msgbuf | cut -d" " -f1 | sort -u
+}
+
+md_get_partition_range() {
+ # return range of valid partition letters
+ echo "[a-p]"
+}
+
+md_installboot() {
+ echo "This must be done later by hand"
+}
+md_labeldisk() {
+ echo "huh"
+}
+
+md_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/powerpc ${VERSION} installation program."
+ cat << \__welcome_banner_1
+
+This program is designed to help you put OpenBSD on your disk,
+in a simple and rational way. You'll be asked several questions,
+and it would probably be useful to have your disk's hardware
+manual, the installation notes, and a calculator handy.
+__welcome_banner_1
+
+ else
+ echo ""
+ echo "Welcome to the OpenBSD/powerpc ${VERSION} upgrade program."
+ cat << \__welcome_banner_2
+
+This program is designed to help you upgrade your OpenBSD system in a
+simple and rational way.
+
+As a reminder, installing the `etc' binary set is NOT recommended.
+Once the rest of your system has been upgraded, you should manually
+merge any changes to files in the `etc' set into those files which
+already exist on your system.
+__welcome_banner_2
+ fi
+
+cat << \__welcome_banner_3
+
+As with anything which modifies your disk's contents, this
+program can cause SIGNIFICANT data loss, and you are advised
+to make sure your data is backed up before beginning the
+installation process.
+
+Default answers are displayed in brackets after the questions.
+You can hit Control-C at any time to quit, but if you do so at a
+prompt, you may have to hit return. Also, quitting in the middle of
+installation may leave your system in an inconsistent state.
+
+__welcome_banner_3
+} | more
+}
+
+md_not_going_to_install() {
+ cat << \__not_going_to_install_1
+
+OK, then. Enter `halt' at the prompt to halt the machine. Once the
+machine has halted, power-cycle the system to load new boot code.
+
+__not_going_to_install_1
+}
+
+md_congrats() {
+ local what;
+ if [ "$MODE" = "install" ]; then
+ what="installed";
+ else
+ what="upgraded";
+ fi
+ cat << __congratulations_1
+
+CONGRATULATIONS! You have successfully $what OpenBSD!
+To boot the installed system, enter halt at the command prompt. Once the
+system has halted, reset the machine and boot from the disk.
+
+__congratulations_1
+}
+
+md_native_fstype() {
+}
+md_native_fsopts() {
+}
+
+md_makerootwritable() {
+ # 2048 is the size in DEV_BIZE blocks
+
+ if [ -e ${TMPWRITEABLE} ]
+ then
+ md_mountkernfs
+ return
+ fi
+ umount /tmp >> /dev/null 2>&1
+ if ! mount -t ffs -u /dev/rd0a / ; then
+ cat << \__rd0_failed_1
+
+FATAL ERROR: Can't mount the ram filesystem.
+
+__rd0_failed_1
+ exit
+ fi
+
+ # Bleh. Give mount_mfs a chance to DTRT.
+ sleep 2
+ > ${TMPWRITEABLE}
+
+ md_mountkernfs
+}
+md_mountkernfs() {
+ if [ -e ${KERNFSMOUNTED} ]
+ then
+ return
+ fi
+ if ! mount -t kernfs /kern /kern
+ then
+ cat << \__kernfs_failed_1
+FATAL ERROR: Can't mount kernfs filesystem
+__kernfs_failed_1
+ exit
+ fi
+ > ${KERNFSMOUNTED}
+}
diff --git a/distrib/alpha/ramdisk/install.sh b/distrib/alpha/ramdisk/install.sh
new file mode 100644
index 00000000000..f92ed1e405c
--- /dev/null
+++ b/distrib/alpha/ramdisk/install.sh
@@ -0,0 +1,413 @@
+#!/bin/sh
+# $OpenBSD: install.sh,v 1.1 1997/05/07 12:46:56 niklas Exp $
+# $NetBSD: install.sh,v 1.5.2.8 1996/08/27 18:15:05 gwr Exp $
+#
+# Copyright (c) 1996 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# This code is derived from software contributed to The NetBSD Foundation
+# by Jason R. Thorpe.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+# must display the following acknowledgement:
+# This product includes software developed by the NetBSD
+# Foundation, Inc. and its contributors.
+# 4. Neither the name of The NetBSD Foundation nor the names of its
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+# NetBSD installation script.
+# In a perfect world, this would be a nice C program, with a reasonable
+# user interface.
+
+FILESYSTEMS="/tmp/filesystems" # used thoughout
+FQDN="" # domain name
+
+trap "umount /tmp >> /dev/null 2>&1" 0
+
+MODE="install"
+
+# include machine-dependent functions
+# The following functions must be provided:
+# md_copy_kernel() - copy a kernel to the installed disk
+# md_get_diskdevs() - return available disk devices
+# md_get_cddevs() - return available CD-ROM devices
+# md_get_ifdevs() - return available network interfaces
+# md_get_partition_range() - return range of valid partition letters
+# md_installboot() - install boot-blocks on disk
+# md_labeldisk() - put label on a disk
+# md_prep_disklabel() - label the root disk
+# md_welcome_banner() - display friendly message
+# md_not_going_to_install() - display friendly message
+# md_congrats() - display friendly message
+# md_native_fstype() - native filesystem type for disk installs
+# md_native_fsopts() - native filesystem options for disk installs
+# md_makerootwritable() - make root writable (at least /tmp)
+
+# include machine dependent subroutines
+. install.md
+
+# include common subroutines
+. install.sub
+
+# which sets?
+THESETS="$ALLSETS"
+
+# Good {morning,afternoon,evening,night}.
+md_welcome_banner
+echo -n "Proceed with installation? [n] "
+getresp "n"
+case "$resp" in
+ y*|Y*)
+ echo "Cool! Let's get to it..."
+ ;;
+ *)
+ md_not_going_to_install
+ exit
+ ;;
+esac
+
+# XXX Work around vnode aliasing bug (thanks for the tip, Chris...)
+ls -l /dev >> /dev/null 2>&1
+
+# Deal with terminal issues
+md_set_term
+
+# Get timezone info
+get_timezone
+
+# Make sure we can write files (at least in /tmp)
+# This might make an MFS mount on /tmp, or it may
+# just re-mount the root with read-write enabled.
+md_makerootwritable
+
+# Install the shadowed disktab file; lets us write to it for temporary
+# purposes without mounting the miniroot read-write.
+cp /etc/disktab.shadow /tmp/disktab.shadow
+
+while [ "X${ROOTDISK}" = "X" ]; do
+ getrootdisk
+done
+
+# Deal with disklabels, including editing the root disklabel
+# and labeling additional disks. This is machine-dependent since
+# some platforms may not be able to provide this functionality.
+md_prep_disklabel ${ROOTDISK}
+
+# Assume partition 'a' of $ROOTDISK is for the root filesystem. Loop and
+# get the rest.
+# XXX ASSUMES THAT THE USER DOESN'T PROVIDE BOGUS INPUT.
+cat << \__get_filesystems_1
+
+You will now have the opportunity to enter filesystem information.
+You will be prompted for device name and mount point (full path,
+including the prepending '/' character).
+
+Note that these do not have to be in any particular order. You will
+be given the opportunity to edit the resulting 'fstab' file before
+any of the filesystems are mounted. At that time you will be able
+to resolve any filesystem order dependencies.
+
+__get_filesystems_1
+
+echo "The following will be used for the root filesystem:"
+echo " ${ROOTDISK}a /"
+
+echo "${ROOTDISK}a /" > ${FILESYSTEMS}
+
+resp="X" # force at least one iteration
+while [ "X$resp" != X"done" ]; do
+ echo ""
+ echo -n "Device name? [done] "
+ getresp "done"
+ case "$resp" in
+ done)
+ ;;
+
+ *)
+ _device_name=`basename $resp`
+
+ # force at least one iteration
+ _first_char="X"
+ while [ "X${_first_char}" != X"/" ]; do
+ echo -n "Mount point? "
+ getresp ""
+ _mount_point=$resp
+ if [ "X${_mount_point}" = X"/" ]; then
+ # Invalid response; no multiple roots
+ _first_char="X"
+ else
+ _first_char=`firstchar ${_mount_point}`
+ fi
+ done
+ echo "${_device_name} ${_mount_point}" >> ${FILESYSTEMS}
+ resp="X" # force loop to repeat
+ ;;
+ esac
+done
+
+echo ""
+echo "You have configured the following devices and mount points:"
+echo ""
+cat ${FILESYSTEMS}
+echo ""
+echo "Filesystems will now be created on these devices. If you made any"
+echo -n "mistakes, you may edit this now. Edit? [n] "
+getresp "n"
+case "$resp" in
+ y*|Y*)
+ ${EDITOR} ${FILESYSTEMS}
+ ;;
+ *)
+ ;;
+esac
+
+# Loop though the file, place filesystems on each device.
+echo "Creating filesystems..."
+(
+ while read _device_name _junk; do
+ newfs /dev/r${_device_name}
+ echo ""
+ done
+) < ${FILESYSTEMS}
+
+# Get network configuration information, and store it for placement in the
+# root filesystem later.
+cat << \__network_config_1
+You will now be given the opportunity to configure the network. This will
+be useful if you need to transfer the installation sets via FTP or NFS.
+Even if you choose not to transfer installation sets that way, this
+information will be preserved and copied into the new root filesystem.
+
+Note, enter all symbolic host names WITHOUT the domain name appended.
+I.e. use 'hostname' NOT 'hostname.domain.name'.
+
+__network_config_1
+echo -n "Configure the network? [y] "
+getresp "y"
+case "$resp" in
+ y*|Y*)
+ resp="" # force at least one iteration
+ if [ -f /etc/myname ]; then
+ resp=`cat /etc/myname`
+ fi
+ echo -n "Enter system hostname: [$resp] "
+ while [ "X${resp}" = X"" ]; do
+ getresp "$resp"
+ done
+ hostname $resp
+ echo $resp > /tmp/myname
+
+ echo -n "Enter DNS domain name: "
+ resp="" # force at least one iteration
+ while [ "X${resp}" = X"" ]; do
+ getresp ""
+ done
+ FQDN=$resp
+
+ configurenetwork
+
+ echo -n "Enter IP address of default route: [none] "
+ getresp "none"
+ if [ "X${resp}" != X"none" ]; then
+ route delete default >> /dev/null 2>&1
+ if route add default $resp >> /dev/null ; then
+ echo $resp > /tmp/mygate
+ fi
+ fi
+
+ echo -n "Enter IP address of primary nameserver: [none] "
+ getresp "none"
+ if [ "X${resp}" != X"none" ]; then
+ echo "domain $FQDN" > /tmp/resolv.conf
+ echo "nameserver $resp" >> /tmp/resolv.conf
+ echo "search $FQDN" >> /tmp/resolv.conf
+
+ echo -n "Would you like to use the nameserver now? [y] "
+ getresp "y"
+ case "$resp" in
+ y*|Y*)
+ cp /tmp/resolv.conf \
+ /tmp/resolv.conf.shadow
+ ;;
+
+ *)
+ ;;
+ esac
+ fi
+
+ echo ""
+ echo "The host table is as follows:"
+ echo ""
+ cat /tmp/hosts
+ echo ""
+ echo "You may want to edit the host table in the event that"
+ echo "you need to mount an NFS server."
+ echo -n "Would you like to edit the host table? [n] "
+ getresp "n"
+ case "$resp" in
+ y*|Y*)
+ ${EDITOR} /tmp/hosts
+ ;;
+
+ *)
+ ;;
+ esac
+
+ cat << \__network_config_2
+
+You will now be given the opportunity to escape to the command shell to
+do any additional network configuration you may need. This may include
+adding additional routes, if needed. In addition, you might take this
+opportunity to redo the default route in the event that it failed above.
+If you do change the default route, and wish for that change to carry over
+to the installed system, execute the following command at the shell
+prompt:
+
+ echo <ip_address_of_gateway> > /tmp/mygate
+
+where <ip_address_of_gateway> is the IP address of the default router.
+
+__network_config_2
+ echo -n "Escape to shell? [n] "
+ getresp "n"
+ case "$resp" in
+ y*|Y*)
+ echo "Type 'exit' to return to install."
+ sh
+ ;;
+
+ *)
+ ;;
+ esac
+ ;;
+ *)
+ ;;
+esac
+
+# Now that the network has been configured, it is safe to configure the
+# fstab.
+(
+ while read _dev _mp; do
+ if [ "$mp" = "/" ]; then
+ echo /dev/$_dev $_mp ffs rw 1 1
+ else
+ echo /dev/$_dev $_mp ffs rw 1 2
+ fi
+ done
+) < ${FILESYSTEMS} > /tmp/fstab
+
+echo "The fstab is configured as follows:"
+echo ""
+cat /tmp/fstab
+cat << \__fstab_config_1
+
+You may wish to edit the fstab. For example, you may need to resolve
+dependencies in the order which the filesystems are mounted. You may
+also wish to take this opportunity to place NFS mounts in the fstab.
+This would be especially useful if you plan to keep '/usr' on an NFS
+server.
+
+__fstab_config_1
+echo -n "Edit the fstab? [n] "
+getresp "n"
+case "$resp" in
+ y*|Y*)
+ ${EDITOR} /tmp/fstab
+ ;;
+
+ *)
+ ;;
+esac
+
+echo ""
+munge_fstab /tmp/fstab /tmp/fstab.shadow
+mount_fs /tmp/fstab.shadow
+
+mount | while read line; do
+ set -- $line
+ if [ "$2" = "/" -a "$3" = "nfs" ]; then
+ echo "You appear to be running diskless."
+ echo -n "Are the install sets on one of your currently mounted filesystems? [n] "
+ getresp "n"
+ case "$resp" in
+ y*|Y*)
+ get_localdir
+ ;;
+ *)
+ ;;
+ esac
+ fi
+done
+
+install_sets $ALLSETS $MDSETS
+
+# Copy in configuration information and make devices in target root.
+(
+ cd /tmp
+ for file in fstab hostname.* hosts myname mygate resolv.conf; do
+ if [ -f $file ]; then
+ echo -n "Copying $file..."
+ cp $file /mnt/etc/$file
+ echo "done."
+ fi
+ done
+
+ # If no zoneinfo on the installfs, give them a second chance
+ if [ ! -e /usr/share/zoneinfo ]; then
+ get_timezone
+ fi
+ if [ ! -e /mnt/usr/share/zoneinfo ]; then
+ echo "Cannot install timezone link..."
+ else
+ echo -n "Installing timezone link..."
+ rm -f /mnt/etc/localtime
+ ln -s /usr/share/zoneinfo/$TZ /mnt/etc/localtime
+ echo "done."
+ fi
+
+ echo "if dev.tar.gz was not extracted it will be necessary"
+ echo "to go to /mnt/dev and run \"sh MAKEDEV all\""
+# if [ ! -x /mnt/dev/MAKEDEV ]; then
+# echo "No /dev/MAKEDEV installed, something is wrong here..."
+# else
+# echo -n "Making devices..."
+# pid=`twiddle`
+# cd /mnt/dev
+# sh MAKEDEV all
+# kill $pid
+# echo "done."
+# fi
+ md_copy_kernel
+
+ md_installboot ${ROOTDISK}
+)
+
+unmount_fs /tmp/fstab.shadow
+
+# Pat on the back.
+md_congrats
+
+# ALL DONE!
+exit 0
diff --git a/distrib/alpha/ramdisk/install.sub b/distrib/alpha/ramdisk/install.sub
new file mode 100644
index 00000000000..d9b8d374323
--- /dev/null
+++ b/distrib/alpha/ramdisk/install.sub
@@ -0,0 +1,1335 @@
+#!/bin/sh
+# $OpenBSD: install.sub,v 1.1 1997/05/07 12:46:57 niklas Exp $
+# $NetBSD: install.sub,v 1.5.2.8 1996/09/02 23:25:02 pk Exp $
+#
+# Copyright (c) 1996 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# This code is derived from software contributed to The NetBSD Foundation
+# by Jason R. Thorpe.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+# must display the following acknowledgement:
+# This product includes software developed by the NetBSD
+# Foundation, Inc. and its contributors.
+# 4. Neither the name of The NetBSD Foundation nor the names of its
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+# OpenBSD installation/upgrade script - common subroutines.
+
+ROOTDISK="" # filled in below
+VERSION= # filled in automatically (see list)
+export VERSION
+
+ALLDIST="base comp etc games man misc text" # default install sets
+ALLSNAP_1="etc games man misc text bin dev sbin"
+ALLSNAP_2="usr.bin usr.binutils usr.games usr.include bsd"
+ALLSNAP_3="usr.lib usr.libexec usr.misc usr.sbin usr.share var"
+ALLSETS="${ALLDIST} ${ALLSNAP_1} ${ALLSNAP_2} ${ALLSNAP_3}"
+
+UPGRSETS="base comp games man misc text" # default upgrade sets
+THESETS= # one of the above
+
+local_sets_dir="" # Path searched for sets by install_sets
+ # on the local filesystems
+
+# decide upon an editor
+if [ X$EDITOR = X ]; then
+ if [ -x /usr/bin/vi ]; then
+ EDITOR=vi
+ else
+ EDITOR=ed
+ fi
+fi
+
+getresp() {
+ read resp
+ if [ "X$resp" = "X" ]; then
+ resp=$1
+ fi
+}
+
+isin() {
+# test the first argument against the remaining ones, return succes on a match
+ _a=$1; shift
+ while [ $# != 0 ]; do
+ if [ "$_a" = "$1" ]; then return 0; fi
+ shift
+ done
+ return 1
+}
+
+rmel() {
+# remove first argument from list formed by the remaining arguments
+ local _a
+
+ _a=$1; shift
+ while [ $# != 0 ]; do
+ if [ "$_a" != "$1" ]; then
+ echo "$1";
+ fi
+ shift
+ done
+}
+
+cutword () {
+# read a line of data, return Nth element.
+ local _a
+ local _n
+ local _oifs
+
+ # optional field separator
+ _oifs="$IFS"
+ case "$1" in
+ -t?*) IFS=${1#-t}; shift;;
+ esac
+
+ _n=$1
+ read _a; set -- $_a
+ IFS="$_oifs"
+ if [ "$1" = "" ]; then return; fi
+ eval echo \$$_n
+}
+
+cutlast () {
+# read a line of data, return last element. Equiv. of awk '{print $NF}'.
+ local _a
+ local _oifs
+
+ # optional field separator
+ _oifs="$IFS"
+ case "$1" in
+ -t?*) IFS=${1#-t}; shift;;
+ esac
+
+ read _a; set -- $_a
+ IFS="$_oifs"
+ if [ "$1" = "" ]; then return; fi
+ while [ "$#" -gt 10 ]; do shift 10; done
+ eval echo \$$#
+}
+
+firstchar () {
+# return first character of argument
+ local _a
+ _a=$1
+ while [ ${#_a} != 1 ]; do
+ _a=${_a%?}
+ done
+ echo $_a
+}
+
+basename () {
+ local _oifs
+ if [ "$1" = "" ]; then return; fi
+ _oifs="$IFS"
+ IFS="/"
+ set -- $1
+ IFS="$_oifs"
+ while [ "$#" -gt 10 ]; do shift 10; done
+ eval echo \$$#
+}
+
+dir_has_sets() {
+ # return true when the directory $1 contains a set for $2...$n
+ local _dir
+ local _file
+
+ _dir=$1; shift
+ for _file in $*
+ do
+ if [ -f $_dir/${_file}.tar.gz ]; then
+ return 0
+ fi
+ # Try for stupid msdos convention
+ if [ -f $_dir/${_file}.tgz ]; then
+ return 0
+ fi
+ done
+ return 1
+}
+
+twiddle() {
+# spin the propeller so we don't get bored
+ while : ; do
+ sleep 1; echo -n "\010/";
+ sleep 1; echo -n "\010-";
+ sleep 1; echo -n "\010\\\\";
+ sleep 1; echo -n "\010|";
+ done >> /dev/tty & echo $!
+}
+
+get_localdir() {
+ # $1 is relative mountpoint
+ local _mp
+ local _dir
+
+ _mp=$1
+ _dir=
+ while : ; do
+ echo -n "Enter the pathname where the sets are stored [$_dir] "
+ getresp "$_dir"
+ _dir=$resp
+
+ # Allow break-out with empty response
+ if [ -z "$_dir" ]; then
+ echo -n "Are you sure you don't want to set the pathname? [n] "
+ getresp "n"
+ case "$resp" in
+ y*|Y*)
+ break
+ ;;
+ *)
+ continue
+ ;;
+ esac
+ fi
+
+ if dir_has_sets "$_mp/$_dir" $THESETS
+ then
+ local_sets_dir="$_mp/$_dir"
+ break
+ else
+ cat << __get_reldir_1
+The directory \"$local_sets_dir\" does not exist, or does not hold any of the
+upgrade sets.
+__get_reldir_1
+ echo -n "Re-enter pathname? [y] "
+ getresp "y"
+ case "$resp" in
+ y*|Y*)
+ ;;
+ *)
+ local_sets_dir=""
+ break
+ ;;
+ esac
+ fi
+ done
+}
+
+getrootdisk() {
+ cat << \__getrootdisk_1
+
+The installation program needs to know which disk to consider
+the root disk. Note the unit number may be different than
+the unit number you used in the standalone installation
+program.
+
+Available disks are:
+
+__getrootdisk_1
+ _DKDEVS=`md_get_diskdevs`
+ echo "$_DKDEVS"
+ echo ""
+ echo -n "Which disk is the root disk? "
+ getresp ""
+ if isin $resp $_DKDEVS ; then
+ ROOTDISK="$resp"
+ else
+ echo ""
+ echo "The disk $resp does not exist."
+ ROOTDISK=""
+ fi
+}
+
+labelmoredisks() {
+ cat << \__labelmoredisks_1
+
+You may label the following disks:
+
+__labelmoredisks_1
+ echo "$_DKDEVS"
+ echo ""
+ echo -n "Label which disk? [done] "
+ getresp "done"
+ case "$resp" in
+ done)
+ ;;
+
+ *)
+ if isin $resp $_DKDEVS ; then
+ md_labeldisk $resp
+ else
+ echo ""
+ echo "The disk $resp does not exist."
+ fi
+ ;;
+ esac
+}
+
+addhostent() {
+ # $1 - IP address
+ # $2 - symbolic name
+
+ # Create an entry in the hosts table. If no host table
+ # exists, create one. If the IP address already exists,
+ # replace it's entry.
+ if [ ! -f /tmp/hosts ]; then
+ echo "127.0.0.1 localhost" > /tmp/hosts
+ fi
+
+ sed "/^$1 /d" < /tmp/hosts > /tmp/hosts.new
+ mv /tmp/hosts.new /tmp/hosts
+
+ echo "$1 $2 $2.$FQDN" >> /tmp/hosts
+}
+
+addifconfig() {
+ # $1 - interface name
+ # $2 - interface symbolic name
+ # $3 - interface IP address
+ # $4 - interface netmask
+ # $5 - (optional) interface link-layer directives
+
+ # Create a hostname.* file for the interface.
+ echo "inet $2 $4 NONE $5" > /tmp/hostname.$1
+
+ addhostent $3 $2
+}
+
+configurenetwork() {
+ local _ifsdone
+ local _ifs
+
+ _IFS=`md_get_ifdevs`
+ _ifsdone=""
+ resp="" # force at least one iteration
+ while [ "X${resp}" != X"done" ]; do
+ cat << \__configurenetwork_1
+
+You may configure the following network interfaces (the interfaces
+marked with [X] have been succesfully configured):
+
+__configurenetwork_1
+
+ for _ifs in $_IFS; do
+ if isin $_ifs $_ifsdone ; then
+ echo -n "[X] "
+ else
+ echo -n " "
+ fi
+ echo $_ifs
+ done
+ echo ""
+ echo -n "Configure which interface? [done] "
+ getresp "done"
+ case "$resp" in
+ "done")
+ ;;
+ *)
+ _ifs=$resp
+ if isin $_ifs $_IFS ; then
+ if configure_ifs $_ifs ; then
+ _ifsdone="$_ifs $_ifsdone"
+ fi
+ else
+ echo "Invalid response: \"$resp\" is not in list"
+ fi
+ ;;
+ esac
+ done
+}
+
+configure_ifs() {
+
+ local _up
+ local _interface_name
+ local _interface_ip
+ local _interface_mask
+ local _interface_symname
+ local _interface_extra
+
+ _interface_name=$1
+
+ set -- `ifconfig $_interface_name | sed -n '
+ 1s/.*<UP,.*$/UP/p
+ 1s/.*<.*>*$/DOWN/p
+ 2s/inet//
+ 2s/--> [0-9.][0-9.]*//
+ 2s/netmask//
+ 2s/broadcast//
+ 2p'`
+
+ _up=$1
+ _interface_ip=$2
+ _interface_mask=$3
+
+ # Get IP address
+ resp="" # force one iteration
+ while [ "X${resp}" = X"" ]; do
+ echo -n "IP address? [$_interface_ip] "
+ getresp "$_interface_ip"
+ _interface_ip=$resp
+ done
+
+ # Get symbolic name
+ resp="" # force one iteration
+ while [ "X${resp}" = X"" ]; do
+ echo -n "Symbolic (host) name? "
+ getresp ""
+ _interface_symname=$resp
+ done
+
+ # Get netmask
+ resp="" # force one iteration
+ while [ "X${resp}" = X"" ]; do
+ echo -n "Netmask? [$_interface_mask] "
+ getresp "$_interface_mask"
+ _interface_mask=$resp
+ done
+
+ echo "Your network interface might require additional link-layer"
+ echo "directives (like \`link0'). If this is the case you can enter"
+ echo "these at the next prompt."
+ echo ""
+ echo -n "Additional link-layer arguments? [$_interface_extra] "
+ getresp "$_interface_extra"
+ if [ "X${resp}" != X"" ]; then
+ _interface_extra=$resp
+ fi
+
+ # Configure the interface. If it
+ # succeeds, add it to the permanent
+ # network configuration info.
+ if [ $_up != "UP" ]; then
+ ifconfig ${_interface_name} down
+ if ifconfig ${_interface_name} inet \
+ ${_interface_ip} \
+ netmask ${_interface_mask} ${_interface_extra} up ; then
+ addifconfig \
+ ${_interface_name} \
+ ${_interface_symname} \
+ ${_interface_ip} \
+ ${_interface_mask} ${_interface_extra}
+ return 0
+ fi
+ else
+ echo "Interface ${_interface_name} is already active."
+ echo "Just saving configuration on new root filesystem."
+ addifconfig \
+ ${_interface_name} \
+ ${_interface_symname} \
+ ${_interface_ip} \
+ ${_interface_mask} ${_interface_extra}
+ fi
+ return 1
+}
+
+# Much of this is gratuitously stolen from /etc/netstart.
+enable_network() {
+
+ # Set up the hostname.
+ if [ ! -f /mnt/etc/myname ]; then
+ echo "ERROR: no /etc/myname!"
+ return 1
+ fi
+ hostname=`cat /mnt/etc/myname`
+ hostname $hostname
+
+ # configure all the interfaces which we know about.
+(
+ tmp="$IFS"
+ IFS="$IFS."
+ set -- `echo /mnt/etc/hostname*`
+ IFS=$tmp
+ unset tmp
+
+ while [ $# -ge 2 ] ; do
+ shift # get rid of "hostname"
+ (
+ read af name mask bcaddr extras
+ read dt dtaddr
+
+ if [ ! -n "$name" ]; then
+ echo "/etc/hostname.$1: invalid network configuration file"
+ exit
+ fi
+
+ cmd="ifconfig $1 $af $name "
+ if [ "${dt}" = "dest" ]; then cmd="$cmd $dtaddr"; fi
+ if [ -n "$mask" ]; then cmd="$cmd netmask $mask"; fi
+ if [ -n "$bcaddr" -a "X$bcaddr" != "XNONE" ]; then
+ cmd="$cmd broadcast $bcaddr";
+ fi
+ cmd="$cmd $extras"
+
+ $cmd
+ ) < /mnt/etc/hostname.$1
+ shift
+ done
+)
+
+ # set the address for the loopback interface
+ ifconfig lo0 inet localhost
+
+ # use loopback, not the wire
+ route add $hostname localhost
+
+ # /etc/mygate, if it exists, contains the name of my gateway host
+ # that name must be in /etc/hosts.
+ if [ -f /mnt/etc/mygate ]; then
+ route delete default > /dev/null 2>&1
+ route add default `cat /mnt/etc/mygate`
+ fi
+
+ # enable the resolver, if appropriate.
+ if [ -f /mnt/etc/resolv.conf ]; then
+ _resolver_enabled="TRUE"
+ cp /mnt/etc/resolv.conf /tmp/resolv.conf.shadow
+ fi
+
+ # Display results...
+ echo "Network interface configuration:"
+ ifconfig -a
+
+ echo ""
+
+ if [ "X${_resolver_enabled}" = X"TRUE" ]; then
+ netstat -r
+ echo ""
+ echo "Resolver enabled."
+ else
+ netstat -rn
+ echo ""
+ echo "Resolver not enabled."
+ fi
+
+ return 0
+}
+
+install_ftp() {
+ # Get several parameters from the user, and create
+ # a shell script that directs the appropriate
+ # commands into ftp.
+ cat << \__install_ftp_1
+
+This is an automated ftp-based installation process. You will be asked
+several questions. The correct set of commands will be placed in a script
+that will be fed to ftp(1).
+
+__install_ftp_1
+ # Get server IP address
+ resp="" # force one iteration
+ while [ "X${resp}" = X"" ]; do
+ echo -n "Server IP? [${_ftp_server_ip}] "
+ getresp "${_ftp_server_ip}"
+ _ftp_server_ip=$resp
+ done
+
+ # Get server directory
+ resp="" # force one iteration
+ while [ "X${resp}" = X"" ]; do
+ echo -n "Server directory? [${_ftp_server_dir}] "
+ getresp "${_ftp_server_dir}"
+ _ftp_server_dir=$resp
+ done
+
+ # Get login name
+ resp="" # force one iteration
+ while [ "X${resp}" = X"" ]; do
+ echo -n "Login? [${_ftp_server_login}] "
+ getresp "${_ftp_server_login}"
+ _ftp_server_login=$resp
+ done
+
+ # Get password
+ resp="" # force one iteration
+ while [ "X${resp}" = X"" ]; do
+ echo -n "Password? [${_ftp_server_password}] "
+ getresp "${_ftp_server_password}"
+ _ftp_server_password=$resp
+ done
+
+ # Get list of files for mget.
+ cat << \__install_ftp_2
+
+You will now be asked for files to extract. Enter one file at a time.
+When you are done entering files, enter 'done'.
+
+__install_ftp_2
+ echo "#!/bin/sh" > /tmp/ftp-script.sh
+ echo "cd /mnt" >> /tmp/ftp-script.sh
+ echo "ftp -i -n $_ftp_server_ip << \__end_commands" >> \
+ /tmp/ftp-script.sh
+ echo "user $_ftp_server_login $_ftp_server_password" >> \
+ /tmp/ftp-script.sh
+ echo "bin" >> /tmp/ftp-script.sh
+ echo "cd $_ftp_server_dir" >> /tmp/ftp-script.sh
+
+ resp="" # force one interation
+ while [ "X${resp}" != X"done" ]; do
+ echo -n "File? [done] "
+ getresp "done"
+ if [ "X${resp}" = X"done" ]; then
+ break
+ fi
+
+ _ftp_file=`echo ${resp} | cutword 1'`
+ echo "get ${_ftp_file} |\"pax -r -z -v\"" >> \
+ /tmp/ftp-script.sh
+ done
+
+ echo "quit" >> /tmp/ftp-script.sh
+ echo "__end_commands" >> /tmp/ftp-script.sh
+
+ sh /tmp/ftp-script.sh
+ rm -f /tmp/ftp-script.sh
+ echo "Extraction complete."
+}
+
+install_from_mounted_fs() {
+ # $1 - directory containing installation sets
+ local _filename
+ local _sets
+ local _next
+ local _f
+
+ _sets=""
+ if dir_has_sets $1 $THESETS; then
+ for _f in $THESETS ; do
+ if [ -f $1/${_f}.tar.gz ]; then
+ _sets="$_sets ${_f}.tar.gz"
+ elif [ -f $1/${_f}.tgz ]; then
+ _sets="$_sets ${_f}.tgz"
+ fi
+ done
+ else
+ echo "There are no OpenBSD install sets available in \"$1\""
+ return
+ fi
+
+ while : ; do
+ echo "The following sets are available for extraction:"
+ echo "(marked sets have already been extracted)"
+ echo ""
+
+ _next=""
+ for _f in $_sets ; do
+ if isin $_f $_setsdone; then
+ echo -n "[X] "
+ else
+ echo -n " "
+ if [ -z "$_next" ]; then _next=$_f; fi
+ fi
+ echo $_f
+ done
+ echo ""
+
+ # Get the name of the file.
+ if [ "X$_next" = "X" ]; then resp=n; else resp=y; fi
+ echo -n "Continue extraction [$resp]?"
+ getresp "$resp"
+ if [ "$resp" = "n" ]; then
+ break
+ fi
+
+ echo -n "File name [$_next]? "
+ getresp "$_next"
+ _f=$resp
+ _filename="/$1/$_f"
+
+ # Ensure file exists
+ if [ ! -f $_filename ]; then
+ echo "File $_filename does not exist. Check to make"
+ echo "sure you entered the information properly."
+ continue
+ fi
+
+ # Extract file
+ cat $_filename | (cd /mnt; pax -r -pe -z )
+ echo "Extraction complete."
+ _setsdone="$_f $_setsdone"
+
+ done
+}
+
+install_cdrom() {
+ local _drive
+ local _partition_range
+ local _partition
+ local _fstype
+ local _directory
+
+ # Get the cdrom device info
+ cat << \__install_cdrom_1
+
+The following CD-ROM devices are installed on your system; please select
+the CD-ROM device containing the partition with the installation sets:
+
+__install_cdrom_1
+ _CDDEVS=`md_get_cddevs`
+ echo "$_CDDEVS"
+ echo ""
+ echo -n "Which is the CD-ROM with the installation media? [abort] "
+ getresp "abort"
+ case "$resp" in
+ abort)
+ echo "Aborting."
+ return
+ ;;
+
+ *)
+ if isin $resp $_CDDEVS ; then
+ _drive=$resp
+ else
+ echo ""
+ echo "The CD-ROM $resp does not exist."
+ echo "Aborting."
+ return
+ fi
+ ;;
+ esac
+
+ # Get partition
+ _partition_range=`md_get_partition_range`
+ resp="" # force one iteration
+ while [ "X${resp}" = X"" ]; do
+ echo -n "Partition? [c] "
+ getresp "c"
+ case "$resp" in
+ $_partition_range)
+ _partition=$resp
+ ;;
+
+ *)
+ echo "Invalid response: $resp"
+ resp="" # force loop to repeat
+ ;;
+ esac
+ done
+
+ # Ask for filesystem type
+ cat << \__install_cdrom_2
+
+There are two CD-ROM filesystem types currently supported by this program:
+ 1) ISO-9660 (cd9660)
+ 2) Berkeley Fast Filesystem (ffs)
+
+__install_cdrom_2
+ resp="" # force one iteration
+ while [ "X${resp}" = X"" ]; do
+ echo -n "Which filesystem type? [cd9660] "
+ getresp "cd9660"
+ case "$resp" in
+ cd9660|ffs)
+ _fstype=$resp
+ ;;
+
+ *)
+ echo "Invalid response: $resp"
+ resp="" # force loop to repeat
+ ;;
+ esac
+ done
+
+ # Mount the CD-ROM
+ if ! mount -t ${_filesystem} -o ro \
+ /dev/${_drive}${_partition} /mnt2 ; then
+ echo "Cannot mount CD-ROM drive. Aborting."
+ return
+ fi
+
+ # Get the directory where the file lives
+ resp="" # force one iteration
+ while [ "X${resp}" = X"" ]; do
+ echo "Enter the directory relative to the mount point that"
+ echo -n "contains the file. [${_directory}] "
+ getresp "${_directory}"
+ done
+ _directory=$resp
+
+ install_from_mounted_fs /mnt2/${_directory}
+ umount -f /mnt2 > /dev/null 2>&1
+}
+
+mount_a_disk() {
+ # Mount a disk on /mnt2. The set of disk devices to choose from
+ # is $_DKDEVS.
+ # returns 0 on failure.
+
+ local _drive
+ local _partition_range
+ local _partition
+ local _fstype
+ local _fsopts
+ local _directory
+ local _md_fstype
+ local _md_fsopts
+
+ getresp "abort"
+ case "$resp" in
+ abort)
+ echo "Aborting."
+ return 0
+ ;;
+
+ *)
+ if isin $resp $_DKDEVS ; then
+ _drive=$resp
+ else
+ echo ""
+ echo "The disk $resp does not exist."
+ echo "Aborting."
+ return 0
+ fi
+ ;;
+ esac
+
+ # Get partition
+ _partition_range=`md_get_partition_range`
+ resp="" # force one iteration
+ while [ "X${resp}" = X"" ]; do
+ echo -n "Partition? [d] "
+ getresp "d"
+ case "$resp" in
+ $_partition_range)
+ _partition=$resp
+ ;;
+
+ *)
+ echo "Invalid response: $resp"
+ resp="" # force loop to repeat
+ ;;
+ esac
+ done
+
+ # Ask for filesystem type
+ cat << \__mount_a_disk_2
+
+The following filesystem types are supported:
+ 1) ffs
+__mount_a_disk_2
+ _md_fstype=`md_native_fstype`
+ _md_fsopts=`md_native_fsopts`
+ if [ ! -z "$_md_fstype" ]; then
+ echo " 2) $_md_fstype"
+ else
+ _md_fstype="_undefined_"
+ fi
+ resp="" # force one iteration
+ while [ "X${resp}" = X"" ]; do
+ echo -n "Which filesystem type? [ffs] "
+ getresp "ffs"
+ case "$resp" in
+ ffs)
+ _fstype=$resp
+ _fsopts="ro"
+ ;;
+ $_md_fstype)
+ _fstype=$resp
+ _fsopts=$_md_fsopts
+ ;;
+ *)
+ echo "Invalid response: $resp"
+ resp="" # force loop to repeat
+ ;;
+ esac
+ done
+
+ # Mount the disk
+ if ! mount -t ${_fstype} -o $_fsopts \
+ /dev/${_drive}${_partition} /mnt2 ; then
+ echo "Cannot mount disk. Aborting."
+ return 0
+ fi
+ return 1
+}
+
+install_disk() {
+ local _directory
+
+ cat << \__install_disk_1
+
+The following disk devices are installed on your system; please select
+the disk device containing the partition with the installation sets:
+
+__install_disk_1
+ _DKDEVS=`md_get_diskdevs`
+ echo "$_DKDEVS"
+ echo ""
+ echo -n "Which is the disk with the installation sets? [abort] "
+
+ if mount_a_disk ; then
+ return
+ fi
+
+ # Get the directory where the file lives
+ resp="" # force one iteration
+ while [ "X${resp}" = X"" ]; do
+ echo "Enter the directory relative to the mount point that"
+ echo -n "contains the file. [${_directory}] "
+ getresp "${_directory}"
+ done
+ _directory=$resp
+
+ install_from_mounted_fs /mnt2/${_directory}
+ umount -f /mnt2 > /dev/null 2>&1
+}
+
+install_nfs() {
+ # Get the IP address of the server
+ resp="" # force one iteration
+ while [ "X${resp}" = X"" ]; do
+ echo -n "Server IP address? [${_nfs_server_ip}] "
+ getresp "${_nfs_server_ip}"
+ done
+ _nfs_server_ip=$resp
+
+ # Get server path to mount
+ resp="" # force one iteration
+ while [ "X${resp}" = X"" ]; do
+ echo -n "Filesystem on server to mount? [${_nfs_server_path}] "
+ getresp "${_nfs_server_path}"
+ done
+ _nfs_server_path=$resp
+
+ # Determine use of TCP
+ echo -n "Use TCP transport (only works with capable NFS server)? [n] "
+ getresp "n"
+ case "$resp" in
+ y*|Y*)
+ _nfs_tcp="-T"
+ ;;
+
+ *)
+ _nfs_tcp=""
+ ;;
+ esac
+
+ # Mount the server
+ mkdir /mnt2 > /dev/null 2>&1
+ if ! mount_nfs $_nfs_tcp ${_nfs_server_ip}:${_nfs_server_path} \
+ /mnt2 ; then
+ echo "Cannot mount NFS server. Aborting."
+ return
+ fi
+
+ # Get the directory where the file lives
+ resp="" # force one iteration
+ while [ "X${resp}" = X"" ]; do
+ echo "Enter the directory relative to the mount point that"
+ echo -n "contains the file. [${_nfs_directory}] "
+ getresp "${_nfs_directory}"
+ done
+ _nfs_directory=$resp
+
+ install_from_mounted_fs /mnt2/${_nfs_directory}
+ umount -f /mnt2 > /dev/null 2>&1
+}
+
+install_tape() {
+ local _xcmd
+
+ # Get the name of the tape from the user.
+ cat << \__install_tape_1
+
+The installation program needs to know which tape device to use. Make
+sure you use a "no rewind on close" device.
+
+__install_tape_1
+ _tape=`basename $TAPE`
+ resp="" # force one iteration
+ while [ "X${resp}" = X"" ]; do
+ echo -n "Name of tape device? [${_tape}]"
+ getresp "${_tape}"
+ done
+ _tape=`basename $resp`
+ TAPE="/dev/${_tape}"
+ if [ ! -c $TAPE ]; then
+ echo "$TAPE does not exist or is not a character special file."
+ echo "Aborting."
+ return
+ fi
+ export TAPE
+
+ # Rewind the tape device
+ echo -n "Rewinding tape..."
+ if ! mt rewind ; then
+ echo "$TAPE may not be attached to the system or may not be"
+ echo "a tape device. Aborting."
+ return
+ fi
+ echo "done."
+
+ # Get the file number
+ resp="" # force one iteration
+ while [ "X${resp}" = X"" ]; do
+ echo -n "File number? "
+ getresp ""
+ case "$resp" in
+ [1-9]*)
+ _nskip=`expr $resp - 1`
+ ;;
+
+ *)
+ echo "Invalid file number ${resp}."
+ resp="" # fore loop to repeat
+ ;;
+ esac
+ done
+
+ # Skip to correct file.
+ echo -n "Skipping to source file..."
+ if [ "X${_nskip}" != X"0" ]; then
+ if ! mt fsf $_nskip ; then
+ echo "Could not skip $_nskip files. Aborting."
+ return
+ fi
+ fi
+ echo "done."
+
+ cat << \__install_tape_2
+
+There are 2 different ways the file can be stored on tape:
+
+ 1) an image of a gzipped tar file
+ 2) a standard tar image
+
+__install_tape_2
+ resp="" # force one iteration
+ while [ "X${resp}" = X"" ]; do
+ echo -n "Which way is it? [1] "
+ getresp "1"
+ case "$resp" in
+ 1)
+ _xcmd="pax -r -pe -z"
+ ;;
+
+ 2)
+ _xcmd="pax -r -pe"
+ ;;
+
+ *)
+ echo "Invalid response: $resp."
+ resp="" # force loop to repeat
+ ;;
+ esac
+ ( cd /mnt; dd if=$TAPE | $_xcmd )
+ done
+ echo "Extraction complete."
+}
+
+get_timezone() {
+ local _a
+ local _zonepath
+
+ #
+ # If the zoneinfo is not on the installation medium or on the
+ # installed filesystem, set TZ to GMT and return immediatly.
+ #
+ if [ ! -e /usr/share/zoneinfo -a ! -e /mnt/usr/share/zoneinfo ]; then
+ TZ=GMT
+ return
+ fi
+ if [ ! -d /usr/share/zoneinfo ]; then
+ _zonepath=/mnt
+ else
+ _zonepath=""
+ fi
+
+cat << \__get_timezone_1
+
+Select a time zone for your location. Timezones are represented on the
+system by a directory structure rooted in "/usr/share/timezone". Most
+timezones can be selected by entering a token like "MET" or "GMT-6".
+Other zones are grouped by continent, with detailed zone information
+separated by a slash ("/"), e.g. "US/Pacific".
+
+To get a listing of what's available in /usr/share/zoneinfo, enter "?"
+at the prompts below.
+
+__get_timezone_1
+ if [ X$TZ = X ]; then
+ TZ=`ls -l /mnt/etc/localtime 2>/dev/null | cutlast`
+ TZ=${TZ#/usr/share/zoneinfo/}
+ fi
+ while :; do
+ echo -n "What timezone are you in [\`?' for list] [$TZ]? "
+ getresp "$TZ"
+ case "$resp" in
+ "")
+ echo "Timezone defaults to GMT"
+ TZ="GMT"
+ break;
+ ;;
+ "?")
+ ls ${_zonepath}/usr/share/zoneinfo
+ ;;
+ *)
+ _a=$resp
+ while [ -d ${_zonepath}/usr/share/zoneinfo/$_a ]; do
+ echo -n "There are several timezones available"
+ echo " within zone '$_a'"
+ echo -n "Select a sub-timezone [\`?' for list]: "
+ getresp ""
+ case "$resp" in
+ "?") ls ${_zonepath}/usr/share/zoneinfo/$_a ;;
+ *) _a=${_a}/${resp}
+ if [ -f ${_zonepath}/usr/share/zoneinfo/$_a ]; then
+ break;
+ fi
+ ;;
+ esac
+ done
+ if [ -f ${_zonepath}/usr/share/zoneinfo/$_a ]; then
+ TZ="$_a"
+ echo "You have selected timezone \"$_a\"".
+ break 2
+ fi
+ echo "'/usr/share/zoneinfo/$_a' is not a valid timezone on this system."
+ ;;
+ esac
+ done
+}
+
+install_sets()
+{
+ local _yup
+ _yup="FALSE"
+
+ # Ask the user which media to load the distribution from.
+ cat << \__install_sets_1
+
+It is now time to extract the installation sets onto the hard disk.
+Make sure the sets are either on a local device (i.e. tape, CD-ROM) or on a
+network server.
+
+__install_sets_1
+
+ if [ "X$local_sets_dir" != "X" ]; then
+ install_from_mounted_fs ${local_sets_dir}
+ if [ X"$_setsdone" != X ]; then
+ _yup="TRUE"
+ fi
+ fi
+
+ # Go on prodding for alternate locations
+ resp="" # force at least one iteration
+ while [ X"${resp}" = X ]; do
+ # If _yup is not FALSE, it means that we extracted sets above.
+ # If that's the case, bypass the menu the first time.
+ if [ X"$_yup" = X"FALSE" ]; then
+ echo -n "Install from (f)tp, (t)ape, (C)D-ROM, (N)FS"
+ echo -n " or local (d)isk? "
+ getresp ""
+ case "$resp" in
+ d*|D*)
+ install_disk
+ ;;
+ f*|F*)
+ install_ftp
+ ;;
+ t*|T*)
+ install_tape
+ ;;
+ c*|C*)
+ install_cdrom
+ ;;
+ n*|N*)
+ install_nfs
+ ;;
+ *)
+ echo "Invalid response: $resp"
+ resp=""
+ ;;
+ esac
+ else
+ _yup="FALSE" # So we'll ask next time
+ fi
+
+ # Give the user the opportunity to extract more sets. They
+ # don't necessarily have to come from the same media.
+ echo ""
+ echo -n "Extract more sets? [n] "
+ getresp "n"
+ case "$resp" in
+ y*|Y*)
+ # Force loop to repeat
+ resp=""
+ ;;
+
+ *)
+ ;;
+ esac
+ done
+}
+
+munge_fstab()
+{
+ local _fstab
+ local _fstab_shadow
+ local _dev
+ local _mp
+ local _fstype
+ local _rest
+
+ # Now that the 'real' fstab is configured, we munge it into a 'shadow'
+ # fstab which we'll use for mounting and unmounting all of the target
+ # filesystems relative to /mnt. Mount all filesystems.
+ _fstab=$1
+ _fstab_shadow=$2
+ ( while read _dev _mp _fstype _rest; do
+ # Skip comment lines
+ case "$_dev" in
+ \#*) continue;;
+ *) ;;
+ esac
+ # and some filesystem types (like there are swap,kernfs,...)
+ case "$_fstype" in
+ ffs|ufs|nfs) ;;
+ *) continue;;
+ esac
+ if [ "$_mp" = "/" ]; then
+ echo $_dev /mnt $_fstype $_rest
+ else
+ echo $_dev /mnt$_mp $_fstype $_rest
+ fi
+ done ) < $_fstab > $_fstab_shadow
+}
+
+mount_fs()
+{
+ # Must mount filesystems manually, one at a time, so we can make
+ # sure the mount points exist.
+ # $1 is a file in fstab format
+ local _fstab
+
+ _fstab=$1
+
+ ( while read line; do
+ set -- $line
+ _dev=$1
+ _mp=$2
+ _fstype=$3
+ _opt=$4
+
+ # If not the root filesystem, make sure the mount
+ # point is present.
+ if [ "X{$_mp}" != X"/mnt" ]; then
+ mkdir -p $_mp
+ fi
+
+ # Mount the filesystem. If the mount fails, exit
+ # with an error condition to tell the outer
+ # later to bail.
+ if ! mount -v -t $_fstype -o $_opt $_dev $_mp ; then
+ # error message displated by mount
+ exit 1
+ fi
+ done ) < $_fstab
+
+ if [ "X${?}" != X"0" ]; then
+ cat << \__mount_filesystems_1
+
+FATAL ERROR: Cannot mount filesystems. Double-check your configuration
+and restart the installation process.
+__mount_filesystems_1
+ exit
+ fi
+}
+
+unmount_fs()
+{
+ # Unmount all filesystems and check their integrity.
+ # Usage: [-fast] <fstab file>
+ local _fast
+ local _fstab
+ local _pid
+
+ if [ "$1" = "-fast" ]; then
+ _fast=1
+ _fstab=$2
+ else
+ _fast=0
+ _fstab=$1
+ fi
+
+ if [ ! \( -f $_fstab -a -s $_fstab \) ]; then
+ echo "fstab empty" > /dev/tty
+ return
+ fi
+
+ if [ $_fast = 0 ]; then
+ echo -n "Syncing disks..."
+ _pid=`twiddle`
+ sync; sleep 4; sync; sleep 2; sync; sleep 2
+ kill $_pid
+ echo "done."
+ fi
+
+ (
+ _devs=""
+ _mps=""
+ # maintain reverse order
+ while read line; do
+ set -- $line
+ _devs="$1 ${_devs}"
+ _mps="$2 ${_mps}"
+ done
+ echo -n "Umounting filesystems... "
+ for _mp in ${_mps}; do
+ echo -n "${_mp} "
+ umount ${_mp}
+ done
+ echo "Done."
+
+ if [ $_fast = 0 ]; then
+ exit
+ fi
+ echo "Checking filesystem integrity..."
+ for _dev in ${_devs}; do
+ echo "${_dev}"
+ fsck -f ${_dev}
+ done
+ echo "Done."
+ ) < $_fstab
+}
+
+check_fs()
+{
+ # Check filesystem integrity.
+ # $1 is a file in fstab format
+ local _fstab
+
+ _fstab=$1
+
+ (
+ _devs=""
+ _mps=""
+ while read line; do
+ set -- $line
+ _devs="$1 ${_devs}"
+ _mps="$2 ${_mps}"
+ done
+
+ echo "Checking filesystem integrity..."
+ for _dev in ${_devs}; do
+ echo "${_dev}"
+ fsck -f ${_dev}
+ done
+ echo "Done."
+ ) < $_fstab
+}
diff --git a/distrib/alpha/ramdisk/list b/distrib/alpha/ramdisk/list
new file mode 100644
index 00000000000..02237d5e03a
--- /dev/null
+++ b/distrib/alpha/ramdisk/list
@@ -0,0 +1,15 @@
+# $OpenBSD: list,v 1.1 1997/05/07 12:46:57 niklas Exp $
+
+# the disktab explanation file
+COPY disktab.preinstall etc
+
+# and the installation tools
+#LINK sbin/init usr/bin/vi
+COPY dot.profile .profile
+COPY dot.instutils .instutils
+COPY install.sh install
+COPY install.md install.md
+COPY install.sub install.sub
+COPY disktab.shadow etc/disktab.shadow
+
+SPECIAL chmod 755 install
diff --git a/distrib/alpha/ramdisk/raminst.conf b/distrib/alpha/ramdisk/raminst.conf
new file mode 100644
index 00000000000..12727ebf4d4
--- /dev/null
+++ b/distrib/alpha/ramdisk/raminst.conf
@@ -0,0 +1,28 @@
+#
+# $OpenBSD: raminst.conf,v 1.1 1997/05/07 12:46:58 niklas 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 less ln ls mkdir mknod mount
+progs mount_cd9660 mount_kernfs mount_ffs mount_nfs
+progs mv newfs pdksh pwd reboot rm route sed sleep sort stty
+progs sync pax test tip umount
+#progs slattach tip vim
+
+#ln vim vi
+ln chown chgrp
+ln fsck_ffs fsck
+ln pdksh sh
+ln pdksh -sh # init invokes the shell this way
+ln test [
+ln mount_ffs ffs
+ln newfs mount_mfs
+ln grep egrep
+ln less more
+
+libs -ledit -lutil -ltermcap -lm -lz
diff --git a/distrib/alpha/runlist.sh b/distrib/alpha/runlist.sh
new file mode 100644
index 00000000000..0348213aa69
--- /dev/null
+++ b/distrib/alpha/runlist.sh
@@ -0,0 +1,13 @@
+# $OpenBSD: runlist.sh,v 1.1 1997/05/07 12:46:50 niklas 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}