OpenBSD-4.6/distrib/notes/sparc/install

dnl	$OpenBSD: install,v 1.69 2009/05/13 18:38:29 miod Exp $
OpenBSDInstallPrelude({:-SMD disks-:})

There are several ways to install OpenBSD onto a disk. The easiest way
in terms of preliminary setup is to use the OpenBSD miniroot that can
be booted off your local disk's swap partition. The normal way is to
use the OpenBSD CD-ROM, or the bootable CD-ROM mini image, or an
installation floppy, or an installation tape, depending on your hardware.

If your SPARC is hooked up to a network, try and find a server to
arrange for a diskless setup. This 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.)

It is also possible to install OpenBSD "manually" from a running SunOS
or Solaris system, using the system tools, as well as gunzip (and gnu tar
on SunOS); see ``Installing from SunOS'' or ``Installing from Solaris''
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,
be it a SunOS or OpenBSD CD-ROM or OpenBSD install diskettes, 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 monitor
prompt.  Sun PROM monitor commands and setup differ considerably depending
on the system architecture and age; you may needed to reference the PROM
monitor manual for your system for details.

There are four main cases:

	sun4 (older servers, deskside workstations):
		prompt is a ">", boot command is "b", uses sd(c,s,p) syntax
		with s defined as scsi-unit*8+lun in hex
	OpenBoot Version 1 (newer servers, desktop workstations):
		prompt is "ok", boot command is "boot" uses sd(c,s,p) syntax
		with s defined as scsi-unit.
	OpenBoot Version 2 (newer servers, desktop workstations):
		prompt is "ok", boot command is "boot" uses diskn:p syntax.
        OpenBoot Version 2 (certain newer desktop workstations):
		prompt is "ok", boot command is "boot" uses diskn syntax
		unless booting from a non-standard partition, in which case:
		boot /sbus/esp/sd@t,0:p bsd  (where "t" is the scsi target,
		and "p" is the partition.  examples would be t="3" and p="b")

	
If you expect your workstation to have an OpenBoot Prom but get a ">",
enter the "n" command to enter the "new command mode".  You can set this
as the default by doing a "setenv sunmon-compat? false" command, followed
by a "reset" command.

Note that OpenBoot Proms also do the Sun SCSI-ID shuffle for disks; this
is described elsewhere in some detail.  For the purposes of this section,
drive 0 refers to the internal or first SCSI drive, which usually has a
SCSI-ID of 3.


Booting from Floppy Disk installation media:

        ok boot fd()bsd         # for version 1 OpenBOOT ROMs
        ok boot floppy bsd      # for version 2 OpenBOOT ROMs

This will cause the kernel contained in the floppy to be booted.


Booting from CD-ROM installation media:

	> b sd(,30,0)OSREV/MACHINE/bsd.rd		# for Sun4 monitors*
						# (not working currently)
	ok boot sd(,6,0)OSREV/MACHINE/bsd.rd	# for version 1 OpenBOOT ROMs
	ok boot cdrom OSREV/MACHINE/bsd.rd	# for version 2 OpenBOOT ROMs

If the boot is successful, you will get a loader version message,
executable sizes, and then the kernel copyright and device probe
messages.  Boot failure modes are typically a lot of CD-ROM drive
activity, but no messages or complaints about magic numbers,
checksums or formats.

Not all MACHINE systems support bootable CD-ROM and the current
boot image is only known to work on sun4c and sun4m architectures.
If it does not work, you'll have to create a boot floppy or bootable
hard disk using the instructions under preparing boot media.


Booting from SCSI disk (miniroot or floppy image):

Boot the miniroot by typing the appropriate command at the PROM:

	> b sd(,,1)bsd 			# for sun4 monitors*
	ok boot sd(,,1)bsd 		# for version 1 OpenBOOT ROMs
	ok boot disk:b bsd 		# for version 2 OpenBOOT ROMs
	ok boot /sbus/esp/sd@3,0:b bsd  # for version 2 OpenBOOT ROMs
					# that won't take disk:p syntax.

If you've loaded the miniroot onto some other disk than the default
drive 0, modify the boot specifier accordingly, keeping in mind the
drive vs. SCSI-ID shuffling and partition a=0, b=1...

        > b sd(0,10,1)bsd       # example - scsi target 2 on sun4 monitors*
	ok boot sd(0,3,1)bsd	# example - scsi target 0 on v1 OpenBOOT ROM
	ok boot disk3:b bsd     # example - scsi target 0 on v2 OpenBOOT ROM
	ok boot /sbus/esp/sd@0,0:b bsd  # example - scsi target 0 on v2
					# OpenBOOT ROM that won't take
					# disk:p syntax.

