Repository navigation
image: keep libtopo dependencies in the recovery image - #274
Merged
Merged
Conversation
Contributor
Author
|
I am in the process of testing this with oxidecomputer/omicron@58c912e Basically:
I'll report results when they're ready. |
Contributor
Author
|
Mupdate succeeded with both omicron#11279 (using libtopo) + the omicron branch (oxidecomputer/omicron@58c912e) which adds all these shared libraries to the recovery image. This test was performed on london, mupdating sled 14 + 17 (failed without this change, succeeds with this change). (If it matters: sled 14 is a gimlet, sled 17 is a cosmo. both seem update-able via installinator) |
smklein
marked this pull request as ready for review
October 31, 2026 00:25
citrus-it
requested changes
Nov 2, 2026
citrus-it
left a comment
Contributor
There was a problem hiding this comment.
Otherwise LGTM, and I test built it and threw it on a bench gimlet out of interest.
citrus-it
approved these changes
Nov 2, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #273.
The recovery image removes six shared objects that libtopo and the topo
plugins loaded on Oxide hardware depend on. With omicron's in-progress
change to read disk locations from libtopo, installinator in the recovery
image fails its first snapshot ("empty topology") and is then killed by
ld.so.1on a later one (librename.so.1: open failed, referenced bylibipcc_inv_persist). This stops elide-ing them fromrecovery-elide-v3.json.librename.so.1librename_atomic_init); libuuid'sdlpi_walkbinding failslibfmd_agent.so.1pciebus.so,zen.solibdiskstatus.so.1disk.solibjedec.so.1dimm.solibipmi.so.1ipmi_open)libidspace.so.1Total is about 565 KiB, compared with a 149 MiB recovery
zfs.img.How the set was chosen (to be clear: by claude)
ldd -Lrover libtopo and every 64-bit topo plugin on aninstalled Gimlet (helios-3.0.24348) gives 57 libraries. Nine of them are
missing from the recovery image: the six above plus
libsff,libscsiand
libses.oxhc,pciebusandfac_prov_libhp, and oxhc loadsufm,disk,dimmandzen. A 64-bit program taking repeated snapshots loadedexactly those seven plugins.
libsff,libscsiandlibsesare neededonly by
nic.soandses.so, which don't load on Oxide (only thegeneric
pcibusmodule loads them), so they stay elided.(same helios build), I added the six libraries and removed each one in
turn, with the libipcc inventory cache absent, as during a mupdate. With
all six: three full snapshots (1226 hc nodes), and the cache is written.
Each omission fails as shown in the table.
libipmiandlibidspacelook optional at first: the hc tree still fillsin without them. But the first RTLD_NOW plugin dlopen fails, and later
ones succeed only because rtld treats the partially relocated libtopo as
already relocated. That leaves an unresolved lazy reference in place, which
is how
librenameturned into a fatal error rather than a failed dlopen.