Closed mvollmer closed 4 weeks ago
I was looking at ACCEPT_RELEASE_DATES_AFTER - it goes all the way back to the initial "VM create" dialog: https://github.com/cockpit-project/cockpit/commit/e788a1868ed35e05f033f0e7d . It seems rather arbitrary to me, as enterprise OSes like RHEL 8.10 or Ubuntu LTS are being supported for much longer, while e.g. Fedora releases only last 1.5 years.
This is a fallback for when libosinfo doesn't have an EOL date. I checked osinfo-query -f name,version,release-date,eol-date os
, and of all the things RHEL (and it's friends CentOS stream, AlmaLinux, and Oracle Linux) lack an EOL date. Commercially, these are the most important ones for us.. So that is a bug which we should report to osinfo.
Also, the "3 years" thing completely fails for RHEL. The odd releases aren't supported much, the lower even ones for a long time (I'm not exactly sure how long), and the .10 ones for really long.
Could we perhaps simplify this and do without the button? On the top of the list, show the currently supported ones (known EOL in the future, or unknown EOL) sorted by name and then release date; then add a divider with "Unsupported:", and then show all the EOLed ones (same sorting)? That way they stay immediately searchable, but the top of the list doesn't get cluttered with old stuff.
Could we perhaps simplify this and do without the button?
I think so. The unfiltered list has 158 entries. This is quite manageable, especially together with text filtering.
Idea: we can switch to the full list immediately when searching starts.
diff --git a/src/components/create-vm-dialog/createVmDialog.jsx b/src/components/create-vm-dialog/createVmDialog.jsx
index 169456b5..1bfad279 100644
--- a/src/components/create-vm-dialog/createVmDialog.jsx
+++ b/src/components/create-vm-dialog/createVmDialog.jsx
@@ -477,6 +477,11 @@ class OSRow extends React.Component {
this.setState({ isOpen: false });
onValueChanged('os', null);
}}
+ onTypeaheadInputChanged={() => {
+ // When searching, immediately switch to the full list
+ if (!this.state.showAll)
+ this.setState({ showAll: true });
+ }}
onToggle={(_event, isOpen) => this.setState({ isOpen })}
isOpen={this.state.isOpen}
menuAppendTo="parent"
On the top of the list, show the currently supported ones (known EOL in the future, or unknown EOL) sorted by name and then release date; then add a divider with "Unsupported:", and then show all the EOLed ones (same sorting)?
I have implemented that with PF SelectGroup
s, but unfortunately PF seems to be buggy: The dropdown can not be scrolled. We might first need to port away from the deprecated Select implementation.
I'll do that, seems to be a good idea in general.
I have implemented that with PF
SelectGroup
s, but unfortunately PF seems to be buggy: The dropdown can not be scrolled
Or maybe our overrides don't apply to a Select with isGrouped.
Note that filtering is based both on End-Of-Life and release dates. Thus, we can't strictly say "Show unsupported operating systems" since the hidden ones are not all unsupported, some are just old.
Right, they're implicitly EOL'd. The point is to filter out things that are no longer supported, either with official dates or something that hasn't been touched in a long time. Most modern mainstream distros have published EOL dates.
Not all Linux distros had published official EOL dates, but if they haven't been updated in years, then they're insecure and we don't want to promote those. For example, Hanna Montana Linux hasn't been updated in a long time (2009) and we don't want to show that. Same for more "mainstream" distros, like Corel, Mandrake, and Mandriva.
These are all the ones in the future, sorted by EOL date, release date, version, then name (these should all show up and we shouldn't have to worry about them):
OS | version | release | EOL |
---|---|---|---|
SUSE Linux Enterprise Desktop 12 SP5 | 12.5 | 2019-12-09 | 2024-10-31 |
SUSE Linux Enterprise Server 12 SP5 | 12.5 | 2019-12-09 | 2024-10-31 |
OpenBSD 7.4 | 7.4 | 2023-10-16 | 2024-11-01 |
Alpine Linux 3.17 | 3.17 | 2022-11-22 | 2024-11-22 |
ALT 10.0 | 10.0 | 2021-12-15 | 2024-12-31 |
ALT 10.1 | 10.1 | 2023-02-21 | 2024-12-31 |
Generic Linux 2020 | 2020 | 2020-01-01 | 2025-01-01 |
Mageia 9 | 9 | 2023-08-27 | 2025-03-31 |
OpenBSD 7.5 | 7.5 | 2024-04-05 | 2025-05-01 |
Alpine Linux 3.18 | 3.18 | 2023-05-09 | 2025-05-09 |
ALT 10.2 | 10.2 | 2024-03-13 | 2025-06-30 |
SUSE Linux Enterprise Micro 5.1 | 5.1 | 2021-10-26 | 2025-10-31 |
Alpine Linux 3.19 | 3.19 | 2023-12-07 | 2025-11-01 |
ALT 10.3 | 10.3 | 2024-03-21 | 2025-12-31 |
Alpine Linux 3.20 | 3.20 | 2024-05-22 | 2026-04-01 |
Ubuntu 16.04 | 16.04 | 2016-04-21 | 2026-04-23 |
SUSE Linux Enterprise Micro 5.2 | 5.2 | 2022-04-14 | 2026-04-30 |
Debian 11 | 11 | 2021-08-14 | 2026-08-31 |
SUSE Linux Enterprise Micro 5.3 | 5.3 | 2022-10-25 | 2026-10-30 |
SUSE Linux Enterprise 15 SP4 | 15.4 | 2022-06-21 | 2026-12-31 |
Generic Linux 2022 | 2022 | 2022-01-01 | 2027-01-01 |
Microsoft Windows Server 2016 | 10.0 | 2016-10-15 | 2027-01-12 |
SUSE Linux Enterprise Micro 5.4 | 5.4 | 2023-04-20 | 2027-04-30 |
Ubuntu 18.04 LTS | 18.04 | 2018-04-26 | 2028-04-26 |
Debian 12 | 12 | 2023-06-10 | 2028-06-30 |
Microsoft Windows 10 | 10.0 | 2018-11-13 | 2029-01-09 |
Microsoft Windows Server 2019 | 10.0 | 2018-11-13 | 2029-01-09 |
Microsoft Windows 7 | 6.1 | 2009-10-22 | 2029-01-14 |
Rocky Linux 8 | 8 | 2021-06-21 | 2029-05-31 |
Circle Linux 8.4 | 8.4 | 2021-10-13 | 2029-05-31 |
Circle Linux 8.5 | 8.5 | 2021-11-26 | 2029-05-31 |
Circle Linux 8 Unknown | 8-unknown | 2029-05-31 | |
Ubuntu 20.04 LTS | 20.04 | 2020-04-23 | 2030-04-23 |
Microsoft Windows Server 2022 | 10.0 | 2021-08-18 | 2031-10-14 |
Ubuntu 22.04 LTS | 22.04 | 2022-04-21 | 2032-04-21 |
Rocky Linux 9 | 9 | 2022-07-14 | 2032-05-31 |
Ubuntu 24.04 LTS | 24.04 | 2024-04-25 | 2034-04-25 |
These are all the ones that have a release date but no published EOL, outside of the grace period (these don't show up and most shouldn't):
OS | version | release | EOL |
---|---|---|---|
Novell Netware 4 | 4 | 1993-04-01 | |
NetBSD 0.8 | 0.8 | 1993-04-20 | |
NetBSD 0.9 | 0.9 | 1993-08-23 | |
FreeBSD 1.0 | 1.0 | 1993-11-01 | |
FreeBSD 2.0 | 2.0 | 1994-11-22 | |
FreeBSD 2.0.5 | 2.0.5 | 1995-06-10 | |
Mandrake Linux 5.1 | 5.1 | 1998-07-23 | |
Novell Netware 5 | 5 | 1998-10-01 | |
FreeBSD 3.0 | 3.0 | 1998-10-16 | |
FreeBSD 2.2.8 | 02.02.08 | 1998-11-22 | |
Mandrake Linux 5.2 | 5.2 | 1998-12-01 | |
Mandrake Linux 5.3 | 5.3 | 1999-02-11 | |
FreeBSD 3.2 | 3.2 | 1999-05-17 | |
Mandrake Linux 6.0 | 6.0 | 1999-05-27 | |
Mandrake Linux 6.1 | 6.1 | 1999-09-17 | |
Mandrake Linux 7.0 | 7.0 | 2000-01-14 | |
FreeBSD 4.0 | 4.0 | 2000-03-14 | |
Mandrake Linux 7.1 | 7.1 | 2000-06-13 | |
FreeBSD 4.1 | 4.1 | 2000-06-27 | |
Mandrake Linux 7.2 | 7.2 | 2000-10-30 | |
FreeBSD 4.2 | 4.2 | 2000-11-21 | |
Mandrake Linux 8.0 | 8.0 | 2001-04-19 | |
FreeBSD 4.3 | 4.3 | 2001-04-20 | |
FreeBSD 4.4 | 4.4 | 2001-09-20 | |
Mandrake Linux 8.1 | 8.1 | 2001-09-27 | |
Novell Netware 6 | 6 | 2001-10-01 | |
FreeBSD 4.5 | 4.5 | 2002-01-29 | |
Mandrake Linux 8.2 | 8.2 | 2002-03-18 | |
Mandrake Linux 9.0 | 9.0 | 2002-09-25 | |
Mandrake Linux 9.1 | 9.1 | 2003-03-25 | |
Mandrake Linux 9.2 | 9.2 | 2003-12-14 | |
Mandrake Linux 10.0 | 10.0 | 2004-04-28 | |
Mandrake Linux 10.1 | 10.1 | 2004-10-15 | |
Solaris 10 | 10 | 2005-01-31 | |
Mandrake Linux 10.2 | 10.2 | 2005-04-14 | |
Mandriva Linux 2006.0 | 2006.0 | 2005-10-14 | |
FreeBSD 2.2.9 | 02.02.09 | 2006-04-01 | |
Mandriva Linux 2007 | 2007 | 2006-10-03 | |
Mandriva Linux 2007 Spring | 2007.1 | 2007-04-18 | |
NetBSD 4.0 | 4.0 | 2007-12-19 | |
DragonFlyBSD 1.12.2 | 01.12.02 | 2008-04-20 | |
DragonFlyBSD 2.0.1 | 2.0.1 | 2008-09-27 | |
Mandriva Linux 2010.2 | 2010.2 | 2010-12-01 | |
Oracle Solaris 11 | 11 | 2011-11-09 | |
Red Hat Enterprise Linux 7.0 | 7.0 | 2014-06-10 | |
Oracle Linux 7.0 | 7.0 | 2014-07-11 | |
Red Hat Enterprise Linux 7.1 | 7.1 | 2015-03-05 | |
Oracle Linux 7.1 | 7.1 | 2015-03-11 | |
Asianux Server 7 | 7.0 | 2015-07-16 | |
Red Hat Enterprise Linux 7.2 | 7.2 | 2015-11-19 | |
Oracle Linux 7.2 | 7.2 | 2015-11-25 | |
Asianux Server 7 SP1 | 7.1 | 2016-01-22 | |
Slackware 14.2 | 14.2 | 2016-07-01 | |
Asianux Server 4 SP6 | 4.6 | 2016-07-21 | |
Red Hat Enterprise Linux 7.3 | 7.3 | 2016-11-03 | |
Oracle Linux 7.3 | 7.3 | 2016-11-08 | |
Asianux Server 4 SP7 | 4.7 | 2017-05-26 | |
Red Hat Enterprise Linux 7.4 | 7.4 | 2017-08-01 | |
Oracle Linux 7.4 | 7.4 | 2017-08-04 | |
Asianux Server 7 SP2 | 7.2 | 2017-10-24 | |
CirrOS 0.4.0 | 0.4.0 | 2017-11-20 | |
Red Hat Enterprise Linux 7.5 | 7.5 | 2018-04-10 | |
Oracle Linux 7.5 | 7.5 | 2018-04-12 | |
NetBSD 8.0 | 8.0 | 2018-07-17 | |
Elementary OS 5.0 Juno | 5.0 | 2018-10-16 | |
Red Hat Enterprise Linux 7.6 | 7.6 | 2018-10-30 | |
Oracle Linux 7.6 | 7.6 | 2018-11-19 | |
Android-x86 8.1 | 8.1 | 2019-01-15 | |
Asianux Server 7 SP3 | 7.3 | 2019-02-26 | |
Univention Corporate Server 4.4 | 4.4 | 2019-03-12 | |
Red Hat Enterprise Linux 8.0 | 8.0 | 2019-05-07 | |
NetBSD 8.1 | 8.1 | 2019-05-31 | |
DragonFlyBSD 5.6 | 5.6 | 2019-06-17 | |
Oracle Linux 8.0 | 8.0 | 2019-07-18 | |
Red Hat Enterprise Linux 7.7 | 7.7 | 2019-08-06 | |
Oracle Linux 7.7 | 7.7 | 2019-08-15 | |
Hyperbola | 3 | 2019-09-23 | |
Pop!_OS 19.10 | 19.10 | 2019-10-22 | |
Red Hat Enterprise Linux 8.1 | 8.1 | 2019-11-05 | |
Oracle Linux 8.1 | 8.1 | 2019-11-15 | |
Android-x86 9.0 | 9.0 | 2019-11-15 | |
NetBSD 9.0 | 9.0 | 2020-02-14 | |
CirrOS 0.5.0 | 0.5.0 | 2020-03-04 | |
CirrOS 0.5.1 | 0.5.1 | 2020-03-06 | |
Red Hat Enterprise Linux 7.8 | 7.8 | 2020-03-31 | |
NetBSD 8.2 | 8.2 | 2020-03-31 | |
Oracle Linux 7.8 | 7.8 | 2020-04-08 | |
Guix 1.1 | 1.1 | 2020-04-15 | |
Red Hat Enterprise Linux 8.2 | 8.2 | 2020-04-28 | |
Pop!_OS 20.04 | 20.04 | 2020-04-30 | |
Oracle Linux 8.2 | 8.2 | 2020-05-06 | |
Red Hat Enterprise Linux 7.9 | 7.9 | 2020-09-30 | |
Oracle Linux 7.9 | 7.9 | 2020-10-07 | |
NetBSD 9.1 | 9.1 | 2020-10-18 | |
Pop!_OS 20.10 | 20.10 | 2020-10-23 | |
Red Hat Enterprise Linux 8.3 | 8.3 | 2020-10-29 | |
Oracle Linux 8.3 | 8.3 | 2020-11-13 | |
Freenix 14.2 | 14.2 | 2020-11-30 | |
CirrOS 0.5.2 | 0.5.2 | 2021-03-06 | |
AlmaLinux 8 | 8 | 2021-03-30 | |
Guix 1.3 | 1.3 | 2021-05-11 | |
NetBSD 9.2 | 9.2 | 2021-05-12 | |
Red Hat Enterprise Linux 8.4 | 8.4 | 2021-05-19 | |
Univention Corporate Server 5.0 | 5.0 | 2021-05-25 | |
Oracle Linux 8.4 | 8.4 | 2021-05-26 | |
EuroLinux 8 | 8 | 2021-06-24 | |
MIRACLE LINUX 8.4 | 8.4 | 2021-10-04 | |
Microsoft Windows 11 | 11.0 | 2021-10-05 | |
Red Hat Enterprise Linux 8.5 | 8.5 | 2021-11-10 | |
Oracle Linux 8.5 | 8.5 | 2021-11-16 | |
Trisquel 10.0 LTS | 10 | 2022-02-01 | |
FreeDOS 1.3 | 1.3 | 2022-02-20 | |
Red Hat Enterprise Linux 8.6 | 8.6 | 2022-05-10 | |
Oracle Linux 8.6 | 8.6 | 2022-05-16 | |
Red Hat Enterprise Linux 9.0 | 9.0 | 2022-05-17 | |
AlmaLinux 9 | 9 | 2022-05-26 | |
openSUSE Leap 15.4 | 15.4 | 2022-06-08 | |
EuroLinux 9 | 9 | 2022-06-13 | |
Oracle Linux 9.0 | 9.0 | 2022-06-30 | |
NetBSD 9.3 | 9.3 | 2022-08-04 |
Same, but in the 3 year grace period:
OS | version | release | EOL |
---|---|---|---|
MIRACLE LINUX 9.0 | 9.0 | 2022-11-01 | |
Red Hat Enterprise Linux 8.7 | 8.7 | 2022-11-09 | |
Oracle Linux 8.7 | 8.7 | 2022-11-15 | |
Red Hat Enterprise Linux 9.1 | 9.1 | 2022-11-15 | |
Oracle Linux 9.1 | 9.1 | 2022-11-22 | |
NixOS 22.11 | 22.11 | 2022-11-30 | |
FreeBSD 12.4 | 12.4 | 2022-12-05 | |
Haiku R1/Beta4 | r1beta4 | 2022-12-23 | |
Trisquel 11.0 LTS | 11 | 2023-03-19 | |
FreeBSD 13.2 | 13.2 | 2023-04-11 | |
Red Hat Enterprise Linux 9.2 | 9.2 | 2023-05-10 | |
Oracle Linux 9.2 | 9.2 | 2023-05-15 | |
Red Hat Enterprise Linux 8.8 | 8.8 | 2023-05-16 | |
Oracle Linux 8.8 | 8.8 | 2023-05-23 | |
NixOS 23.05 | 23.05 | 2023-05-31 | |
openSUSE Leap 15.5 | 15.5 | 2023-06-07 | |
SUSE Linux Enterprise 15 SP5 | 15.5 | 2023-06-20 | |
Fedora Linux 39 | 39 | 2023-11-07 | |
Fedora Silverblue 39 | 39 | 2023-11-07 | |
Red Hat Enterprise Linux 9.3 | 9.3 | 2023-11-07 | |
Red Hat Enterprise Linux 8.9 | 8.9 | 2023-11-14 | |
Oracle Linux 9.3 | 9.3 | 2023-11-14 | |
FreeBSD 14.0 | 14.0 | 2023-11-20 | |
Oracle Linux 8.9 | 8.9 | 2023-11-21 | |
NixOS 23.11 | 23.11 | 2023-11-29 | |
NetBSD 10.0 | 10.0 | 2024-03-28 | |
NetBSD 9.4 | 9.4 | 2024-04-20 | |
Fedora Linux 40 | 40 | 2024-04-23 | |
Fedora Silverblue 40 | 40 | 2024-04-23 | |
Red Hat Enterprise Linux 9.4 | 9.4 | 2024-04-30 | |
Endless OS 6.0 | 6.0 | 2024-05-14 | |
Red Hat Enterprise Linux 8.10 | 8.10 | 2024-05-22 | |
NixOS 24.05 | 24.05 | 2024-05-31 |
And these are all the ones without a date (a lot are "unknown"):
OS | release |
---|---|
PureOS | 8 |
CentOS Stream 9 | 9 |
PureOS | 9 |
PureOS | 10 |
SUSE Linux Enterprise Desktop 12 Unknown | 12-unknown |
SUSE Linux Enterprise Server 12 Unknown | 12-unknown |
SUSE Linux Enterprise 15 Unknown | 15-unknown |
Ubuntu 24.10 | 24.10 |
GNOME 3.14 | 3.14 |
Red Hat Enterprise Linux 7 Unknown | 7-unknown |
Scientific Linux 7 Unknown | 7-unknown |
MIRACLE LINUX 8 Unknown | 8-unknown |
Red Hat Enterprise Linux 8 Unknown | 8-unknown |
Asianux Server 8 | 8.0 |
Oracle Linux 8.10 | 8.10 |
Circle Linux 9 Unknown | 9-unknown |
MIRACLE LINUX 9 Unknown | 9-unknown |
Oracle Linux 9 Unknown | 9-unknown |
Red Hat Enterprise Linux 9 Unknown | 9-unknown |
Circle Linux 9.0 | 9.0 |
Oracle Linux 9.4 | 9.4 |
Red Hat Enterprise Linux 9.5 | 9.5 |
Slackware -current | current |
Fedora ELN | ELN |
openSUSE | factory |
Fedora CoreOS | Next |
Haiku Nightly | nightly |
ALT p10 StarterKits | p10 |
ALT p11 StarterKits | p11 |
ALT p8 StarterKits | p8 |
ALT p9 StarterKits | p9 |
Fedora Rawhide | Rawhide |
Fedora Silverblue Rawhide | Rawhide |
ALT regular | sisyphus |
Fedora CoreOS | Stable |
Debian testing | testing |
Fedora CoreOS | Testing |
openSUSE Tumbleweed | tumbleweed |
Asianux unknown | unknown |
Circle Linux Unknown | unknown |
Fedora | unknown |
Fedora Silverblue | unknown |
openSUSE | unknown |
Red Hat Enterprise Linux Unknown | unknown |
Rocky Linux Unknown | unknown |
SUSE CaaS Platform Unknown | unknown |
SUSE Linux Enterprise Unknown | unknown |
NixOS Unstable | unstable |
And all of these are without version, without release dates, and without EOL (and I think they're all rolling and ones we want, except "Unknown"):
OS | version | release | EOL |
---|---|---|---|
Arch Linux | |||
Clear Linux OS | |||
Gentoo Linux | |||
Guix Hurd Latest | |||
Guix latest | |||
Manjaro | |||
NixOS | |||
OmniOSCE Bloody | |||
OpenIndiana Hipster | |||
Triton SmartOS | |||
Unknown | |||
Void Linux |
Note: When the feature was originally made, we didn't have rolling releases of CentOS stream and the like. We definitely need to rethink how it's handled. But we also shouldn't open the floodgates to all the obsolete and insecure distros.
But we also shouldn't open the floodgates to all the obsolete and insecure distros.
That's a good point. We need to weigh "discoverability of the show more.. button" against "accidentally install an old OS".
Both this PR (view more..) and #1872 seem fine to me, I don't have a strong opinion between them. I make the optimistic assumption that admins don't just wildly click around without thinking and creating VMs willy-nilly :grin: @garrett do you have a clear preference between the two approaches?
Note: When the feature was originally made, we didn't have rolling releases of CentOS stream and the like. We definitely need to rethink how it's handled. But we also shouldn't open the floodgates to all the obsolete and insecure distros.
I understand #509 so that we should allow the user to download and install any and all operating systems that Cockpit can possibly download and install. No matter what rules we can come up with to classify operating systems into supported / unsupported or secure / not secure or new / old, the feature we are implementing here is about overriding this rule and allowing the user to download and install a operating system that is unsupported or not secure or old.
Correct?
feature we are implementing here is about overriding this rule and allowing the user to download and install a operating system that is unsupported or not secure or old
Yes and no. There's a difference between EOL and totally abandoned.
OK, how's this for a differentiator:
If it doesn't even have a URL to download the media, then we should skip the list. That will probably get rid of a lot of noise, if we don't already do that.
The question on if it is available or not is important, but it's something that libosinfo should be doing, not us. It would still be interesting to know if they have bogus information, but they should fix that upstream.
(We could do a head request to see if it exists when something is selected, I suppose, and throw an error that the remote media doesn't exist, rather than failing. Or just assume it exists.)
How can we query what libosinfo has for the download media for each entry? The docs aren't straightforward about this. I see the URLs to the OS releases, not the media.
If it doesn't even have a URL to download the media, then we should skip the list. That will probably get rid of a lot of noise, if we don't already do that.
We already do that. :-)
This will show all operating systems, regardless of EOL or release dates. Operating systems with an expired EOL date will be annotated accordingly in the list.
Fixes #509
Demo: https://youtu.be/JXuX2GRQjCM
Note that filtering is based both on End-Of-Life and release dates. Thus, we can't strictly say "Show unsupported operating systems" since the hidden ones are not all unsupported, some are just old.