(*) for sun4 this is scsi-target*8+scsi-lun (usually 0) expressed in hex...


Booting from SCSI tape:

Boot the miniroot by typing the appropriate command at the PROM:

	> b st(,,1)			# for sun4 monitors
					# (not working currently)
	ok boot st(,,1)			# for version 1 OpenBOOT ROMs
	ok boot tape:1			# for version 2 OpenBOOT ROMs
	ok boot /sbus/esp/st@4,0:1	# for version 2 OpenBOOT ROMs
					# that won't take tape:n syntax.
	
The above instructions assume your tape drive is the default tape drive
using SCSI ID 4. If your drive uses ID 5, modify the boot command
accordingly:

	> b st(,28,1)		# example - 2nd tape drive on sun4 monitors
	ok boot st(,5,1)	# example - 2nd tape drive on v1 OpenBOOT ROM
	ok boot tape1:1		# example - 2nd tape drive on v2 OpenBOOT ROM
	ok boot /sbus/esp/st@5,0:1	# example - 2nd tape drive on v2
					# OpenBOOT ROM that won't take
					# tape:n syntax
	


Installing using a diskless setup:

First, you must set up a diskless client configuration on a server. If
you are using an 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).


Boot your workstation from the server by entering the appropriate `boot'
command at the monitor prompt. Depending on the PROM version in your machine,
this command takes one of the following forms:

	> b le()bsd.rd		# for sun4 monitors
	ok boot le()bsd.rd	# for version 1 OpenBOOT ROMs
	ok boot net bsd.rd	# for version 2 OpenBOOT ROMs


Installing using the Floppy, CD-ROM, tape, miniroot 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.

OpenBSDInstallPart3(SMD drives are noisy and weight a ton per kilobyte and scare
		cats,"sd0" for SCSI drives,{:-and "xd0" or "xy0"
	for SMD drives-:})

OpenBSDInstallPart4

OpenBSDInstallPart5

OpenBSDInstallPart6({:-CD-ROM, -:})

OpenBSDURLInstall

OpenBSDCDROMInstall
		
OpenBSDDISKInstall(,{:-only -:})

OpenBSDCommonInstall

OpenBSDTAPEInstall(2)

OpenBSDInstallWrapup

After completing an installation:

Now try a reboot.  (If needed, swap your SCSI IDs first.)
The Sun monitor normally tries to load a file called "vmunix".
On OpenBOOT ROM systems you can change it to load OpenBSD instead using
the following commands:

On version 1 OpenBOOT ROMs:
    >n
    ok setenv boot-from sd(0,0,0)bsd
    ok

On version 2 OpenBOOT ROMs:
    ok setenv boot-file bsd
    ok setenv boot-device /sbus/esp/sd@0,0

On sun4 systems, you may not need to specify the boot file, as
the OpenBSD boot blocks will look for "bsd" on the boot device by default.

OpenBSDCongratulations


Installing from SunOS:

You need a SunOS machine to install OpenBSD.  You also need at
least the following pieces:

  - the *.tgz files you want to install (as a minimum, base{:--:}OSrev.tgz and
    etc{:--:}OSrev.tgz)
  - gunzip (GNU gzip) SunOS binary
  - gtar (GNU tar) SunOS binary
  - a "/boot" file from a SunOS machine that matches your machine type
    (e.g. sun4m or sun4c)
  - an OpenBSD kernel, most likely "/bsd"

All these pieces, except "/boot" and the GNU utilities, are supplied in
the OpenBSD/MACHINE distribution.

You need to format and partition the disk using SunOS (since
OpenBSD/MACHINE uses SunOS disk labels.)  Give yourself adequate
partition sizes.  Here is an example layout:

    partition    size   offset	  will be..
    sd0a        80000        0	  /
    sd0b       256000    80000	  swap
    sd0c      4165271        0	  `whole disk'
    sd0d       100000   436000    /var
    sd0f       100000   336000    /tmp
    sd0g      3229271   936000    /usr
    sd0h       400000   536000    /var/tmp

Use SunOS to newfs the partitions which will have filesystems on them.
(OpenBSD's filesystem format is almost identical to SunOS.)

    sunos# newfs /dev/rsd0a
    [... lots of output]

Repeat for any other partition (in this example, /dev/rsd0d, /dev/rsd0f,
/dev/rsd0g, /dev/rsd0h).

NOTE: If you are able to, there is a performance benefit from
newfs'ing using OpenBSD.  If you newfs using the OpenBSD newfs command,
be sure to use the -O flag for your / partition, so that newfs will
use the 4.3BSD filesystem format, rather than the new 4.4BSD filesystem
format.  If you forget, you will not be able to boot -- the SunOS boot
blocks do not understand the extended 4.4BSD filesystem format.

Mount those partitions in a tree formation, under /mnt; ie:

    sunos# df
    Filesystem            kbytes    used   avail capacity  Mounted on
    [...]
    /dev/sd0a              38427       0   38427     0%    /mnt
    /dev/sd0d              48249       0   48249     0%    /mnt/var
    /dev/sd0f              48249       0   48249     0%    /mnt/tmp
    /dev/sd0g            1564024       0 1564024     0%    /mnt/usr
    /dev/sd0h             193536       0  193536     0%    /mnt/var/tmp

Place a standard SunOS "boot" program in /mnt (your new root
partition), and use the SunOS command "installboot" to make it work.
The installboot man page says to do something like this:

    sunos# cp /usr/mdec/sdboot /mnt/boot
    sunos# sync; sync
    sunos# /usr/mdec/installboot -vlt /mnt/boot /usr/mdec/bootsd /dev/rsd2a

You can now extract the provided "*.tgz" files onto your disk.

    sunos# ls -FC
    base{:--:}OSrev.tgz      comp{:--:}OSrev.tgz   man{:--:}OSrev.tgz       xfont{:--:}OSrev.tgz
    bsd             etc{:--:}OSrev.tgz    misc{:--:}OSrev.tgz      xserv{:--:}OSrev.tgz
    bsd.scsi3       game{:--:}OSrev.tgz   xbase{:--:}OSrev.tgz
    sunos{:-#-:} gunzip < base{:--:}OSrev.tgz | (cd /mnt; gtar xvpf -)
    [...] for each set

And finally copy an OpenBSD kernel (either bsd or bsd.scsi3) onto your disk.

    sunos# cp bsd.scsi3 /mnt/bsd

The GNU gunzip and gtar programs are not distributed as part of SunOS,
but may be present in your /usr/local/bin.  If not, you will need to
obtain them from a GNU archive and install before proceeding.  The
OpenBSD tar files are in the "new format" that includes directory
information, and the standard SunOS tar will not extract from them
successfully.

After the files have been extracted, set up /mnt/etc/fstab to match
your actual disk layout.  (Minus the "/mnt" component of each path, of
course :-)

Now proceed to reboot the machine and then customize your installation.


Installing from Solaris:

You need a machine running under Solaris to install OpenBSD.  You will
also need at least the following pieces:

- the *.tgz files you want to install (as a minimum, base{:--:}OSrev.tgz and
  etc{:--:}OSrev.tgz)
- gunzip (GNU gzip) Solaris binary
- a boot block file from a Solaris machine that matches your machine type,
  for ufs filesystem, such as /usr/platform/`uname -i`/lib/fs/ufs/bootblk
- an OpenBSD kernel, most likely "/bsd"

All these pieces, except the boot block and the GNU utilities, are supplied
in the OpenBSD/MACHINE distribution.

You need to format and partition the disk using Solaris (since
OpenBSD/MACHINE uses Sun compatible disk labels).  Give yourself adequate
partition sizes.  Here is an example layout:

    solaris# prtvtoc -s /dev/rdsk/c0t1d0s2
    *                          First     Sector    Last
    * Partition  Tag  Flags    Sector     Count    Sector  Mount Directory
           0      2    00          0     80000     79999   /
           1      3    01      80000    256000    335999
           2      5    00          0   4165271   4165270
           3      7    00     336000    100000    435999   /tmp
           4      7    00     436000    100000    535999   /var
           5      7    00     536000    400000    935999   /var/tmp
           6      4    00     936000   3229271   4165270   /usr

Use Solaris to newfs the partitions which will have filesystems on them.
(OpenBSD's filesystem format is almost identical to Solaris.)

    solaris# newfs /dev/rdsk/c0t1d0s0
    [... lots of output]

Repeat for any other partition (in this example, /dev/rdsk/c0t1d0s3,
/dev/rdsk/c0t1d0s4, /dev/rdsk/c0t1d0s5 and /dev/rdsk/c0t1d0s6).

dnl XXX I had no time to check the -O restriction is still necessary.
NOTE: If you are able to, there is a performance benefit from
newfs'ing using OpenBSD.  If you newfs using the OpenBSD newfs command,
be sure to use the -O flag for your / partition, so that newfs will
use the 4.3BSD filesystem format, rather than the new 4.4BSD filesystem
format.  If you forget, you will not be able to boot -- the Solaris boot
blocks do not understand the extended 4.4BSD filesystem format.

Mount those partitions in a tree formation, under /mnt; ie:

    solaris# df -k
    Filesystem            kbytes    used   avail capacity  Mounted on
    [...]
    /dev/dsk/c0t1d0s0      38427       0   38427     0%    /mnt
    /dev/dsk/c0t1d0s3      48249       0   48249     0%    /mnt/tmp
    /dev/dsk/c0t1d0s4      48249       0   48249     0%    /mnt/var
    /dev/dsk/c0t1d0s5     193536       0  193536     0%    /mnt/var/tmp
    /dev/dsk/c0t1d0s6    1564024       0 1564024     0%    /mnt/usr

Place the boot block in /mnt (your new root partition), and use the Solaris
command "installboot" to make it work.
The installboot man page says to do something like this:

    solaris# cp /usr/platform/`uname -i`/lib/fs/ufs/bootblk /mnt/bootblk
    solaris# sync; sync
    solaris# /usr/sbin/installboot /mnt/bootblk /dev/rdsk/c0t1d0s0

You can now extract the provided "*.tgz" files onto your disk.

    solaris# ls -FC
    base{:--:}OSrev.tgz      comp{:--:}OSrev.tgz   man{:--:}OSrev.tgz       xfont{:--:}OSrev.tgz
    bsd             etc{:--:}OSrev.tgz    misc{:--:}OSrev.tgz      xserv{:--:}OSrev.tgz
    bsd.scsi3       game{:--:}OSrev.tgz   xbase{:--:}OSrev.tgz
    solaris{:-#-:} gunzip < base{:--:}OSrev.tgz | (cd /mnt; tar xvpf -)
    [...] for each set

And finally copy an OpenBSD kernel (either bsd or bsd.scsi3) onto your disk.

    solaris# cp bsd.scsi3 /mnt/bsd

The GNU gunzip program is not distributed as part of Solaris, but may be
present in your /usr/local/bin.  If not, you will need to obtain it from a
GNU archive and install before proceeding.

After the files have been extracted, set up /mnt/etc/fstab to match
your actual disk layout.  (Minus the "/mnt" component of each path, of
course :-)

Now proceed to reboot the machine and then customize your installation.


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 SPARCstation 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 sun4c machine which has been assigned IP
address 130.115.144.11, will make a TFTP request for `8273900B.SUN4C'.
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/boot' in the OpenBSD/MACHINE
distribution. Unfortunately, it is necessary to install this file
differently for sun4 and sun4c clients: the sun4 version needs to have its
`a.out' header stripped off (otherwise the machine will crash), while the
sun4c version must retain it (otherwise the PROM will complain).

Here's an example to illustrate this whole mess:

    server# cd /<client-root-dir>/usr/mdec
    if client is a sun4:
	server# set SKIP=1
	server# set KARCH=SUN4
    else
	server# set SKIP=0
	server# set KARCH=SUN4C
    server# dd if=boot of=/tftpboot/boot.MACHINE.OpenBSD.$KARCH skip=$SKIP bs=32
    server# cd /tftpboot
    server# ln -s boot.MACHINE.OpenBSD.$KARCH 8273900B.$KARCH


After the boot program has been loaded into memory and given control by
the PROM, 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 the 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.

You will want export the miniroot{:--:}OSrev.fs filesystem to the client.  You
can dd this filesystem image to some spare partition, mount and export
that partition, or use tar to copy the contents to a more convenient spot.

Alternatively you can build a bootable partition from the distribution sets
as follows:

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 <root>/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:

	<root>/etc/hosts
		Add the IP addresses of both server and client.

	<root>/etc/myname
		This files contains the client's hostname; use the same
		name as in <root>/etc/hosts.

	<root>/etc/fstab
		Enter the entries for the remotely mounted filesystems.
		For example:
			server:/export/root/client       /     nfs  rw 0 0
			server:/export/exec/sun4.OpenBSD /usr  nfs  rw 0 0

OpenBSDInstNFS