OpenBSD FAQ - Installation Guide [FAQ Index]



Overview of the Installation Procedure

The OpenBSD installer uses a special ramdisk kernel (bsd.rd) that spawns a live environment running entirely in memory. It contains the install script and a small number of utilities needed to perform a complete installation. These utilities can also be useful for disaster recovery.

The ramdisk kernel can be booted from a number of different sources:

Not every platform supports all of these options.

If you have a running OpenBSD system, bsd.rd is all you need to reinstall or upgrade to a newer version. To do so, download and verify the new bsd.rd, place it on an existing filesystem, and boot from it. The general method of booting bsd.rd is to change your boot kernel from /bsd to /bsd.rd through whatever means used on your platform.

Booting from bsd.rd on an amd64 system can be done like so:

Using drive 0, partition 3.
Loading......
probing: pc0 com0 com1 mem[638K 1918M a20=on]
disk: hd0+ hd1+
>> OpenBSD/amd64 BOOT 3.33
boot> bsd.rd
This will boot the kernel named bsd.rd from the first partition of the first recognized hard disk.

If you need to specify a different drive or partition, just prefix the kernel name with its location. The following example would boot from the fourth partition of the second hard drive:

Using drive 0, partition 3.
Loading......
probing: pc0 com0 com1 mem[638K 1918M a20=on]
disk: hd0+ hd1+
>> OpenBSD/amd64 BOOT 3.33
boot> boot hd1d:/bsd.rd
OpenBSD boot loaders are documented in the architecture-specific boot(8) man pages.

Pre-Installation Checklist

Before you start, you should have some idea what you want to end up with. A few things worth considering beforehand:

Downloading OpenBSD

The following installation images are available:

install76.img A disk image that can be written to a USB flash drive or similar device. Includes the file sets.
amd64 | arm64 | i386 | octeon | powerpc64 | riscv64 | sparc64
miniroot76.img The same as above, but file sets are not included. They can be pulled down from the internet or from a local disk.
alpha | amd64 | arm64 | armv7 | i386 | landisk | loongson | luna88k | octeon | powerpc64 | riscv64 | sparc64
install76.iso An ISO 9660 image that can be used to create an install CD/DVD. Includes the file sets.
alpha | amd64 | arm64 | hppa | i386 | macppc | powerpc64 | sparc64
cd76.iso The same as above, but file sets are not included.
alpha | amd64 | hppa | i386 | loongson | macppc | sparc64
floppy76.img Supports some older machines that lack other booting options.
amd64 | i386 | sparc64

Images can also be downloaded from a number of alternate mirror sites.

An SHA256 file containing checksums can be found in the same directory as the installation files. You can confirm that none of the downloaded files were mangled in transit using the sha256(1) command.

$ sha256 -C SHA256 miniroot*.img
(SHA256) miniroot76.img: OK
Or, if you're using the GNU coreutils:
$ sha256sum -c --ignore-missing SHA256
miniroot76.img: OK
However, this only checks for accidental corruption. You can use signify(1) and the SHA256.sig file to cryptographically verify the downloaded image.
$ signify -Cp /etc/signify/openbsd-76-base.pub -x SHA256.sig miniroot*.img
Signature Verified
miniroot76.img: OK
Note that the signify package on other operating systems may not include the required public key, or it may be installed in another location.

The install76.iso and install76.img images do not contain an SHA256.sig file, so the installer will complain that it can't check the signature of the included sets:

Directory does not contain SHA256.sig. Continue without verification? [no]
This is because it would make no sense for the installer to verify them. If someone were to make a rogue installation image, they could certainly change the installer to say the files were legitimate. If the image's signature has been verified beforehand, it is safe to answer "yes" at that prompt.

Creating Install Media

Flash Drives

A bootable USB flash drive can be created by attaching the target device and copying over the image with dd(1).

Using OpenBSD, assuming the device was recognized as sd6:

# dd if=install*.img of=/dev/rsd6c bs=1M
Note that the raw I/O device is used: rsd6c rather than sd6c.

Details of this will vary on other platforms. If you're using a different OS, be sure to select the appropriate device name: /dev/sdX on Linux or /dev/rdiskX on macOS for example.

CD-ROMs

You can create a bootable CD-ROM on OpenBSD by using cdio(1).
# cdio tao cd*.iso

Performing a Simple Install

If you need instructions on booting from your preferred media, check the relevant platform page of your machine.

The installer is designed to install OpenBSD in a very usable default configuration with a minimum of user intervention. In fact, you can often just hit <Enter> to get a good OpenBSD install, moving your hands to the rest of the keyboard only to enter the root password.

After the dmesg(8) is shown, you will see the first installer question:

...
root on rd0a swap on rd0b dump on rd0b
erase ^?, werase ^W, kill ^U, intr ^C, status ^T

Welcome to the OpenBSD/amd64 7.6 installation program.
(I)nstall, (U)pgrade, (A)utoinstall or (S)hell?
Choose (I)nstall and follow the instructions.

File Sets

The complete OpenBSD installation is broken up into a number of file sets:

bsd The kernel (required)
bsd.mp The multi-processor kernel (only on some platforms)
bsd.rd The ramdisk kernel
base76.tgz The base system (required)
comp76.tgz The compiler collection, headers and libraries
man76.tgz Manual pages
game76.tgz Text-based games
xbase76.tgz Base libraries and utilities for X11 (requires xshare76.tgz)
xfont76.tgz Fonts used by X11
xserv76.tgz X11's X servers
xshare76.tgz X11's man pages, locale settings and includes

New users are recommended to install all of them.

Some libraries from xbase76.tgz, like freetype or fontconfig, can be used outside of X by programs that manipulate text or graphics. Such programs will usually need fonts, either from xfont76.tgz or font packages. For the sake of simplicity, the developers decided against maintaining a minimal xbase76.tgz set that would allow most non-X ports to run.

Adding a File Set After Install

If you chose to skip some file sets at install time, you might realize later that you really do need them after all. Simply boot bsd.rd from your root file system and choose (U)pgrade. When you get to the list of file sets, select the ones you need.

Disk Partitioning

OpenBSD can be installed in as little as 512MB, but using a device that small is something for advanced users. Until you have some experience, 8GB or more disk space is recommended.

Unlike some other operating systems, OpenBSD encourages users to split their disk into a number of partitions, rather than just one or two large ones. Some of the reasons for doing so are:

The installer will create a partitioning plan based on the size of your hard disk. While this will not be a perfect layout for all people, it provides a good starting point for figuring out what you need. Read about disklabel's defaults for automatic disk allocation and the hier(7) man page before making decisions about custom partitioning schemes.

Bootstrapping Wireless Firmware

For licensing reasons, some firmware cannot be directly distributed with OpenBSD. The fw_update(8) tool will automatically download and install any missing firmware, but this requires a working internet connection.

In the case of certain hardware configurations, such as a laptop with no ethernet port, the user will have to manually download and install the firmware in order to get online for the first time. This can be done pre-installation, by adding the firmware files to the install media, or after the OS has been installed from a CD or disk.

Adding firmware files to the install media will not enable the hardware during the installation process. They will be added to the target disk, so the hardware can be used after the first boot into the installed system.

Start by finding the wireless adapter's interface name with dmesg(8).

From an existing OpenBSD installation, mount the install image as a vnode disk with vnconfig(8) and use fw_update(8) to download the required files to it. This example uses firmware for an iwm(4) card:

# vnconfig install76.img
vnd0
# mount /dev/vnd0a /mnt
# cd /mnt
# fw_update -Fv iwm
Get/Verify iwm-firmware-20240410.tgz ... done.
fw_update: download iwm
# cd /
# umount /mnt
# vnconfig -u vnd0
The resulting file can then be used to create a bootable install image with the necessary firmware.

If you don't have an existing OpenBSD system with internet access, use another computer to download the appropriate file from http://firmware.openbsd.org/firmware/ and put it on a USB drive that's readable by OpenBSD. Then, on the OpenBSD machine, mount(8) the drive and use fw_update(8) to install it from there.

Sending Your dmesg After the Install

