DevHeads.net

Booting OpenBSD with pxelinux

I've got PXE/TFTP setup for various Linux distributions and some
utilities (clonezilla, dban, etc). I'm now starting in on OpenBSD.

As far as I've been able to figure out via internet searches, pxelinux
(from the syslinux package) is unable to pass control of a machine
directly to a BSD kernel. Instead, you have to use the BSD-supplied
'pxeboot' loader. The naming conventions enforced by pxelinux mean
that pxeboot must be called pxeboot.0.

Here's a simplified view of my tftpboot directory:

etc/
`-- boot.conf
images/openbsd/
`-- 5.4
| -- amd64
| | -- bsd
| `-- pxeboot.0
`-- i386
| -- bsd
`-- pxeboot.0

And here's a relevent snippet of my PXE menu file:

LABEL openbsd-5.4.amd64
MENU LABEL OpenBSD 5.4 amd64
KERNEL images/openbsd/5.4/amd64/pxeboot.0

So far so good. If I boot the image listed above, I get the BSD boot
loader -- but, and this is the crux of my question, afaict I have to
type the location of the actual kernel manually:

boot> boot images/openbsd/5.4/amd64/bsd

After I type that, the OpenBSD installation kernel boots without a
hitch. But manually typing the kernel path is prone to error, and it's
not scriptable.

It appears that you can have one (and only one!) boot.conf file from
which pxeboot can get some directions. Since I want to be able to
serve up at least two different images (32- and 64-bits), I can't
specify a kernel in boot.conf. The best I can do is print a banner,
e.g.,

echo **********************************************************
echo The OpenBSD pxeboot utility cannot be passed an alterative
echo kernel path. So you'll have to issue one of the following
echo commands manually from the boot> prompt:
echo
echo boot images/openbsd/5.4/amd64/bsd
echo boot images/openbsd/5.4/i386/bsd
echo **********************************************************

My question: Does anyone else know a better way? Can I pass an
alternative kernel path or boot.conf to pxeboot?

Comments

Re: Booting OpenBSD with pxelinux

By Jim Perrin at 04/02/2014 - 09:22

You might try using a tftp map file to mangle the location it wants to
be the real location. I do this when pxebooting windows systems, since
they insist on trying a specific path, as well as using backslashes that
must be translated.