Sunday, 27. April 2025
[This article has been bi-posted to Gemini and the Web]
The first part of this series was about FreeBSD's installer.
Installing *BSD in 2025 part 1 - A critical look at FreeBSD's installer
In this article we'll take a look at OpenBSD's installer. The version used is the one that comes with release 7.6. Unlike FreeBSD, I don't install OpenBSD all the time. I've done a fair amount of installations over the years, so I'm somewhat familiar with it. However not nearly as familiar that I could do an installation with my eyes closed. If you know everything about the OpenBSD installer (e. g. which username cannot be picked!), then you might want to read this article only if you're interested in an outsider's perspective.
Compared to FreeBSD, OpenBSD does a lot of things differently. Their installer is probably as much no-frills, no-nonsense as it could be. Instead of the dialog menu based one of FreeBSD, it simply asks you questions and you type in the answers.
I'm going to install OpenBSD in a VM twice. The first time I'll be using the video console and opt for a graphical system. The second install will be a more server style one and will use installation over serial.
I deliberately limited the VM that I'm using here to only 1GB of RAM, 1 CPU core and 8GB of disk space. This might seem like an odd choice for a desktop system - and to be honest it is. The rationale here is that I want to show that the installer is actually dynamic, accounting for what system resources are available. So these limitations are meant to allow me pointing out how things are different in the second installation.
After starting the install, a short paragraph explains the basic functionality to new users which is good. Especially the defaults allow for making it through the installer very quickly for the most common cases. At the same time the ability to shell out of the installer gives experienced OpenBSD users ultimate flexibility to do things that the installer won't do on its own. It can do a lot, though.
The first thing to do is choosing the keymap. You either enter your preferred one or ask for a list if you don't know what's available. Then you enter the host name. The installer clearly indicates that it expects the short form rather than an FQDN which is great.
Keymap, network, services and users (PNG)
Next is the actual network configuration. The installer lists the configurable interfaces and even gives you the option to set up VLANs - which is not terribly common for installers to do. Selecting an interface you'll be given the option to enter a static IPv4 address for it, attempt to automatically configure it or not use an IPv4 address. Afterwards the same is done for IPv6. If you choose to autoconfigure IPv4 or v6 for an interface, the installer uses the domain name and nameservers provided via DHCP.
These options are about excellent and cover the vast majority of scenarios perfectly. If you're in need for advanced networking configurations involving things like link e. g. aggregation, you probably want to do that after the installation, anyway.
time zone and disk selection (PNG)
After the network configuration is done, you set the root password. Then the installer asks you which services to enable by default. On a desktop system you probably don't want SSH but you want xenodm (OpenBSD's variant of xdm). You also get the option to change the default console to serial as well as setting up a user (as long as it's not named 'yes'! 😉).
Next is setting up the time zone, then selecting the disk(s). The correct time zone has been determined in my case, but the installer assumes the first disk to be the install target. Usually that default should be fine, but in this case it isn't. Fortunately by letting it display details first, you can see that sd0 is actually the hypervisor's CD image that you're installing from.
I remember having to do it manually, but for a while now, the installer has supported full disk encryption (which is very useful). After these selections, the partitioning scheme needs to be selected. Depending on the platform, the installer offers whole disk MBR and GPT or manual for people who want to dual-boot or have other reasons for not dedicating the whole disk to OpenBSD.
Partitioning and installation source (PNG)
Once the partitioning scheme has been decided on, the installer will propose a partitioning layout, offering the user to just accept that, modify it or do custom partitioning. This is all pretty intuitive if you stick to the defaults and flexible if you want to customize things. The only thing I actually miss in this part of the installer is that it does not allow for creating a softraid mirror (you have to shell out for this if I'm not mistaken and overlooked something). Take a look at the rather simple layout proposed in the screenshot above and take a mental note of it. We'll come back to this in the second installation.
After the partitioning is done and the filesystems were created, the installer asks for the installation source. The defaults are usually fine but you've got other options like using a proxy or getting the distribution files from a local disk or via NFS instead of from HTTPS (even though the installer for historical reasons says HTTP). Once upon a time, installation via FTP was already possible but that option is long gone.
Distribution set selection and fetching (PNG)
When the installation source has been decided on, the applicable distribution sets found are listed. A full installation is the default but the user can easily de-select single ones or multiple (using patterns). For this desktop-style installation I'm going to install everything.
Up until a while ago, the installer would warn you that the install medium that you're using cannot be fully trusted since the signature it comes with might have been tempered with. This was the main difference between the physical CDs you could buy and the downloaded ISOs. However the CDs have not been available for years. Since the introduction of signify(1), the CDs used to include the cryptographic signatures for the current and for the next release. So you can still dig out your 6.0 CDs, extract the key for 6.1 and build a chain of trust all the way up to where we are now. However most people probably just check the SHA265 for the image they downloaded and trust that their mirror provider didn't fall for a sophisticated attack that would result in a modified ISO for which the checksum still matches...
Actual installation and finishing tasks (PNG)
When the actual installation is done, the installer will let you know if your time is off and offer to correct it. It then writes the configuration bits you selected before, creates device nodes, updates firmware and relinks the kernel before offering you to reboot the system. The latter hasn't always been the default but became it quite some time ago.
Installed system has started to graphical mode (PNG)
Simply answering these couple of questions results in a basic graphical install of OpenBSD, which I think is pretty nice.
To be able to install via serial, the console has to be changed at the boot loader prompt:
probing: pc0 com0 com1 mem[640K 3046M 20K 948K 16M 3M 1024M]
disk: hd0 hd1*
>> OpenBSD/amd64 BOOTX64 3.67
boot> set tty com0
switching console to com0
>> OpenBSD/amd64 BOOTX64 3.67
boot> boot
Afterwards boot works just like normal:
cannot open hd0a:/etc/random.seed: No such file or directory
booting hd0a:/bsd: 4101039+1721344+3887112+0+704512 [109+465408+318888]=0xab0b98
entry point at 0x1001000
Copyright (c) 1982, 1986, 1989, 1991, 1993
The Regents of the University of California. All rights reserved.
Copyright (c) 1995-2024 OpenBSD. All rights reserved. https://www.OpenBSD.org
OpenBSD 7.6 (RAMDISK_CD) #326: Mon Sep 30 09:00:03 MDT 2024
deraadt@amd64.openbsd.org:/usr/src/sys/arch/amd64/compile/RAMDISK_CD
real mem = 4252692480 (4055MB)
avail mem = 4119609344 (3928MB)
random: good seed from bootblocks
mainbus0 at root
bios0 at mainbus0: SMBIOS rev. 2.8 @ 0xbfbcf000 (12 entries)
bios0: vendor BHYVE version "14.0" date 10/17/2021
bios0: FreeBSD BHYVE
acpi0 at bios0: ACPI 5.1
acpi0: tables DSDT FACP APIC HPET MCFG SPCR BGRT
acpimadt0 at acpi0 addr 0xfee00000: PC-AT compat
cpu0 at mainbus0: apid 0 (boot processor)
cpu0: Intel(R) Core(TM) i3-4160 CPU @ 3.60GHz, 3593.36 MHz, 06-3c-03
cpu0: cpuid 1 edx=9f8bfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,MMX,FXSR,SSE,SSE2,SS,HTT,PBE> ecx=f6da7a17<SSE3,PCLMUL,DTES64,DS-CPL,SSSE3,SDBG,FMA3,CX16,xTPR,PCID,SSE4.1,SSE4.2,MOVBE,POPCNT,AES,XSAVE,AVX,F16C,RDRAND,HV>
cpu0: cpuid 6 eax=4<ARAT>
cpu0: cpuid 7.0 ebx=7a9<FSGSBASE,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID> edx=400<MD_CLEAR>
cpu0: cpuid d.1 eax=1<XSAVEOPT>
cpu0: cpuid 80000001 edx=2c100800<NXE,PAGE1GB,RDTSCP,LONG> ecx=21<LAHF,ABM>
cpu0: cpuid 80000007 edx=100<ITSC>
cpu0: MELTDOWN
cpu0: 32KB 64b/line 8-way D-cache, 32KB 64b/line 8-way I-cache, 256KB 64b/line 8-way L2 cache, 3MB 64b/line 12-way L3 cache
cpu0: apic clock running at 134MHz
cpu at mainbus0: not configured
ioapic0 at mainbus0: apid 0 pa 0xfec00000, version 11, 32 pins
acpihpet0 at acpi0: 16777216 Hz
acpiprt0 at acpi0: bus 0 (PC00)
acpipci0 at acpi0 PC00
com0 at acpi0 COM1 addr 0x3f8/0x8 irq 4: ns16550a, 16 byte fifo
com0: console
com1 at acpi0 COM2 addr 0x2f8/0x8 irq 3: ns16550a, 16 byte fifo
com2 at acpi0 COM3 addr 0x3e8/0x8 irq 4: ns16550a, 16 byte fifo
com3 at acpi0 COM4 addr 0x2e8/0x8 irq 3: ns16550a, 16 byte fifo
acpicmos0 at acpi0
"Bhyve_V_Gen_Counter_V1" at acpi0 not configured
"QEMU0002" at acpi0 not configured
cpu0: using VERW MDS workaround
pvbus0 at mainbus0: bhyve
pci0 at mainbus0 bus 0
pchb0 at pci0 dev 0 function 0 vendor "AMD", unknown product 0x7432 rev 0x00
ahci0 at pci0 dev 2 function 0 "Intel 82801H AHCI" rev 0x00: msi, AHCI 1.3
ahci0: port 0: 6.0Gb/s
scsibus0 at ahci0: 32 targets
sd0 at scsibus0 targ 0 lun 0: <ATA, BHYVE SATA DISK, 001> t10.ATA_BHYVE_SATA_DISK_BHYVE-7412-398C-D234
sd0: 696MB, 512 bytes/sector, 1426368 sectors
virtio0 at pci0 dev 4 function 0 "Qumranet Virtio Storage" rev 0x00
vioblk0 at virtio0
scsibus1 at vioblk0: 1 targets
sd1 at scsibus1 targ 0 lun 0: <VirtIO, Block Device, >
sd1: 40960MB, 512 bytes/sector, 83886080 sectors
virtio0: msix per-VQ
virtio1 at pci0 dev 5 function 0 "Qumranet Virtio Network" rev 0x00
vio0 at virtio1, address 00:a0:98:92:12:3a
virtio1: msix per-VQ
unknown vendor 0xfb5d product 0x40fb (class display subclass VGA, rev 0x00) at pci0 dev 6 function 0 not configured
xhci0 at pci0 dev 30 function 0 "Intel 7 Series xHCI" rev 0x00: msi, xHCI 0.0
usb0 at xhci0: USB revision 3.0
uhub0 at usb0 configuration 1 interface 0 "Intel xHCI root hub" rev 3.00/1.00 addr 1
"Intel 82371SB ISA" rev 0x00 at pci0 dev 31 function 0 not configured
isa0 at mainbus0
pckbc0 at isa0 port 0x60/5 irq 1 irq 12
pckbd0 at pckbc0 (kbd slot)
wskbd0 at pckbd0 mux 1
efifb0 at mainbus0: 1024x768, 32bpp
wsdisplay at efifb0 not configured
uhub0: device problem, disabling port 1
softraid0 at root
scsibus2 at softraid0: 256 targets
root on rd0a swap on rd0b dump on rd0b
WARNING: CHECK AND RESET THE DATE!
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? i
If the standard installation is selected, the usual short introduction is printed. Unlike with the video console, the installer asks about the capabilities of the connected terminal instead of the keymap before the hostname:
At any prompt except password prompts you can escape to a shell by
typing '!'. Default answers are shown in []'s and are selected by
pressing RETURN. You can exit this program at any time by pressing
Control-C, but this can leave your system in an inconsistent state.
Terminal type? [vt220] xterm
System hostname? (short form, e.g. 'foo') puffy
The choice of vt220 as the default is interesting, especially since FreeBSD - despite using a more sophisticated dialog window installer - assumes baseline capabilities of the vt100 as the default.
Next is network configuration:
Available network interfaces are: vio0 vlan0.
Network interface to configure? (name, lladdr, '?', or 'done') [vio0]
IPv4 address for vio0? (or 'autoconf' or 'none') [autoconf] 10.11.12.202
Netmask for vio0? [255.255.255.0]
IPv6 address for vio0? (or 'autoconf' or 'none') [none]
Available network interfaces are: vio0 vlan0.
Network interface to configure? (name, lladdr, '?', or 'done') [done]
Default IPv4 route? (IPv4 address or 'none') 10.11.12.1
add net default: gateway 10.11.12.1
DNS domain name? (e.g. 'example.com') [my.domain] lab.lan
DNS nameservers? (IP address list or 'none') [none] 10.11.12.1
This time I chose static addressing to show off what that looks like. In this case the installer needs to ask about netmask, gateway and nameservers, of course.
Next is root password and enabled services. For a server I definitely want SSH but certainly not xenodm. So this time it looks like this:
Password for root account? (will not echo)
Password for root account? (again)
Start sshd(8) by default? [yes]
Do you want the X Window System to be started by xenodm(1)? [no]
Since this is a serial installation, the default answer to the question about using com0 for the default console changed to 'yes' and accepting that, the user gets to select the baud rate for the serial connection:
Change the default console to com0? [yes]
Available speeds are: 9600 19200 38400 57600 115200.
Which speed should com0 use? (or 'done') [9600] 115200
A baud rate of 9600 is a conservative default choice, but that's what you can expect just about every serial connections to work with today. Most - but not all - will support higher speeds, though. But if you're doing a serial installation, it's a sensible assumption that you know this (or are willing to do some reading if you encounter this installer question).
Following this part is user creation and time zone selection:
Setup a user? (enter a lower-case loginname, or 'no') [no] kraileth
Full name for user kraileth? [kraileth]
Password for user kraileth? (will not echo)
Password for user kraileth? (again)
WARNING: root is targeted by password guessing attacks, pubkeys are safer.
Allow root ssh login? (yes, no, prohibit-password) [no]
What timezone are you in? ('?' for list) [Europe/Berlin]
Since SSH was enabled this time, there's an additional question that is about remote root login. You almost certainly should not allow it, so 'no' is the only sane default here.
Next is selecting the disk(s) to use. This time I'm going to encrypt the disk, just to also show that off (it's usually the better option for laptops than servers, but I wanted to do that in the serial install so I didn't have to squeeze it into one of the screenshots of the pc0 console install):
Available disks are: sd0 sd1.
Which disk is the root disk? ('?' for details) [sd0] sd1
Encrypt the root disk with a (p)assphrase or (k)eydisk? [no] p
Configuring the crypto chunk sd1...
No valid MBR or GPT.
Use (W)hole disk MBR, whole disk (G)PT or (E)dit? [gpt]
Setting OpenBSD GPT partition to whole sd1...done.
New passphrase:
Re-type passphrase:
sd2 at scsibus2 targ 1 lun 0: <OPENBSD, SR CRYPTO, 006>
sd2: 40699MB, 512 bytes/sector, 83352975 sectors
These choices have made the installer create a crypto softraid which - in this case - is now available as an additional disk 'sd2' to install on:
Configuring the root disk sd2...
No valid MBR or GPT.
Use (W)hole disk MBR, whole disk (G)PT or (E)dit? [gpt]
I went with letting the installer create a gpt partition in this crypto drive and it suggests an automatically calculated layout for me:
Setting OpenBSD GPT partition to whole sd2...done.
The auto-allocated layout for sd2 is:
# size offset fstype [fsize bsize cpg]
a: 1024.0M 532544 4.2BSD 2048 16384 1 # /
b: 2971.0M 2629696 swap
c: 40699.7M 0 unused
d: 2432.8M 8714240 4.2BSD 2048 16384 1 # /tmp
e: 3838.2M 13696512 4.2BSD 2048 16384 1 # /var
f: 4391.0M 21557248 4.2BSD 2048 16384 1 # /usr
g: 1024.0M 30549920 4.2BSD 2048 16384 1 # /usr/X11R6
h: 5360.4M 32647072 4.2BSD 2048 16384 1 # /usr/local
i: 260.0M 64 MSDOS
j: 2626.2M 43625248 4.2BSD 2048 16384 1 # /usr/src
k: 6144.0M 49003680 4.2BSD 2048 16384 1 # /usr/obj
l: 10628.1M 61586592 4.2BSD 2048 16384 1 # /home
Use (A)uto layout, (E)dit auto layout, or create (C)ustom layout? [a] e
As you can see, this layout is more complex than the one used in the first installation. This doesn't have anything to do with the crypto softraid, though. It's because this time I allocated a decent amount of storage to the virtual hard disk (40G) vs. a very small one (8G) last time.
I decided to edit this layout, so I can show of what that looks like:
Label editor (enter '?' for help at any prompt)
sd2> ?
Available commands:
? | h - show help n [part] - set mount point
A - auto partition all space p [unit] - print partitions
a [part] - add partition q - quit & save changes
b - set OpenBSD boundaries R [part] - resize auto allocated partition
c [part] - change partition size r - display free space
D - reset label to default s [path] - save label to file
d [part] - delete partition U - undo all changes
e - edit label description u - undo last change
i - modify disklabel UID w - write label to disk
l [unit] - print disk label header x - exit & lose changes
M - disklabel(8) man page z - delete all partitions
m [part] - modify partition
Suffixes can be used to indicate units other than sectors:
'b' (bytes), 'k' (kilobytes), 'm' (megabytes), 'g' (gigabytes) 't' (terabytes)
'c' (cylinders), '%' (% of total disk), '&' (% of free space).
Values in non-sector units are truncated to the nearest cylinder boundary.
sd2> d g
So the help explains what commands are available at the label editor prompt and what they do. I decide to remove partition 'g' from the proposed layout as I don't plan on installing X11, anyway. After confirming my changes, the label is written and the respective filesystems are being created before giving me the option to prepare additional disks the same way:
sd2*> q
Write new label?: [y]
/dev/rsd2a: 1024.0MB in 2097152 sectors of 512 bytes
6 cylinder groups of 202.50MB, 12960 blocks, 25920 inodes each
/dev/rsd2l: 10628.1MB in 21766336 sectors of 512 bytes
53 cylinder groups of 202.50MB, 12960 blocks, 25920 inodes each
newfs: reduced number of fragments per cylinder group from 103680 to 103520 to enlarge last cylinder group
/dev/rsd2d: 2432.8MB in 4982272 sectors of 512 bytes
13 cylinder groups of 202.19MB, 12940 blocks, 25920 inodes each
/dev/rsd2f: 4391.0MB in 8992672 sectors of 512 bytes
22 cylinder groups of 202.50MB, 12960 blocks, 25920 inodes each
/dev/rsd2h: 5360.4MB in 10978176 sectors of 512 bytes
27 cylinder groups of 202.50MB, 12960 blocks, 25920 inodes each
/dev/rsd2k: 6144.0MB in 12582912 sectors of 512 bytes
31 cylinder groups of 202.50MB, 12960 blocks, 25920 inodes each
/dev/rsd2j: 2626.2MB in 5378432 sectors of 512 bytes
13 cylinder groups of 202.50MB, 12960 blocks, 25920 inodes each
/dev/rsd2e: 3838.2MB in 7860736 sectors of 512 bytes
19 cylinder groups of 202.50MB, 12960 blocks, 25920 inodes each
Available disks are: sd0.
Which disk do you wish to initialize? (or 'done') [done]
When all the disks are prepared, the installer mounts the filesystems and moves on to selecting the installation source:
/dev/sd2a (d28b779fb8c39257.a) on /mnt type ffs (rw, asynchronous, local)
/dev/sd2l (d28b779fb8c39257.l) on /mnt/home type ffs (rw, asynchronous, local, nodev, nosuid)
/dev/sd2d (d28b779fb8c39257.d) on /mnt/tmp type ffs (rw, asynchronous, local, nodev, nosuid)
/dev/sd2f (d28b779fb8c39257.f) on /mnt/usr type ffs (rw, asynchronous, local, nodev)
/dev/sd2h (d28b779fb8c39257.h) on /mnt/usr/local type ffs (rw, asynchronous, local, nodev)
/dev/sd2k (d28b779fb8c39257.k) on /mnt/usr/obj type ffs (rw, asynchronous, local, nodev, nosuid)
/dev/sd2j (d28b779fb8c39257.j) on /mnt/usr/src type ffs (rw, asynchronous, local, nodev, nosuid)
/dev/sd2e (d28b779fb8c39257.e) on /mnt/var type ffs (rw, asynchronous, local, nodev, nosuid)
Let's install the sets!
Location of sets? (disk http nfs or 'done') [http]
This time I'm going to let it display the mirror list for me:
HTTP proxy URL? (e.g. 'http://proxy:8080', or 'none') [none]
HTTP Server? (hostname, list#, 'done' or '?') [ftp.fau.de] ?
1 ftp.fau.de/pub/OpenBSD
2 ftp.spline.de/pub/OpenBSD Berlin, Germany
3 mirror.hs-esslingen.de/pub/OpenBSD Esslingen, Germany
4 ftp.halifax.rwth-aachen.de/pub/OpenBSD Aachen, Germany
5 artfiles.org/openbsd Hamburg, Germany
6 ftp.hostserver.de/pub/OpenBSD Frankfurt, Germany
7 ftp.fau.de/pub/OpenBSD Erlangen, Germany
8 cdn.openbsd.org/pub/OpenBSD Fastly (CDN)
9 cloudflare.cdn.openbsd.org/pub/OpenBSD Cloudflare (CDN)
10 mirror.leaseweb.com/pub/OpenBSD LeaseWeb (CDN)
11 mirror.planetunix.net/pub/OpenBSD PlanetUnix (CDN)
12 openbsd.as250.net/pub/OpenBSD AS250.net (CDN)
13 mirror.aarnet.edu.au/pub/OpenBSD Canberra, Australia
14 ftp2.eu.openbsd.org/pub/OpenBSD Vienna, Austria
15 openbsd.c3sl.ufpr.br/pub/OpenBSD Curitiba, Brazil
16 openbsd.ipacct.com/pub/OpenBSD Sofia, Bulgaria
17 mirror.telepoint.bg/pub/OpenBSD Sofia, Bulgaria
18 ftp.OpenBSD.org/pub/OpenBSD Alberta, Canada
19 openbsd.cs.toronto.edu/pub/OpenBSD Toronto, ON, Canada
20 mirrors.aliyun.com/pub/OpenBSD China
21 mirrors.ucr.ac.cr/pub/OpenBSD Costa Rica
22 mirrors.dotsrc.org/pub/OpenBSD Aalborg, Denmark
23 mirror.group.one/pub/OpenBSD Copenhagen, Denmark
--More--
The list is displayed via a pager. I like how it contains just the information you care about - the number, the URL and the location. Here's the rest of the pretty impressive list:
24 ftp.fr.openbsd.org/pub/OpenBSD Paris, France
25 ftp.lip6.fr/pub/OpenBSD Paris, France
26 mirrors.ircam.fr/pub/OpenBSD Paris, France
27 mirror.ibcp.fr/pub/OpenBSD Lyon, France
28 ftp.spline.de/pub/OpenBSD Berlin, Germany
29 mirror.hs-esslingen.de/pub/OpenBSD Esslingen, Germany
30 ftp.halifax.rwth-aachen.de/pub/OpenBSD Aachen, Germany
31 artfiles.org/openbsd Hamburg, Germany
32 ftp.hostserver.de/pub/OpenBSD Frankfurt, Germany
33 ftp.fau.de/pub/OpenBSD Erlangen, Germany
34 ftp.cc.uoc.gr/pub/OpenBSD Heraklion, Greece
35 ftp.jaist.ac.jp/pub/OpenBSD Nomi, Ishikawa, Japan
36 www.ftp.ne.jp/pub/OpenBSD Saitama, Japan
37 ftp.riken.jp/pub/OpenBSD Wako-City, Saitama, Japan
38 repo.jing.rocks/pub/OpenBSD Tokyo, Japan
39 mirror.litnet.lt/pub/OpenBSD Kaunas, Lithuania
40 mirror.ihost.md/pub/OpenBSD Chisinau, Moldova
41 ftp.nluug.nl/pub/OpenBSD Utrecht, The Netherlands
42 ftp.bit.nl/pub/OpenBSD Ede, The Netherlands
43 mirror.laylo.nl/pub/OpenBSD Amsterdam, The Netherlands
44 mirror.businessconnect.nl/pub/OpenBSD Amsterdam, The Netherlands
45 mirror.fsmg.org.nz/pub/OpenBSD Anycast within NZ, New Zealand
46 ftp.eu.openbsd.org/pub/OpenBSD Oslo, Norway
47 ftp.icm.edu.pl/pub/OpenBSD Warsaw, Poland
48 ftp.psnc.pl/pub/OpenBSD Poznan, Poland
49 ftp.rnl.tecnico.ulisboa.pt/pub/OpenBSD Lisbon, Portugal
50 mirrors.chroot.ro/pub/OpenBSD Bucharest, Romania
51 mirrors.pidginhost.com/pub/OpenBSD Bucharest, Romania
52 mirror.yandex.ru/pub/OpenBSD Moscow, Russia
53 mirror.freedif.org/pub/OpenBSD Singapore
54 mirror.raiolanetworks.com/pub/OpenBSD Madrid, Spain
55 ftp.lysator.liu.se/pub/OpenBSD Linkoping, Sweden
56 mirror.ungleich.ch/pub/OpenBSD Linthal, GL, Switzerland
57 openbsd.paket.ua/pub/OpenBSD Odesa, Ukraine
58 openbsd.eu.paket.ua/pub/OpenBSD Ukraine
59 www.mirrorservice.org/pub/OpenBSD Kent, United Kingdom
60 mirror.ox.ac.uk/pub/OpenBSD Oxford, United Kingdom
61 mirrors.sonic.net/pub/OpenBSD San Francisco, CA, USA
62 mirrors.ocf.berkeley.edu/pub/OpenBSD Berkeley, CA, USA
63 mirrors.gigenet.com/pub/OpenBSD Arlington Heights, IL, USA
64 plug-mirror.rcac.purdue.edu/pub/OpenBSD West Lafayette, IN, USA
65 mirrors.mit.edu/pub/OpenBSD Cambridge, MA, USA
66 openbsd.mirror.constant.com/pub/OpenBSD Piscataway, NJ, USA
67 ftp.usa.openbsd.org/pub/OpenBSD New York, NY, USA
68 openbsd.mirrors.hoobly.com/pub/OpenBSD Pittsburgh, PA, USA
69 cdn.openbsd.org/pub/OpenBSD Fastly (CDN)
70 cloudflare.cdn.openbsd.org/pub/OpenBSD Cloudflare (CDN)
71 mirror.leaseweb.com/pub/OpenBSD LeaseWeb (CDN)
72 mirror.planetunix.net/pub/OpenBSD PlanetUnix (CDN)
73 openbsd.as250.net/pub/OpenBSD AS250.net (CDN)
74 mirror.aarnet.edu.au/pub/OpenBSD Canberra, Australia
75 ftp2.eu.openbsd.org/pub/OpenBSD Vienna, Austria
76 openbsd.c3sl.ufpr.br/pub/OpenBSD Curitiba, Brazil
77 openbsd.ipacct.com/pub/OpenBSD Sofia, Bulgaria
78 mirror.telepoint.bg/pub/OpenBSD Sofia, Bulgaria
79 ftp.OpenBSD.org/pub/OpenBSD Alberta, Canada
80 openbsd.cs.toronto.edu/pub/OpenBSD Toronto, ON, Canada
81 mirrors.aliyun.com/pub/OpenBSD China
82 mirrors.ucr.ac.cr/pub/OpenBSD Costa Rica
83 mirrors.dotsrc.org/pub/OpenBSD Aalborg, Denmark
84 mirror.group.one/pub/OpenBSD Copenhagen, Denmark
85 ftp.fr.openbsd.org/pub/OpenBSD Paris, France
86 ftp2.fr.openbsd.org/pub/OpenBSD Paris, France
87 mirrors.ircam.fr/pub/OpenBSD Paris, France
88 ftp.spline.de/pub/OpenBSD Berlin, Germany
89 mirror.hs-esslingen.de/pub/OpenBSD Esslingen, Germany
90 ftp.halifax.rwth-aachen.de/pub/OpenBSD Aachen, Germany
91 artfiles.org/openbsd Hamburg, Germany
92 ftp.hostserver.de/pub/OpenBSD Frankfurt, Germany
93 ftp.fau.de/pub/OpenBSD Erlangen, Germany
94 mirror.junda.nl/pub/OpenBSD Falkenstein, Germany
95 ftp.cc.uoc.gr/pub/OpenBSD Heraklion, Greece
96 ftp.jaist.ac.jp/pub/OpenBSD Nomi, Ishikawa, Japan
97 www.ftp.ne.jp/pub/OpenBSD Saitama, Japan
98 ftp.riken.jp/pub/OpenBSD Wako-City, Saitama, Japan
99 repo.jing.rocks/pub/OpenBSD Tokyo, Japan
100 mirror.litnet.lt/pub/OpenBSD Kaunas, Lithuania
101 mirror.ihost.md/pub/OpenBSD Chisinau, Moldova
102 ftp.nluug.nl/pub/OpenBSD Utrecht, The Netherlands
103 ftp.bit.nl/pub/OpenBSD Ede, The Netherlands
104 mirror.fsmg.org.nz/pub/OpenBSD Anycast within NZ, New Zealand
105 ftp.uio.no/pub/OpenBSD Oslo, Norway
106 ftp.eu.openbsd.org/pub/OpenBSD Oslo, Norway
107 mirror.rise.ph/pub/OpenBSD Cebu, Philippines
108 ftp.icm.edu.pl/pub/OpenBSD Warsaw, Poland
109 ftp.psnc.pl/pub/OpenBSD Poznan, Poland
110 ftp.rnl.tecnico.ulisboa.pt/pub/OpenBSD Lisbon, Portugal
111 mirrors.chroot.ro/pub/OpenBSD Bucharest, Romania
112 mirrors.pidginhost.com/pub/OpenBSD Bucharest, Romania
113 mirror.yandex.ru/pub/OpenBSD Moscow, Russia
114 mirror.freedif.org/pub/OpenBSD Singapore
115 mirror.raiolanetworks.com/pub/OpenBSD Madrid, Spain
116 ftp.lysator.liu.se/pub/OpenBSD Linkoping, Sweden
117 mirror.ungleich.ch/pub/OpenBSD Linthal, GL, Switzerland
118 openbsd.paket.ua/pub/OpenBSD Odesa, Ukraine
119 openbsd.eu.paket.ua/pub/OpenBSD Ukraine
120 www.mirrorservice.org/pub/OpenBSD Kent, United Kingdom
121 mirror.ox.ac.uk/pub/OpenBSD Oxford, United Kingdom
122 mirrors.sonic.net/pub/OpenBSD San Francisco, CA, USA
123 mirrors.ocf.berkeley.edu/pub/OpenBSD Berkeley, CA, USA
124 mirrors.syringanetworks.net/pub/OpenBSD Boise, ID, USA
125 mirrors.gigenet.com/pub/OpenBSD Arlington Heights, IL, USA
126 plug-mirror.rcac.purdue.edu/pub/OpenBSD West Lafayette, IN, USA
127 mirrors.mit.edu/pub/OpenBSD Cambridge, MA, USA
128 openbsd.mirror.constant.com/pub/OpenBSD Piscataway, NJ, USA
129 ftp.usa.openbsd.org/pub/OpenBSD New York, NY, USA
130 openbsd.mirrors.hoobly.com/pub/OpenBSD Pittsburgh, PA, USA
Alright, let's go on with the installation, picking a mirror close to me and then selecting the sets:
HTTP Server? (hostname, list#, 'done' or '?') [ftp.fau.de] 92
HTTP Server? (hostname, list#, 'done' or '?') [ftp.hostserver.de]
Server directory? [pub/OpenBSD/7.6/amd64]
Select sets by entering a set name, a file name pattern or 'all'. De-select
sets by prepending a '-', e.g.: '-game*'. Selected sets are labelled '[X]'.
[X] bsd [X] base76.tgz [X] game76.tgz [X] xfont76.tgz
[X] bsd.mp [X] comp76.tgz [X] xbase76.tgz [X] xserv76.tgz
[X] bsd.rd [X] man76.tgz [X] xshare76.tgz
Set name(s)? (or 'abort' or 'done') [done] -x*
[X] bsd [X] base76.tgz [X] game76.tgz [ ] xfont76.tgz
[X] bsd.mp [X] comp76.tgz [ ] xbase76.tgz [ ] xserv76.tgz
[X] bsd.rd [X] man76.tgz [ ] xshare76.tgz
Set name(s)? (or 'abort' or 'done') [done]
Pay attention how it offers 'bsd.mp' here which was not available in the previous installation. This is the SMP kernel and it's available since this VM has multiple cores whereas the previous one didn't. I don't know when this was changed, but I remember being offered the SMP kernel on single-core systems in the past. So definitely a nice little new feature.
I chose to de-select all the X11-related sets for this example, which is very convenient to do. After this, the installer fetches the selected sets and extracts them into the filesystem hierarchy:
Get/Verify SHA256.sig 100% |**************************| 2324 00:00
Signature Verified
Get/Verify bsd 100% |**************************| 28007 KB 00:20
Get/Verify bsd.mp 100% |**************************| 28139 KB 00:21
Get/Verify bsd.rd 100% |**************************| 4600 KB 00:03
Get/Verify base76.tgz 100% |**************************| 414 MB 05:40
Get/Verify comp76.tgz 100% |**************************| 81512 KB 01:06
Get/Verify man76.tgz 100% |**************************| 8039 KB 00:06
Get/Verify game76.tgz 100% |**************************| 2746 KB 00:02
Get/Verify BUILDINFO 100% |**************************| 54 00:00
Installing bsd 100% |**************************| 28007 KB 00:00
Installing bsd.mp 100% |**************************| 28139 KB 00:00
Installing bsd.rd 100% |**************************| 4600 KB 00:00
Installing base76.tgz 100% |**************************| 414 MB 01:47
Extracting etc.tgz 100% |**************************| 264 KB 00:00
Installing comp76.tgz 100% |**************************| 81512 KB 00:26
Installing man76.tgz 100% |**************************| 8039 KB 00:05
Installing game76.tgz 100% |**************************| 2746 KB 00:00
Installing BUILDINFO 100% |**************************| 54 00:00
Location of sets? (disk http nfs or 'done') [done]
It's possible to select additional sets from another installation source, but I assume that's rarely done. As the final step, tne installer offers to correct the system time and does the final tasks on its own before asking if the user wants to shell into the new system, halt it or reboot:
Time appears wrong. Set to 'Fri Apr 25 21:46:55 CEST 2025'? [yes]
Saving configuration files... done.
Making all device nodes... done.
Multiprocessor machine; using bsd.mp instead of bsd.
fw_update: add intel; update none
Relinking to create unique kernel... done.
CONGRATULATIONS! Your OpenBSD install has been successfully completed!
When you login to your new system the first time, please read your mail
using the 'mail' command.
Exit to (S)hell, (H)alt or (R)eboot? [reboot]
syncing disks... done
rebooting...
And with that we're done! Here's the beginning of the boot sequence of the installed system just to show that full disk encryption works:
probing: pc0 com0 com1 mem[640K 3046M 20K 948K 16M 3M 1024M]
disk: hd0 hd1* sr0*
>> OpenBSD/amd64 BOOTX64 3.67
Passphrase:
switching console to com0
>> OpenBSD/amd64 BOOTX64 3.67
boot>
booting sr0a:/bsd: 20023253+4322312+417824+0+1241088 [1537351+128+1399416+1094998]=0x1ca7998
entry point at 0x1001000
[ using 4032920 bytes of bsd ELF symbol table ]
Copyright (c) 1982, 1986, 1989, 1991, 1993
The Regents of the University of California. All rights reserved.
Copyright (c) 1995-2024 OpenBSD. All rights reserved. https://www.OpenBSD.org
OpenBSD 7.6 (GENERIC.MP) #338: Mon Sep 30 08:55:35 MDT 2024
[...]
How do they say? "Simplicity is the ultimate sophistication". OpenBSD's installer is a great example that there's definitely some truth to this. If the purpose of the OS was to appeal to as many people as possible, I would highly recommend considering something a little more... mainstream. But that's not a project goal and the system is developed for people who like what it does. So it makes perfect sense that the installer works as a simple collection of prompts to the user.
The defaults selected are all great, I wouldn't change a thing there. But that's to be expected, since the *sane defaults* approach is one of the core ideas behind OpenBSD.
Much earlier versions of the installer were a little hard to use, with the partitioning being something that required quite a bit of technical background. But that's no longer the case. It's also safe to say that the group of people that OpenBSD appeals to are above average in terms of *nix knowledge. They are much more likely to appreciate the simple installer than be put off by it.
I'm struggling to find much to critizise here to be honest. I'd like it to support setting up RAID1 and installing directly to mirrored disks, but that's about all. Much of what *could* be in the installer doesn't really have to since you'd typically tune it after the installation.
Final words on this: exceptional work, OpenBSD team! BTW: as a FreeBSD user, I really envy your ramdisk kernel every single time I install OpenBSD.
In the next article I'll take a closer look at NetBSD's installer.