After a successful install, look at the output of the dmesg(8) command and see if anything stands out. If a device shows up as not configured, this means that it is not currently supported by the kernel. This may be improved in the future by sending the dmesg. A quote from /usr/src/etc/root/root.mail:
If you wish to ensure that OpenBSD runs better on your machines, please do us
a favor (after you have your mail system configured!) and type something like:

# (dmesg; sysctl hw.sensors) | \
   mail -s "Sony VAIO 505R laptop, apm works OK" [email protected]

so that we can see what kinds of configurations people are running.  As shown,
including a bit of information about your machine in the subject or the body
can help us even further.  We will use this information to improve device driver
support in future releases.  (Please do this using the supplied GENERIC kernel,
not for a custom compiled kernel, unless you're unable to boot the GENERIC
kernel.  If you have a multi-processor machine, dmesg results of both GENERIC.MP
and GENERIC kernels are appreciated.)  The device driver information we get from
this helps us fix existing drivers. Thank you!
Alternatively, save your dmesg output to a text file and send us its contents:
$ (dmesg; sysctl hw.sensors) > ~/dmesg.txt
Please configure your email client to use plain text. In particular, do not use HTML formatting or forced line breaks. Put the dmesg into the body of the mail, not as an attachment.

Customizing the Install Process

The site76.tgz File Set

The OpenBSD install and upgrade scripts allow the selection of a user-created set called site76.tgz. Like the official file sets, this is a tar(1) archive rooted in / and untarred with the -xzphf options. It is installed last, so it can be used to complement and modify the files from a default install. Furthermore, it is possible to use hostname-dependent sets named site76-$(hostname -s).tgz. Note: If you intend to provide the sets over HTTP(s), place site76.tgz in your source directory and include it in your index.txt. It will then be an option at install time.

The install.site and upgrade.site Scripts

If the site76.tgz file set contains an executable file /install.site, the installer runs it with chroot(8) based at the freshly installed system's root. Similarly, the upgrade script runs /upgrade.site. The latter can be placed in the system's root directory before rebooting for the upgrade.

Example usage:

Multibooting

Multibooting is having several operating systems on one computer, with some means of selecting which OS is to boot. You may want to familiarize yourself with the OpenBSD boot process before you start. A brief introduction to fdisk(8) is in the section on using OpenBSD's fdisk.

If you are adding OpenBSD to an existing system, you will probably need to create some free space before installing OpenBSD. In addition to your existing system's native tools, gparted may be useful for deleting or resizing existing partitions. Preferably use one of the four primary MBR partitions for booting OpenBSD. Extended partitions may not work.

rEFInd is reported to usually work. GRUB is reported to usually fail. In either case, you are completely on your own.

Windows

The Boot Configuration Data (BCD) store allows multiple versions of Windows to be booted through bcdedit. A good introduction can be found in this article. If you want a GUI alternative, you may want to try EasyBCD.

You will need a copy of your OpenBSD install's Partition Boot Record (PBR). You can copy it to a file using a process similar to:

# dd if=/dev/rsd0a of=openbsd.pbr bs=512 count=1
where sd0a is your boot device, and you will need to get the file openbsd.pbr to your Windows system partition.

Once OpenBSD's PBR is copied to the Windows system partition, you need a shell with administrative privileges to run the following commands:

C:\Windows\system32> bcdedit /create /d "OpenBSD/i386" /application bootsector
The entry {0154a872-3d41-11de-bd67-a7060316bbb1} was successfully created.
C:\Windows\system32> bcdedit /set {0154a872-3d41-11de-bd67-a7060316bbb1} device boot
The operation completed successfully.
C:\Windows\system32> bcdedit /set {0154a872-3d41-11de-bd67-a7060316bbb1} path \openbsd.pbr
The operation completed successfully.
C:\Windows\system32> bcdedit /set {0154a872-3d41-11de-bd67-a7060316bbb1} device partition=c:
The operation completed successfully.
C:\Windows\system32> bcdedit /displayorder {0154a872-3d41-11de-bd67-7060316bbb1} /addlast
The operation completed successfully.
Note that OpenBSD expects the computer's real-time clock to be set to Coordinated Universal Time (UTC). See this section for more info.