It has come to my attention this week that we have some issues creating
bootable images, since our deployment scripts depend heavily on the
host tooling, the results of a deployment can be unpredictable.
The specific issues I ran into concern btrfs tools and syslinux, in
order to deploy an image we currently rely on having btrfs tools v4.0
or earlier and syslinux 4.0.6.
Using a too new btrfs tools package on the build host will create a
file system which is not bootable by, at least our current version of
After discussion with syslinux developers on irc, it has become clear
to me that the developers do not expect mixing of syslinux versions, or
even *builds* to properly boot, although they admit that differing
versions of the older syslinux 4.x releases may have worked.
That is to say, when invoking 'extlinux --install' to install a
bootloader, one should use the extlinux binary from the same build as
the syslinux modules installed on the target OS.
I have not found relevant syslinux documentation claiming this
In my specific case, building from my actual host natively using YBD, I
ran into a mix of these problems which were not an issue when using the
older ubuntu 14.04 LTS which just happened to have older versions of
these packaged (and happened to match up well enough to boot the
There are various ways to work around this; my feeling right now is
that the cleanest way is to use the tools which we build for our
deployment scripts; this may mean that we need to stage the stage1 or
stage2 build environment (with host-runnable binaries) and run the
deployment scripts from *that* environment, and, that we build all the
tooling required to perform a deployment in that build stage. However I
have not given this loads of thought, perhaps there are cleaner ways,
or techniques which require less refactoring.
Now, at this point you may be wondering; ... so this is only a problem
for YBD right ? Why would one EVER want to deploy a baserock system
from a non-baserock system ?
However tempting it might be to write off the problem as such, it's not
possible, especially considering that no two baserock generated systems
need to be similar in any way. For example, I suspect that this
shortcoming is the reason why we are stuck with syslinux 4.0.6 while my
new debian system is already installing 6.0.3: It is currently not
possible afaics to safely upgrade syslinux on a baserock system using
Morph, because the deployment scripts will access the baserock system's
extlinux (4.0.3) to install a bootloader on the new deployment which
may have a new syslinux with mismatching modules installed.
Does anyone have some other bright ideas on how we can solve this ?
PS: I have written this all up here on the mailing list as currently it
seems that storyboard.baserock.org
is down, I will try to move this to
storyboard once it comes back online.
PPS: I sent this email aready from wrong address and it was held for
moderation, if the other post gets through, please disregard double