-
Notifications
You must be signed in to change notification settings - Fork 14
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Switching to a Statically-Linked TLS implementation #47
Conversation
Something I missed, which I'll add in to the RFC: From this PR volta-cli/volta#896, it appears that |
@charlespierce I'd love for this to become a reality! What are your thoughts on CentOS? Should we just stick with Docker for CentOS? We just need to make the install script a little smarter such that it will pick the CentOS download when we're on The "easier" alternative is to release Volta 2 which only supports what ring supports? What do you think about this? |
I investigated whether rustls will work with MUSL and ARM, and I've come to the conclusion that we still need to build the Linux binaries inside a Docker container. We need QEMU emulation to compile the aarch64 and musl targets. Let me know what you think 😊 |
Also, thanks so much for sticking with me through all these PR's. I love Volta and I'd love to help improve it. My wish is to get Volta running on Alpine and to accomplish that I'd love to do the work here. I would be super happy to contribute this to Volta. We just need to figure out some details ( read messages above ) and then I can work on the implementation. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am by no means the TLS expert here, so take this with the mountain of salt that entails, but 👍🏼 on this overall from me!
Since CentOS is really just My CentOS knowledge is lacking to confirm this, maybe someone else knows this? Since we're bundling rustls, can't we just install the |
volta-cli/volta#1165 here is my implementation of this RFC |
This change allowed me to easily add MUSL and ARM64 support to Volta, which is amazing. I believe this change will still work on CentOS6 because we now no longer depend on OpenSSL. I'll try out the binary on CentOS 6 before marking the pull request as ready. |
@jensmeindertsma Thanks for pushing on this! There's (as you've seen!) a lot of complexity here, and it's been a couple of years now since this was set up, so I'm still loading everything back up. We use CentOS in production builds for two reasons:
This change would remove the first, but we still want to maintain the support for older distros. We don't necessarily have to use CentOS any more, but IIRC the oldest version of Linux available natively in GitHub actions was still too new back when we were setting this up. I imagine that has gotten even more true now a couple years later. So we will likely still require a docker build. Continuing to use CentOS 6 will ensure that we still have the same dynamic lib compatibility, so that's why I would lean towards using the same setup as much as possible (just without the extra 'Compile OpenSSL' step). FWIW, it looks like it may be possible to get |
I investigated briansmith/ring#1417 but I couldn't get it to work. I'll try some more tomorrow. |
How old of libc do you want to support? Is there some kind of date up until which you will support CentOS 6? |
Let's chat more in the PR 👍 |
I don't recall off the top of my head the specific version we support, however I remember doing a pretty big test run of possible Linux versions to make sure that it had wide support, which was how we landed on CentOS 6 as the base. We don't have a specific date we were aiming for support, however the 1.0 release includes a commitment to stability. I wouldn't feel comfortable reducing our surface of support without it being a breaking (i.e. 2.0) release. At the same time, I believe a 2.0 release would need to be more than "We're dropping support for a set of old linux releases", as there are a few breaking / updating ideas that we still haven't had the opportunity to fully investigate. Given that, it seems like the best path forward for this RFC would be to maintain the existing build environment, and thus keep the same compatibility support in 1.0. In the future, as part of creating a 2.0 release, we can certainly revisit the matrix of supported versions and potentially update our build. That said, I suspect we'll continue to want a containerized release, since relying on the GitHub actions environment ties our support cadence to GitHub's environment availability, which I don't think we want to do either. |
Thanks for the detailed explanations, that makes sense 👍 |
I'm having a hard time building for CentOS 6 due to recurring issues with Just so I have an idea of what we're talking about, what amount of wide support are we missing out on if we just build on I ran
versus CentOS 6
When we link against |
I'm not an expert, but as I understand it, yes that's the case. If we build / link against version Since we won't need to use OpenSSL, however, it should be fine to use a different distro if there is an older Ubuntu or something with better package repo support. The main thing is the |
Given the OpenSSL version issues (especially with multiple installed versions or the Closing the loop on the unresolved questions, my current thoughts are:
This change seems like it's lining up with the work @mikrostew did to support Yarn 3. While there's still a bit of cleanup on that front, I think the two together easily warrant a 1.1 release of Volta.
Given the 1.1 release, it's probably worth writing a blog post detailing the new features, including this change to the TLS implementation and the reasoning behind it.
This is more up in the air, but we already have precedent for older versions to require a direct link install (see "Installing Old Versions" here). I think it makes sense to hard cut and simplify the installer script, leaving documentation about how to install previous versions, rather than adding to the complexity. |
Rendered