diff options
-rw-r--r-- | distrib/alpha/Makefile | 5 | ||||
-rw-r--r-- | distrib/alpha/Makefile.inc | 3 | ||||
-rw-r--r-- | distrib/alpha/ecoffrdsetroot.c | 212 | ||||
-rw-r--r-- | distrib/alpha/inst-common/Makefile.inc | 31 | ||||
-rw-r--r-- | distrib/alpha/inst-common/dot.commonutils | 129 | ||||
-rw-r--r-- | distrib/alpha/inst-common/list | 81 | ||||
-rw-r--r-- | distrib/alpha/inst-common/mtree.conf | 79 | ||||
-rw-r--r-- | distrib/alpha/inst-common/raminst.conf | 23 | ||||
-rw-r--r-- | distrib/alpha/inst-common/termcap.vt | 67 | ||||
-rw-r--r-- | distrib/alpha/list2sh.awk | 39 | ||||
-rw-r--r-- | distrib/alpha/ramdisk/Makefile | 62 | ||||
-rw-r--r-- | distrib/alpha/ramdisk/disktab.preinstall | 32 | ||||
-rw-r--r-- | distrib/alpha/ramdisk/disktab.shadow | 32 | ||||
-rw-r--r-- | distrib/alpha/ramdisk/dot.instutils | 154 | ||||
-rw-r--r-- | distrib/alpha/ramdisk/dot.profile | 49 | ||||
-rw-r--r-- | distrib/alpha/ramdisk/install.md | 267 | ||||
-rw-r--r-- | distrib/alpha/ramdisk/install.sh | 413 | ||||
-rw-r--r-- | distrib/alpha/ramdisk/install.sub | 1335 | ||||
-rw-r--r-- | distrib/alpha/ramdisk/list | 15 | ||||
-rw-r--r-- | distrib/alpha/ramdisk/raminst.conf | 28 | ||||
-rw-r--r-- | distrib/alpha/runlist.sh | 13 |
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} |