-
Notifications
You must be signed in to change notification settings - Fork 1.7k
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
Moving to Ubuntu 20.04 for the official Linux binaries #16793
Comments
RHEL 8 full support ends in May 2024. Using the
The problem is that we used the container for the whole workflow, not just for the build step, but actions now require a newer version of Node. We could probably build on Rocky Linux 8, but that's also EOL in May and at this point it feels like playing whack-a-mole with outdated distros. |
RHEL 8 has 5 more years of maintenance support unfortunately, so I don't think that's going to convince my company to move. On the other hand I do agree it's a pain to support such ancient distros, especially for an open source project. The blame lies with GNU, but I can't see them ever fixing it because it goes against their philosophy. Anyway perhaps as a workaround the extension could detect when glibc is too old and tell you how to use Probably just hackily grepping stdout for |
Can't you just switch to RHEL8 based container instead? Should fix nodejs issue and I'd wager it'd be a baseline supported distro for many tools going forward, similarly to how RHEL 7 is/was. |
I don't know which RHEL8 container you mean, but I did look at
Debian 10 and Ubuntu 18.04 are already EOL, and Amazon Linux 2 has GLIBC 2.26, so a binary built on Rocky 8 won't work there. Of the newer distros, EL9 and AL2023 are already on GLIBC 2.34. Debian 11 and Ubuntu 20.04 are on GLIBC 2.31. So the only extra major distro we could support is EL8, at the potential cost of using an EOLed Rocky container. |
@lnicola "active" support is until May 31, but EOL is in 31 May 2029. There is no need for "active" support of the build machine. Node.js (as far as I understand - the main limiting build dependency) Has been building on CentOS7 (rhel 7 based) until NodeJS 18 in 2022, which was on 2+ years of "maintenance updates" by that point. There is a high chance that for the next 2-4 years Rocky Linux 8 or equivalent will be such "lowest common denominator". |
I totally understand not wanting to have to build on ancient distros. Have you considered linking with Musl? I always distribute my Rust binaries linked with Musl precisely to avoid this Glibc compatibility fiasco. It helps that Rust makes it super easy to do! You get slightly larger binaries but it's easily worth it IMO. |
@danilaml on paper, the idea is that we don't go through too many hoops to support old distros. Ubuntu 20.04 is already 4 years old at this moment. But on every GLIBC bump we've had to argue for days that no, we don't want to support Debian oldoldstable or whatever people were running. The rustup component is perfectly usable (and runs on EL 7), and so are source builds. Just because you (well, not you in particular) think oldoldstable is the best distro to run because you want a stable system, it doesn't mean you're entitled to request that we accommodate you. If you want that stable, maybe you can run a 4 year old rust-analyzer and Rust toolchain, you don't need the latest and greatest. Still, every time, people show up saying "it's not EOL, it's extended support" or "my outdated distro is still very important, unlike the other outdated distros". That's actually similar to our policy regarding the supported toolchains and versions of VS Code.
You're assuming that we find it desirable to use that Rocky 8 container for 13 years, or until its package servers drop off the Internet. I personally think that's the job of the But I'm personally pretty tired of all these arguments. I switched to the Rocky 8 container in #16928.
Yes, and benchmarked it years ago. "Recently" (in 2020) it got an improved memory allocator, but it's still significantly slower (75 to 89 seconds on Of course, we can (should?) build an extra binary, but VS Code users would have to update it manually, and that's not easier than using |
Ok that all sounds reasonable to me. So perhaps the best solution is to detect the glibc error and tell the user how to fix it then? I imagine you would like to not have to keep answering these questions every time the glibc developers say "la la la la can't hear you" to backwards compatibility.... I certainly wouldn't have come here if it had just said "Your system is too old for the bundled language server. Please run this command instead: ..." Incidentally what's the reason for bundling the binary if it could just be installed via rustup without any of these issues? |
@Timmmm next release will be compatible with EL8, should be good for 10 years or so 😩. If anyone runs into this, it's easy enough to search or explain.
The rustup component is generally up to a week old in nightly and 6 (?) weeks old in stable, but sometimes it might lag a lot more. That shouldn't be an issue for Ubuntu 18.04 users, they clearly can't expect the latest and greatest. |
By the way, here's what's triggering the "compatibility fiasco" as you call it:
Regarding the math functions:
Not sure if that only applies to ARM, but a 2-3x improvement sure sounds good. If you're wondering why we need As for |
@lnicola Thanks for the change. I'm totally in agreement with "not going through many hoops" idea, but your rl8 change seems to be 9 lines, most of which is a simple boilerplate. To me it doesn't look like even a single "hoop". If you had to do some tricky compilation hacks/compiler workarounds or build your own dependencies, then it approaches the category of "not worth it", but as long as it doesn't, I see no cons in doing so. |
Thanks! I feel your pain and really appreciate this! Maybe one day Rust won't depend on libc at all on Linux and we can forget about this whole problem... |
@Timmmm won't help with nodejs, afaiu. |
|
Further testing shows
Does this line explain |
No, it's defined here: https://github.com/rust-lang/rust-analyzer/blob/master/editors/code/package.json#L390-L398. I'm not sure what's up, are you using a container or SSH? |
I'm using |
You might be aware of this, but you need to install the extension on the remote side. Maybe the settings editor doesn't recognize it because it's not installed locally? That still doesn't explain why the old key name works. Unless you have an ancient RA on the remote. |
I confirmed the extension is installed on the remote. It is not installed locally, but I'm not sure if that explains why the editor doesn't recognize the settings, because other As an aside, I just updated to version |
Yeah, it's now compatible with EL8 since #16928. |
Wow, thats great - thank you! |
GitHub is upgrading to Node 20, but we can't use that in our Ubuntu 18.04 container. There is an opt-out, but I think we should put it out of its misery and run the release job on Ubuntu 20.04.
Anyone affected should upgrade to a newer distro (Ubuntu 18.04 LTS support ended in May 2023), use the
rustup
component, or build from source.The text was updated successfully, but these errors were encountered: