Put IPCC behind a default-on cargo feature - #113
Conversation
sprockets-tls links libipcc unconditionally, so every consumer's binary carries a NEEDED entry for a library that only exists on Oxide sleds. The support shell (sush) client runs on ordinary machines and only ever uses local keys, so it cannot start at all. Gate the ipcc module, ResolveSetting::Ipcc, AttestConfig::Ipcc, and the libipcc dependency behind an "ipcc" feature, on by default so existing consumers keep building unchanged.
Non-Oxide-sled Helios. The sush client now uses sprockets-tls (in a way that is a conversation for another venue); I built it on Castle, and it failed to run with |
|
It's pretty standard to need to specify the path to link with for binaries that need ipcc which is what we do when building sprockets https://github.com/oxidecomputer/sprockets/blob/main/tls/build.rs . Something seems off here that it isn't working with how we're building for |
The argument here is that the |
|
This feels a little strange because we've typically only done Local <-> Local or IPCC <-> IPCC for connections and this introduces Local <-> IPCC. Is the Local configuration sufficient for representing what sush needs or do we need a 3rd category of connection category to better represent this case? |
I can't answer that from the design POV of this library, as I am very new to it. I can say that I agree this is a new use case, and came out of discussions with Claude on how to secure the sush client Also more than happy to chat live if that's helpful, arrange a meeting, etc. I had been resigned for some months to living with self-signed certs for the proxy, but the actual implementation of that on the client side (TOFU, address collisions, cert warnings on every sled reboot) was looking absolutely horrible, and not at all confidence inspiring for the user. I think this solution is simple, elegant, and secure, but am always open to feedback. The current implementation is spread across three pieces, which may (or may not) provide more context and/or reassurance: |
|
https://github.com/oxidecomputer/omicron/pull/11034/changes#diff-4ea3359eebee6d6a38e5fbb713210813c0838f8c62a7e6de76f8ee23856fff02R61-R64 this part answers my question . I have a light preference for adding another resolve type to be more explicit but maybe @andrewjstone can tell me if I'm being too pedantic and this is actually fine (and I actually think it's very cool that this works!) |
sprockets-tlslinkslibipccunconditionally, so every consumer's binary carries aNEEDEDentry for a library that only exists on Oxide sleds. The support shell (sush) client now usessprockets-tlsto secure connections to the switch zone, but it needs to run on non-Oxide machines.Gate the
ipccmodule,ResolveSetting::Ipcc,AttestConfig::Ipcc, and thelibipccdependency behind an "ipcc" feature, on by default so existing consumers keep building unchanged.See also oxidecomputer/sush#31, oxidecomputer/omicron#11034.
🤖 Disclaimer: LLM assistance was used to produce this patch.