dnl $OpenBSD: install,v 1.16 2002/04/17 23:32:09 miod Exp $ OpenBSDInstallPrelude There are several ways to install OpenBSD onto a disk. The easiest way in terms of preliminary setup is to use the OpenBSD ramdisk kernel that can be booted from tape. Alternatively, if your MACHINE is hooked up in a network you can find a server to arrange for a diskless setup, which is a convenient way to install on a machine whose disk does not currently hold a usable operating system. This is difficult to get set up correctly the first time, but easy to use afterwards. (see ``Installing using a diskless setup'' below). Booting from the Installation Media: Prior to attempting an installation, you should make sure that everything of value on the target system has been backed up. While installing OpenBSD does not necessarily wipe out all the partitions on the hard disk, errors during the install process can have unforeseen consequences and you will probably render the system unbootable if you start, but do not complete the installation. Having the installation media for the prior installation, like a Motorola SystemV/MACHINE tape is good insurance if you want to be able to "go back" for some reason. After taking care of all that, bring your system down gracefully using the shutdown(8) and/or halt(8) commands. This will get you to the BUG prompt. Booting from SCSI tape: After creating the boot tape, boot it by typing the appropriate command at the PROM: 167-bug> bo xx yy Where `xx' is the SCSI controller number (00 for the built-in SCSI controller), and `yy' is ten times the tape drive ID, except for the MVME147, where `xx' should be the tape drive ID, and `yy' should be 00. For example, booting from a tape drive using SCSI id 4: 147-bug> bo 04 00 for a MVME147, and 167-bug> bo 00 40 for any other MACHINE board. Installing using a diskless setup: First, you must setup a diskless client configuration on a server. If you are using a OpenBSD system as the boot-server, have a look at the diskless(8) manual page for guidelines on how to proceed with this. If the server runs another operating system, you'll have to consult documentation that came with it (on SunOS systems, add_client(8) and the Sun System/Networks administrators guide constitute a good start; on Solaris systems, share(1M) is a good starting point as well). You should then setup your workstation using the NIOT command at the BUG prompt. The Load Address should be 0x3F0000, and the Execution Address should be 0x3F0000 as well. You may now boot your workstation from the server by entering the NBO command at the BUG prompt: 167-bug> nbo 00 00 bsd.rd If your BUG version does not understand the NIOT and NBO commands (most MVME147 don't), you will have to boot via S-Records. Booting from S-Records: First, you must setup a diskless client configuration on a server. If you are using a OpenBSD system as the boot-server, have a look at the diskless(8) manual page for guidelines on how to proceed with this. If the server runs another operating system, you'll have to consult documentation that came with it (on SunOS systems, add_client(8) and the Sun System/Networks administrators guide constitute a good start; on Solaris systems, share(1M) is a good starting point as well). Second, make sure you use a terminal emulator able to read files from the local machine and send their contents over the serial link. OpenBSD ships with both cu(1) and tip(1), but others can be used. After reseting your MACHINE board, enter "LO" at the BUG prompt. If you get an error message, switch directories (enter "SD") and retry. The MACHINE should be awaiting a S-Record program now. From your terminal emulator, send the contents of the ``sboot'' file over the line. Depending on the speed of the serial link, this will take some time, but no more than a couple of minutes. If you don't get a prompt back after a few minutes, send a break, reset your MACHINE board, and retry. When the transfer is finished, enter "GO" at the BUG prompt. The S-Records boot loader will start. This is a very crude bootloader which will attempt to fetch a secondary boot program via TFTP requests, like the NBO command. This will cause the kernel provided by the diskless setup to be booted. After the initial probe messages you'll asked to start the install or upgrade procedure. Installing using the tape or netboot procedure: OpenBSDInstallPart2 Boot your machine from the installation media as described above. It will take a while to load the kernel especially from a floppy or slow network connection, most likely more than a minute. If some action doesn't eventually happen, or the spinning cursor has stopped and nothing further has happened, either your boot media is bad, your diskless setup isn't correct, or you may have a hardware or configuration problem. OpenBSDBootMsgs While booting, you will probably see several warnings. You may be warned that the kernel can't figure out what device it booted from. Do not be alarmed, this is completely normal. This warning occurs because while OpenBSD/MACHINE can boot from the floppy drive, the kernel itself lacks a floppy driver for some MACHINE models. You will next be asked for your terminal type. You should choose the terminal type from amongst those listed. (If your terminal type is xterm, just use vt100). OpenBSDInstallPart3 OpenBSDInstallPart4 OpenBSDInstallPart5(sd0) OpenBSDInstallNet({:-CD-ROM, NFS, -:}) OpenBSDFTPInstall OpenBSDHTTPInstall OpenBSDTAPEInstall(4) OpenBSDCDROMInstall OpenBSDNFSInstall OpenBSDDISKInstall(,{:-only -:}) OpenBSDCommonFS OpenBSDCommonURL OpenBSDCongratulations Net Boot or Diskless Setup Information: The set up is similar to SunOS diskless setup, but not identical, because the Sun setup assumes that the bootblocks load a kernel image, which then uses NFS to access the exported root partition, while the OpenBSD bootblocks use internal NFS routines to load the kernel image directly from the exported root partition. Please understand that no one gets this right the first try, since there is a lot of setup and all the host daemons must be running and configured correctly. If you have problems, extract the diskless(8) manpage, find someone who's been through it before and use the host syslog and tcpdump(8) to get visibility of what's happening (or not). Your MACHINE expects to be able to download a second stage bootstrap program via TFTP after having acquired its IP address through RevARP when instructed to boot "over the net". It will look for a filename composed of the machine's IP address followed by the machine's architecture, separated by a period. For example, a MACHINE board which has been assigned IP address 130.115.144.11, will make an TFTP request for `8273900B.MACHINE'. Normally, this file is a symbolic link to an appropriate second-stage boot program, which should be located in a place where the TFTP daemon can find it (remember, many TFTP daemons run in a chroot'ed environment). You can find the boot program in `/usr/mdec/netboot' in the OpenBSD/MACHINE distribution. After the boot program has been loaded into memory and given control by the BUG, it starts locating the machine's remote root directory through the BOOTPARAM protocol. First a BOOTPARAM WHOAMI request is broadcast on the local net. The answer to this request (if it comes in) contains the client's name. This name is used in next step, a BOOTPARAM GETFILE request -- sent to the server that responded to the WHOAMI request -- requesting the name and address of the machine that will serve the client's root directory, as well as the path of the client's root on that server. Finally, this information (if it comes in) is used to issue a REMOTE MOUNT request to the client's root filesystem server, asking for an NFS file handle corresponding to the root filesystem. If successful, the boot program starts reading from the remote root filesystem in search of the kernel which is then read into memory. Unpack `base{:--:}OSrev.tgz' and `etc{:--:}OSrev.tgz' on the server in the root directory for your target machine. If you elect to use a separately NFS-mounted filesystem for `/usr' with your diskless setup, make sure the "./usr" base files in base{:--:}OSrev.tgz end up in the correct location. One way to do this is to temporarily use a loopback mount on the server, re-routing /usr to your server's exported OpenBSD "/usr" directory. Also put the kernel and the install/upgrade scripts into the root directory. A few configuration files need to be edited: /etc/hosts Add the IP addresses of both server and client. /etc/myname This files contains the client's hostname; use the same name as in /etc/hosts. /etc/fstab Enter the entries for the remotely mounted filesystems. For example: server:/export/root/client / nfs rw 0 0 server:/export/exec/MACHINE.OpenBSD /usr nfs rw 0 0 Now you must populate the the `/dev' directory for your client. If you server runs SunOS 4.x, you can simply change your working directory to `/dev' and run the MAKEDEV script: `sh MAKEDEV all' (this might require the edition of MAKEDEV to change the PATH for it to work properly). On SunOS 5.x systems, MAKEDEV can also be used, but there'll be error messages about unknown user and groups. These errors are inconsequential for the purpose of installing OpenBSD. However, you may want to correct them if you plan to the diskless setup regularly. In that case, you may re-run MAKEDEV on your OpenBSD machine once it has booted.