Learned an important lesson about OpenBSD:
When I first set up my new server, I did so in a VM on my local
machine (see previous entries). I didn't really think about it, so I
gave the VM two CPU cores. The system installed fine, it booted fine,
I uploaded it to my hosting provider, and it worked fine there.
Until I installed the first patch via "syspatch".
In OpenBSD, there are two common kernels you can install: GENERIC and
GENERIC.MP. Since my local VM had two cores, the installer installed
GENERIC.MP. My VPS only has one core, though. GENERIC.MP works on a
single-core machine as well, so that's not an issue.
When syspatch installs a kernel update, it tries to find out which
kernel you're running. Oh, no, that's exactly the problem. It does not
do that. It looks at your CPU and deduces from the number of cores
which kernel you SHOULD be running. Sure enough, a single-core machine
should not be running the MP kernel, so syspatch happily installed
patches for the SP kernel. In other words, it didn't install the patch
at all.
I don't know, this feels like a bug to me. Theo de Raadt doesn't think
so:
https://marc.info/?l=openbsd-misc&m=150043142926972&w=2
The problem has been reported by another user some months ago. It has
been dismissed because it's considered a strange usage pattern.
I totally get Theo's point. People do crazy stuff and then blame
someone else for it. Yes, my setup is a strange usage pattern,
absolutely. I'm still not convinced, though. WHY does syspatch look at
the hardware instead of the running kernel? In what situation is that
the proper action?
Looking at the source code of syspatch doesn't help. The tool works
this way since it was first written.
The other user that reported this problem was doing some shuffling of
GENERIC and GENERIC.MP. I fear that the devs were a bit quick to
dismiss the case.
____________________
After some more testing: You can't just swap kernels on OpenBSD by
moving around the /bsd, /bsd.mp, and /bsd.sp files. If you switch a
kernel, you can boot from it -- but you can't install patches the
syspatch way, because files are missing from /usr/share/compile. I
don't know where they come from, probably some point in the base
install ...
Point is, even if syspatch was to look at which kernel is running
instead of how many cores you have, it still wouldn't work.
Only question remaining: Why are there two kernels? Is keeping the
non-MP variant worth the trouble?
____________________
At the end of the day, it's just that I'm still unfamiliar with
OpenBSD. Arch Linux might do similarly "weird" things, but I've been
using Arch for almost ten years now, so there are very little
surprises.
I have to keep using OpenBSD to learn more about it. That's the way to
go.