This page is no longer being updated. Please visit Aleph 0 Computing
for information on current projects.

The OpenBSD FAQ contains some rudimentary
information on multibooting, in fact enough that I was able to install both
OpenBSD 3.6 (I haven't yet attempted with more recent versions)
and Windows XP on my Dell Inspiron 1100 laptop. The information
in the FAQ is repeated and somewhat expanded upon here; some idiosyncracies
still remained after following the instructions there.

I'll generally assume you're starting from scratch here. I have
no recent experience with hard disk “re-partitioners” like
Partition Magic, FIPS, or GNU Parted. Try them if you
like, but I most certainly find it easier (and safer) to just back up my
important files and reformat the disk.

Personally, I chose to use a minimum amount of space for Windows and the
rest for OpenBSD. That minimum seems to be around 4 GB (a number which has
likely continued to rise for newer versions) for Windows, its
updates, Microsoft Office or OpenOffice.org, Firefox, and miscellaneous
smaller utilities, along with the swap file. Sure, there are probably ways to
make that size smaller, but I'd prefer to spend my time with just a basic
Windows install, not significantly tweaked or changed, for those few times I
have to use it.

Installing Windows XP

Install Windows first. Boot the CD, wait, and repartition your drive to have
an empty primary partition. Depending on your needs, I'd suggest using a
FAT partition instead of NTFS, just because OpenBSD can read and write small
files from and to it more reliably (see the Warning in mount_ntfs(8) for more information). FAT is generally considered
less secure and slower, though, and Windows won't make a FAT partition
larger than 32 GB. However, as I mentioned, a 4 GB one seems to do fine. Make sure
to leave space on the drive for at least the OpenBSD root filesystem;
Windows's boot manager can only boot from the primary hard disk.

The rest of the Windows installation shouldn't significantly differ from
a normal installation. Click, wait, configure, repeat. You might as well
go ahead and do all the updating and application installing; no need to waste
time installing OpenBSD if you end up messing up and needing to start over.

Installing OpenBSD

When you're ready to install OpenBSD, follow the general installation
instructions, with only a couple of caveats. First, when asked if you want
to use the entire hard disk for OpenBSD, be sure to say no! (It's actually
the default.) This will take you to OpenBSD's fdisk(8),
and you can add a partition for OpenBSD. Personally, I just started on the
cylinder after the Windows partition and went to the end of the disk.

Next disklabel(8)
will run to finish preparing the OpenBSD partition. Most importantly,
don't delete the Windows partition that's already labelled;
on my machine (and on most), it's partition i. Add your OpenBSD
filesystems around it, and go on to naming the mountpoints.

Again, the rest of installation shouldn't really depend on this being
a dual-boot machine. Finish up, and we'll make a few more changes before
we're done.

Using the Windows XP boot manager

This is really just as described in the
FAQ. To boot into OpenBSD, use the CD again, but at the boot>
prompt, enter boot hd0a:/bsd. Login as root. Enter
dd if=/dev/rwd0a of=openbsd.pbr bs=512 count=1, changing
rwd0a to rsd0a if you boot from a SCSI hard disk.
If you formatted your Windows XP partition as FAT, mount that partition and
copy the file over. If you chose NTFS, use a network or writable media to
transfer the file.

Finally, remove the OpenBSD boot CD, and reboot into Windows. Open the
Start Menu, right-click on My Computer, and choose “Properties”.
Click on the “Advanced” tab, click the “Settings”
button under “Startup Recovery”, and under “System
Startup” click “Edit”. Add
C:\openbsd.pbr="OpenBSD" to the end of the file, and save it.
Reboot, and you should have a simple dual-boot menu.

Local time hardware clock

Next, there's no way to tell Windows XP that the computer's
hardware clock is set to anything other than local time. That is, the time
that's displayed in the “system tray” is the same time
that's saved in the internals of the computer. However, OpenBSD assumes
that the hardware clock time is Universal time, or UTC (also known as GMT).
Therefore, we need to tell OpenBSD that's not actually the case.

We do this by configuring the OpenBSD kernel to offset the hardware clock
time by some amount. This doesn't actually require a kernel recompile;
since OpenBSD 2.6 the config(8)
tool allows changes to be made to an already-compiled kernel. First, identify
the offset from UTC; I live in Los Angeles, so we're 8 hours behind UTC
during the winter (that is, Pacific Standard Time). That's 480 minutes.
Therefore, we will set an offset of 480 minutes. If you're ahead
of UTC, like, say, Budapest, the offset will be negative.

Then, as root, enter config -e -f /bsd. At
the prompt, enter timezone 480, substituting whatever number is
appropriate. If you're currently under daylight saving time (during the summer), use timezone 480 1. Enter quit, reboot, and
you're all set.