-
Notifications
You must be signed in to change notification settings - Fork 174
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
Dynamically load list of Windows base images #138
Comments
Okay, there is a dynamic list of Windows tags. But how ue4-docker would understand which Windows Server Core version to map to? |
This list is from that page. Presumably for testing the user could specify with the base tag flag? |
The base image is not https://hub.docker.com/_/microsoft-windows-servercore, it's https://hub.docker.com/_/microsoft-dotnet-framework-sdk/ tag
XXX here is currently one of the MS architecture tags, There is code here that if your host is running newer than 10.19024.x.x (i.e. newer than 20H2) it's considered an Insider build and uses the latest stable tag. As it happens,
I don't know of a repository of builds of the .NET Framework SDK images or .NET Framework Runtime images for Windows Insider builds, even though they exist for the underlying Server Core Insider repository. I assume that the team maintaining the .NET container images aren't interested in insider builds, or at least not interested enough to maintain them. And right now, there doesn't appear to be a |
I still can't understand what this issue is about. You want ue4-docker to stop using a hardcoded mapping of "os version -> docker image tag"? But how? Yes, we have a list of tags. Yes, we can query host os for its version. But now ue4-docker has to somehow understand that if host os is Or you want ue4-docker to allow arbitrary values for Or you want something else and I completely missed the point? |
I think the core need here is for ue4-docker/ue4docker/infrastructure/WindowsUtils.py Lines 179 to 184 in d832c11
1809 instead of ltsc2019 .
And it means, for example, ltsc2022 would usable on release-day via And testing on Windows Server LTSC 2022 pre-releases could be done now, without patching ue4-docker. It probably should also improve the logic of the auto-isolation-mode check ue4-docker/ue4docker/infrastructure/BuildConfiguration.py Lines 250 to 257 in d832c11
I don't think it makes sense for ue4-docker/ue4docker/infrastructure/WindowsUtils.py Lines 150 to 158 in d832c11
|
Okay, understood. I started working on this issue.
I'm not sure this will work. We need to construct ltsc2016/ltsc2019/ltsc2022 strings somehow in order to use LTSC base images. But what we actually know about host OS is that it is 1607/1809/whatever-number-2022-would-get. UPD: Or maybe we don't need that logic actually. MS still continues to update 1607 tag in sync with ltsc2016. |
We might need to change how we match OS versions once ltsc2022 is on the table anyway; right now we're using Windows 10 client versions, and mapping those to container tags, but there won't be a Windows Client version that matches ltsc2022. ue4-docker/ue4docker/infrastructure/WindowsUtils.py Lines 160 to 170 in d832c11
based on ue4-docker/ue4docker/infrastructure/WindowsUtils.py Lines 93 to 98 in d832c11
I guess there will be some value in So we might need to be matching build release numbers instead, e.g., the lookup table becomes based on
That said, I had overlooked in my earlier comment that insiders are also a different image, so to build for insiders, both the tag and the repository must be overridden. In the insider case, there are only tags matching We couldn't use |
What do you mean by "matches"? There won't be a Windows Client that can run ltsc2022 images in process isolation mode? |
Yeah, pretty much. I expect that there won't be a Windows 10 (client) release of 10.0.20345.x (or whatever the final build turns out to be, 10.0.20344.x is the latest preview) because the Windows 10 21H1 release is a feature update 10.0.19043.x, and Windows 10 21H2 insider preview is already up to 10.0.21382.x, and they would have to roll back a long way to do a client release to match the Windows Server LTSC 2022 kernel. There were previously releases of the Windows container image to match the LTSC 2022 kernel up to 10.0.20324.1, which makes sense since one expects to support the full range of Windows containers images (Windows, Server Core, and Nanoserver) hosted on Windows Server LTSC in process isolation mode, but MS's support for the other way 'round has so far seemed to rely on having had matching Windows 10 client and Server release kernels. That said, it looks like for Server LTSC 2022 onwards, the Windows container has been replaced with a Server container starting with 10.0.20329.1, so the "full" container image is bifurcated along the same lines as Windows Server LTSC/Windows 10, suggesting this isn't a temporary situation. This is the first Server LTSC release where it was out-of-step with Windows 10 client (and the latter remains in-step with Windows Server SAC), so I might be wrong, and they may have something in the pipeline to address this, but I've not seen any such suggestion around, beyond microsoft/Windows-Containers#36 (which hasn't shown any movement publicly since agreeing that it'd be nice to have in July 2020). |
Wow. Thanks for all those links. I need some timeout to grok it. |
Partially resolves adamrehn#138 (support for insider base image is still missing) This commit: 1. Drops the list of valid Windows versions. Instead, ue4-docker now trusts user input and will fail during image download if user enters something nonexistent 2. Drops 1603->ltsc2016, 1809->ltsc2019 and 2009->20H2 renaming. Instead, ue4-docker directly maps host OS release to Windows Server Core image tag 3. However, ue4-docker now uses advanced logic to determine host OS release. It tries to use DisplayName registry key and fallbacks to ReleaseId if DisplayName doesn't exist. This allows to properly detect 20H2 and 21H1 releases. On the negative side, some checks are lost: 1. It is no longer possible to check that container version is newer that host OS. Though is should still be rejected by Hyper-V 2. ue4-docker no longer prevents user from using suffix that collides with Windows Server Core image tags
Partially resolves adamrehn#138 (support for insider base image is still missing) This commit: 1. Drops the list of valid Windows versions. Instead, ue4-docker now trusts user input and will fail during image download if user enters something nonexistent 2. Drops 1603->ltsc2016, 1809->ltsc2019 and 2009->20H2 renaming. Instead, ue4-docker directly maps host OS release to Windows Server Core image tag 3. However, ue4-docker now uses advanced logic to determine host OS release. It tries to use DisplayName registry key and fallbacks to ReleaseId if DisplayName doesn't exist. This allows to properly detect 20H2 and 21H1 releases. On the negative side, some checks are lost: 1. It is no longer possible to check that container version is newer that host OS. Though is should still be rejected by Hyper-V 2. ue4-docker no longer prevents user from using suffix that collides with Windows Server Core image tags
Partially resolves adamrehn#138 (support for insider base image is still missing) This commit: 1. Drops the list of valid Windows versions. Instead, ue4-docker now trusts user input and will fail during image download if user enters something nonexistent 2. Drops 1603->ltsc2016, 1809->ltsc2019 and 2009->20H2 renaming. Instead, ue4-docker directly maps host OS release to Windows Server Core image tag 3. However, ue4-docker now uses advanced logic to determine host OS release. It tries to use DisplayName registry key and fallbacks to ReleaseId if DisplayName doesn't exist. This allows to properly detect 20H2 and 21H1 releases. On the negative side, some checks are lost: 1. It is no longer possible to check that container version is newer that host OS. Though is should still be rejected by Hyper-V 2. ue4-docker no longer prevents user from using suffix that collides with Windows Server Core image tags
Partially resolves adamrehn#138 (support for insider base image is still missing) This commit: 1. Drops the list of valid Windows versions. Instead, ue4-docker now trusts user input and will fail during image download if user enters something nonexistent 2. Drops 1603->ltsc2016, 1809->ltsc2019 and 2009->20H2 renaming. Instead, ue4-docker directly maps host OS release to Windows Server Core image tag 3. However, ue4-docker now uses advanced logic to determine host OS release. It tries to use DisplayName registry key and fallbacks to ReleaseId if DisplayName doesn't exist. This allows to properly detect 20H2 and 21H1 releases. On the negative side, some checks are lost: 1. It is no longer possible to check that container version is newer that host OS. Though is should still be rejected by Hyper-V 2. ue4-docker no longer prevents user from using suffix that collides with Windows Server Core image tags
Motivation: ReleaseId is confusing. In Windows 20H2, ReleaseId is 2009 (so it doesn't match human-visible version). Even worse, ReleaseId is *also* 2009 in Windows 21H2 and we actually need to use DisplayName to distinguish between the two. Depending on how we proceed with fixing adamrehn#138 and adamrehn#166, we might completely drop ReleaseId and only operate on build numbers. This commit is not expected to change ue4-docker behavior in any way (possibly except for 21H1 that is not supported yet anyway).
Motivation: ReleaseId is confusing. In Windows 20H2, ReleaseId is 2009 (so it doesn't match human-visible version). Even worse, ReleaseId is *also* 2009 in Windows 21H2 and we actually need to use DisplayName to distinguish between the two. Depending on how we proceed with fixing adamrehn#138 and adamrehn#166, we might completely drop ReleaseId and only operate on build numbers. This commit is not expected to change ue4-docker behavior in any way (possibly except for 21H1 that is not supported yet anyway).
Motivation: ReleaseId is confusing. In Windows 20H2, ReleaseId is 2009 (so it doesn't match human-visible version). Even worse, ReleaseId is *also* 2009 in Windows 21H2 and we actually need to use DisplayName to distinguish between the two. Depending on how we proceed with fixing #138 and #166, we might completely drop ReleaseId and only operate on build numbers. This commit is not expected to change ue4-docker behavior in any way (possibly except for 21H1 that is not supported yet anyway).
Partially resolves adamrehn#138 (support for insider base image is still missing) This commit: 1. Drops the list of valid Windows versions. Instead, ue4-docker now trusts user input and will fail during image download if user enters something nonexistent 2. Drops 1603->ltsc2016, 1809->ltsc2019 and 2009->20H2 renaming. Instead, ue4-docker directly maps host OS release to Windows Server Core image tag 3. However, ue4-docker now uses advanced logic to determine host OS release. It tries to use DisplayName registry key and fallbacks to ReleaseId if DisplayName doesn't exist. This allows to properly detect 20H2 and 21H1 releases. On the negative side, some checks are lost: 1. It is no longer possible to check that container version is newer that host OS. Though is should still be rejected by Hyper-V 2. ue4-docker no longer prevents user from using suffix that collides with Windows Server Core image tags
Partially resolves adamrehn#138 (support for insider base image is still missing) This commit: 1. Drops the list of valid Windows versions. Instead, ue4-docker now trusts user input and will fail during image download if user enters something nonexistent 2. Drops 1603->ltsc2016, 1809->ltsc2019 and 2009->20H2 renaming. Instead, ue4-docker directly maps host OS release to Windows Server Core image tag 3. However, ue4-docker now uses advanced logic to determine host OS release. It tries to use DisplayName registry key and fallbacks to ReleaseId if DisplayName doesn't exist. This allows to properly detect 20H2 and 21H1 releases. On the negative side, some checks are lost: 1. It is no longer possible to check that container version is newer that host OS. Though is should still be rejected by Hyper-V 2. ue4-docker no longer prevents user from using suffix that collides with Windows Server Core image tags
Partially resolves adamrehn#138 (support for insider base image is still missing) This commit: 1. Drops the list of valid Windows versions. Instead, ue4-docker now trusts user input and will fail during image download if user enters something nonexistent 2. Drops 1603->ltsc2016, 1809->ltsc2019 and 2009->20H2 renaming. Instead, ue4-docker directly maps host OS release to Windows Server Core image tag 3. However, ue4-docker now uses advanced logic to determine host OS release. It tries to use DisplayName registry key and fallbacks to ReleaseId if DisplayName doesn't exist. This allows to properly detect 20H2 and 21H1 releases. On the negative side, some checks are lost: 1. It is no longer possible to check that container version is newer that host OS. Though is should still be rejected by Hyper-V 2. ue4-docker no longer prevents user from using suffix that collides with Windows Server Core image tags
I wonder what we're still missing in order to mark this as resolved. Ability to use insider images? |
I'm currently running an insider build of Windows so I can't seem to build Windows containers as the latest available tag is 20H2. The list of valid tags seems to be defined here. My OS version is 2009 which seems to be mapped to 20H2 here, however when I try to build, I get the following errors:
Microsoft publish a list of their tags in JSON format so it should be fairly straight forward to pull this in and parse it i'd imagine. I'd make a PR if I knew Python! The list can be found here: https://mcr.microsoft.com/v2/windows/tags/list. It does include tags for 2009:
Output of the
ue4-docker info
command:The text was updated successfully, but these errors were encountered: