From 6659342a3725e94ff368dcbdd2871de0888ae9b3 Mon Sep 17 00:00:00 2001 From: Kroese Date: Sat, 25 May 2024 14:01:29 +0200 Subject: [PATCH 001/290] docs: Updated issue templates (#541) --- .github/ISSUE_TEMPLATE/1-issue.yml | 27 ++------------------------- .github/ISSUE_TEMPLATE/2-feature.yml | 7 ------- .github/ISSUE_TEMPLATE/3-bug.yml | 27 ++------------------------- 3 files changed, 4 insertions(+), 57 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/1-issue.yml b/.github/ISSUE_TEMPLATE/1-issue.yml index 92e235c..68f19b7 100644 --- a/.github/ISSUE_TEMPLATE/1-issue.yml +++ b/.github/ISSUE_TEMPLATE/1-issue.yml @@ -1,35 +1,12 @@ name: "\U0001F6A8 Technical issue" description: When you're experiencing problems using the container body: - - type: checkboxes - attributes: - label: Is there no existing issue for this? - description: Please search to see if no solution was already provided before. - options: - - label: I have searched the existing issues - required: true - - type: input - id: cpu - attributes: - label: Machine specifications - description: The processor and RAM amount in your machine. - placeholder: e.g. Intel N5105 / 16 GB - validations: - required: true - type: input id: os attributes: label: Operating system - description: The distribution and kernel version (as shown by `uname -a`). - placeholder: e.g. Ubuntu 24.04 / Kernel 6.8.0-22-generic - validations: - required: true - - type: input - id: docker - attributes: - label: Docker version - description: The version of the Docker engine (as shown by `docker -v`). - placeholder: e.g. 26.0.1 + description: Your Linux distribution (can be shown by `lsb_release -a`). + placeholder: e.g. Ubuntu 24.04 validations: required: true - type: textarea diff --git a/.github/ISSUE_TEMPLATE/2-feature.yml b/.github/ISSUE_TEMPLATE/2-feature.yml index 5c4a248..eb95b34 100644 --- a/.github/ISSUE_TEMPLATE/2-feature.yml +++ b/.github/ISSUE_TEMPLATE/2-feature.yml @@ -3,13 +3,6 @@ description: Suggest an idea for improving the container title: "[Feature]: " labels: ["enhancement"] body: - - type: checkboxes - attributes: - label: Is there no existing feature request for this? - description: Please search to see if the feature was not already requested before. - options: - - label: I have searched the existing feature requests - required: true - type: textarea id: problem attributes: diff --git a/.github/ISSUE_TEMPLATE/3-bug.yml b/.github/ISSUE_TEMPLATE/3-bug.yml index ca77c2d..131742c 100644 --- a/.github/ISSUE_TEMPLATE/3-bug.yml +++ b/.github/ISSUE_TEMPLATE/3-bug.yml @@ -3,35 +3,12 @@ description: Create a report to help us improve the container title: "[Bug]: " labels: ["bug"] body: - - type: checkboxes - attributes: - label: Is there no existing bug report for this? - description: Please search to see if the bug was not already reported before. - options: - - label: I have searched the existing bug reports - required: true - - type: input - id: cpu - attributes: - label: Machine specifications - description: The processor and RAM amount in your machine. - placeholder: e.g. Intel N5105 / 16 GB - validations: - required: true - type: input id: os attributes: label: Operating system - description: The distribution and kernel version (as shown by `uname -a`). - placeholder: e.g. Ubuntu 24.04 / Kernel 6.8.0-22-generic - validations: - required: true - - type: input - id: docker - attributes: - label: Docker version - description: The version of the Docker engine (as shown by `docker -v`). - placeholder: e.g. 26.0.1 + description: Your Linux distribution (can be shown by `lsb_release -a`). + placeholder: e.g. Ubuntu 24.04 validations: required: true - type: textarea From a96941c63ed2082c452fb9bda9e854cace57e4e4 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 27 May 2024 12:32:55 +0200 Subject: [PATCH 002/290] fix: Remove WinPE driver section (#544) --- assets/win10x64-enterprise-eval.xml | 43 ----------------------------- assets/win10x64-enterprise.xml | 43 ----------------------------- assets/win10x64-iot.xml | 43 ----------------------------- assets/win10x64-ltsc.xml | 43 ----------------------------- assets/win10x64.xml | 43 ----------------------------- assets/win11x64-enterprise-eval.xml | 43 ----------------------------- assets/win11x64-enterprise.xml | 43 ----------------------------- assets/win11x64.xml | 43 ----------------------------- assets/win2008r2-eval.xml | 34 ----------------------- assets/win2008r2.xml | 34 ----------------------- assets/win2012r2-eval.xml | 43 ----------------------------- assets/win2012r2.xml | 43 ----------------------------- assets/win2016-eval.xml | 43 ----------------------------- assets/win2016.xml | 43 ----------------------------- assets/win2019-eval.xml | 43 ----------------------------- assets/win2019.xml | 43 ----------------------------- assets/win2022-eval.xml | 43 ----------------------------- assets/win2022.xml | 43 ----------------------------- assets/win7x64-enterprise.xml | 34 ----------------------- assets/win7x64-ultimate.xml | 34 ----------------------- assets/win7x64.xml | 34 ----------------------- assets/win7x86-enterprise.xml | 34 ----------------------- assets/win7x86-ultimate.xml | 34 ----------------------- assets/win7x86.xml | 34 ----------------------- assets/win81x64-enterprise-eval.xml | 43 ----------------------------- assets/win81x64-enterprise.xml | 43 ----------------------------- assets/win81x64.xml | 43 ----------------------------- assets/winvistax64-enterprise.xml | 13 --------- assets/winvistax64-ultimate.xml | 13 --------- assets/winvistax64.xml | 13 --------- assets/winvistax86-enterprise.xml | 13 --------- assets/winvistax86-ultimate.xml | 13 --------- assets/winvistax86.xml | 13 --------- 33 files changed, 1167 deletions(-) diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml index d489d99..df17cbe 100644 --- a/assets/win10x64-enterprise-eval.xml +++ b/assets/win10x64-enterprise-eval.xml @@ -86,49 +86,6 @@ false - - - - D:\viostor\w10\amd64 - - - D:\NetKVM\w10\amd64 - - - D:\Balloon\w10\amd64 - - - D:\pvpanic\w10\amd64 - - - D:\qemupciserial\w10\amd64 - - - D:\qxldod\w10\amd64 - - - D:\vioinput\w10\amd64 - - - D:\viorng\w10\amd64 - - - D:\vioscsi\w10\amd64 - - - D:\vioserial\w10\amd64 - - - D:\viogpudo\w10\amd64 - - - D:\sriov\w10\amd64 - - - D:\viofs\w10\amd64 - - - diff --git a/assets/win10x64-enterprise.xml b/assets/win10x64-enterprise.xml index b4861fb..5b60828 100644 --- a/assets/win10x64-enterprise.xml +++ b/assets/win10x64-enterprise.xml @@ -89,49 +89,6 @@ false - - - - D:\viostor\w10\amd64 - - - D:\NetKVM\w10\amd64 - - - D:\Balloon\w10\amd64 - - - D:\pvpanic\w10\amd64 - - - D:\qemupciserial\w10\amd64 - - - D:\qxldod\w10\amd64 - - - D:\vioinput\w10\amd64 - - - D:\viorng\w10\amd64 - - - D:\vioscsi\w10\amd64 - - - D:\vioserial\w10\amd64 - - - D:\viogpudo\w10\amd64 - - - D:\sriov\w10\amd64 - - - D:\viofs\w10\amd64 - - - diff --git a/assets/win10x64-iot.xml b/assets/win10x64-iot.xml index 59309aa..9516684 100644 --- a/assets/win10x64-iot.xml +++ b/assets/win10x64-iot.xml @@ -95,49 +95,6 @@ false - - - - D:\viostor\w10\amd64 - - - D:\NetKVM\w10\amd64 - - - D:\Balloon\w10\amd64 - - - D:\pvpanic\w10\amd64 - - - D:\qemupciserial\w10\amd64 - - - D:\qxldod\w10\amd64 - - - D:\vioinput\w10\amd64 - - - D:\viorng\w10\amd64 - - - D:\vioscsi\w10\amd64 - - - D:\vioserial\w10\amd64 - - - D:\viogpudo\w10\amd64 - - - D:\sriov\w10\amd64 - - - D:\viofs\w10\amd64 - - - diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index 8a29ad6..108db1f 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -92,49 +92,6 @@ false - - - - D:\viostor\w10\amd64 - - - D:\NetKVM\w10\amd64 - - - D:\Balloon\w10\amd64 - - - D:\pvpanic\w10\amd64 - - - D:\qemupciserial\w10\amd64 - - - D:\qxldod\w10\amd64 - - - D:\vioinput\w10\amd64 - - - D:\viorng\w10\amd64 - - - D:\vioscsi\w10\amd64 - - - D:\vioserial\w10\amd64 - - - D:\viogpudo\w10\amd64 - - - D:\sriov\w10\amd64 - - - D:\viofs\w10\amd64 - - - diff --git a/assets/win10x64.xml b/assets/win10x64.xml index cf092ba..0b19f99 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -89,49 +89,6 @@ false - - - - D:\viostor\w10\amd64 - - - D:\NetKVM\w10\amd64 - - - D:\Balloon\w10\amd64 - - - D:\pvpanic\w10\amd64 - - - D:\qemupciserial\w10\amd64 - - - D:\qxldod\w10\amd64 - - - D:\vioinput\w10\amd64 - - - D:\viorng\w10\amd64 - - - D:\vioscsi\w10\amd64 - - - D:\vioserial\w10\amd64 - - - D:\viogpudo\w10\amd64 - - - D:\sriov\w10\amd64 - - - D:\viofs\w10\amd64 - - - diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index ff4cdd1..c0045d3 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -104,49 +104,6 @@ - - - - D:\viostor\w11\amd64 - - - D:\NetKVM\w11\amd64 - - - D:\Balloon\w11\amd64 - - - D:\pvpanic\w11\amd64 - - - D:\qemupciserial\w11\amd64 - - - D:\qxldod\w11\amd64 - - - D:\vioinput\w11\amd64 - - - D:\viorng\w11\amd64 - - - D:\vioscsi\w11\amd64 - - - D:\vioserial\w11\amd64 - - - D:\viogpudo\w11\amd64 - - - D:\sriov\w11\amd64 - - - D:\viofs\w11\amd64 - - - diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index 52e27e0..9800436 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -107,49 +107,6 @@ - - - - D:\viostor\w11\amd64 - - - D:\NetKVM\w11\amd64 - - - D:\Balloon\w11\amd64 - - - D:\pvpanic\w11\amd64 - - - D:\qemupciserial\w11\amd64 - - - D:\qxldod\w11\amd64 - - - D:\vioinput\w11\amd64 - - - D:\viorng\w11\amd64 - - - D:\vioscsi\w11\amd64 - - - D:\vioserial\w11\amd64 - - - D:\viogpudo\w11\amd64 - - - D:\sriov\w11\amd64 - - - D:\viofs\w11\amd64 - - - diff --git a/assets/win11x64.xml b/assets/win11x64.xml index a1c04ab..4877868 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -107,49 +107,6 @@ - - - - D:\viostor\w11\amd64 - - - D:\NetKVM\w11\amd64 - - - D:\Balloon\w11\amd64 - - - D:\pvpanic\w11\amd64 - - - D:\qemupciserial\w11\amd64 - - - D:\qxldod\w11\amd64 - - - D:\vioinput\w11\amd64 - - - D:\viorng\w11\amd64 - - - D:\vioscsi\w11\amd64 - - - D:\vioserial\w11\amd64 - - - D:\viogpudo\w11\amd64 - - - D:\sriov\w11\amd64 - - - D:\viofs\w11\amd64 - - - diff --git a/assets/win2008r2-eval.xml b/assets/win2008r2-eval.xml index 25a019e..ed35737 100644 --- a/assets/win2008r2-eval.xml +++ b/assets/win2008r2-eval.xml @@ -81,40 +81,6 @@ false - - - - D:\viostor\2k8R2\amd64 - - - D:\NetKVM\2k8R2\amd64 - - - D:\Balloon\2k8R2\amd64 - - - D:\pvpanic\2k8R2\amd64 - - - D:\qemupciserial\2k8R2\amd64 - - - D:\qxldod\2k8R2\amd64 - - - D:\vioinput\2k8R2\amd64 - - - D:\viorng\2k8R2\amd64 - - - D:\vioscsi\2k8R2\amd64 - - - D:\vioserial\2k8R2\amd64 - - - diff --git a/assets/win2008r2.xml b/assets/win2008r2.xml index ddb79a4..bd75078 100644 --- a/assets/win2008r2.xml +++ b/assets/win2008r2.xml @@ -84,40 +84,6 @@ false - - - - D:\viostor\2k8R2\amd64 - - - D:\NetKVM\2k8R2\amd64 - - - D:\Balloon\2k8R2\amd64 - - - D:\pvpanic\2k8R2\amd64 - - - D:\qemupciserial\2k8R2\amd64 - - - D:\qxldod\2k8R2\amd64 - - - D:\vioinput\2k8R2\amd64 - - - D:\viorng\2k8R2\amd64 - - - D:\vioscsi\2k8R2\amd64 - - - D:\vioserial\2k8R2\amd64 - - - diff --git a/assets/win2012r2-eval.xml b/assets/win2012r2-eval.xml index e0147c5..fcb7c32 100644 --- a/assets/win2012r2-eval.xml +++ b/assets/win2012r2-eval.xml @@ -94,49 +94,6 @@ false - - - - D:\viostor\2k16\amd64 - - - D:\NetKVM\2k16\amd64 - - - D:\Balloon\2k16\amd64 - - - D:\pvpanic\2k16\amd64 - - - D:\qemupciserial\2k16\amd64 - - - D:\qxldod\2k16\amd64 - - - D:\vioinput\2k16\amd64 - - - D:\viorng\2k16\amd64 - - - D:\vioscsi\2k16\amd64 - - - D:\vioserial\2k16\amd64 - - - D:\viogpudo\2k16\amd64 - - - D:\sriov\2k16\amd64 - - - D:\viofs\2k16\amd64 - - - diff --git a/assets/win2012r2.xml b/assets/win2012r2.xml index 18f881a..dea2c37 100644 --- a/assets/win2012r2.xml +++ b/assets/win2012r2.xml @@ -97,49 +97,6 @@ false - - - - D:\viostor\2k16\amd64 - - - D:\NetKVM\2k16\amd64 - - - D:\Balloon\2k16\amd64 - - - D:\pvpanic\2k16\amd64 - - - D:\qemupciserial\2k16\amd64 - - - D:\qxldod\2k16\amd64 - - - D:\vioinput\2k16\amd64 - - - D:\viorng\2k16\amd64 - - - D:\vioscsi\2k16\amd64 - - - D:\vioserial\2k16\amd64 - - - D:\viogpudo\2k16\amd64 - - - D:\sriov\2k16\amd64 - - - D:\viofs\2k16\amd64 - - - diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index 7a1bea3..66fc244 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -94,49 +94,6 @@ false - - - - D:\viostor\2k16\amd64 - - - D:\NetKVM\2k16\amd64 - - - D:\Balloon\2k16\amd64 - - - D:\pvpanic\2k16\amd64 - - - D:\qemupciserial\2k16\amd64 - - - D:\qxldod\2k16\amd64 - - - D:\vioinput\2k16\amd64 - - - D:\viorng\2k16\amd64 - - - D:\vioscsi\2k16\amd64 - - - D:\vioserial\2k16\amd64 - - - D:\viogpudo\2k16\amd64 - - - D:\sriov\2k16\amd64 - - - D:\viofs\2k16\amd64 - - - diff --git a/assets/win2016.xml b/assets/win2016.xml index 58e6c64..1336e3f 100644 --- a/assets/win2016.xml +++ b/assets/win2016.xml @@ -97,49 +97,6 @@ false - - - - D:\viostor\2k16\amd64 - - - D:\NetKVM\2k16\amd64 - - - D:\Balloon\2k16\amd64 - - - D:\pvpanic\2k16\amd64 - - - D:\qemupciserial\2k16\amd64 - - - D:\qxldod\2k16\amd64 - - - D:\vioinput\2k16\amd64 - - - D:\viorng\2k16\amd64 - - - D:\vioscsi\2k16\amd64 - - - D:\vioserial\2k16\amd64 - - - D:\viogpudo\2k16\amd64 - - - D:\sriov\2k16\amd64 - - - D:\viofs\2k16\amd64 - - - diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index 8b76187..e9aebfd 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -94,49 +94,6 @@ false - - - - D:\viostor\2k19\amd64 - - - D:\NetKVM\2k19\amd64 - - - D:\Balloon\2k19\amd64 - - - D:\pvpanic\2k19\amd64 - - - D:\qemupciserial\2k19\amd64 - - - D:\qxldod\2k19\amd64 - - - D:\vioinput\2k19\amd64 - - - D:\viorng\2k19\amd64 - - - D:\vioscsi\2k19\amd64 - - - D:\vioserial\2k19\amd64 - - - D:\viogpudo\2k19\amd64 - - - D:\sriov\2k19\amd64 - - - D:\viofs\2k19\amd64 - - - diff --git a/assets/win2019.xml b/assets/win2019.xml index 3f5b630..aa43463 100644 --- a/assets/win2019.xml +++ b/assets/win2019.xml @@ -97,49 +97,6 @@ false - - - - D:\viostor\2k19\amd64 - - - D:\NetKVM\2k19\amd64 - - - D:\Balloon\2k19\amd64 - - - D:\pvpanic\2k19\amd64 - - - D:\qemupciserial\2k19\amd64 - - - D:\qxldod\2k19\amd64 - - - D:\vioinput\2k19\amd64 - - - D:\viorng\2k19\amd64 - - - D:\vioscsi\2k19\amd64 - - - D:\vioserial\2k19\amd64 - - - D:\viogpudo\2k19\amd64 - - - D:\sriov\2k19\amd64 - - - D:\viofs\2k19\amd64 - - - diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index 75d7cf1..782752e 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -94,49 +94,6 @@ false - - - - D:\viostor\2k22\amd64 - - - D:\NetKVM\2k22\amd64 - - - D:\Balloon\2k22\amd64 - - - D:\pvpanic\2k22\amd64 - - - D:\qemupciserial\2k22\amd64 - - - D:\qxldod\2k22\amd64 - - - D:\vioinput\2k22\amd64 - - - D:\viorng\2k22\amd64 - - - D:\vioscsi\2k22\amd64 - - - D:\vioserial\2k22\amd64 - - - D:\viogpudo\2k22\amd64 - - - D:\sriov\2k22\amd64 - - - D:\viofs\2k22\amd64 - - - diff --git a/assets/win2022.xml b/assets/win2022.xml index 15fdae0..3b61f90 100644 --- a/assets/win2022.xml +++ b/assets/win2022.xml @@ -97,49 +97,6 @@ false - - - - D:\viostor\2k22\amd64 - - - D:\NetKVM\2k22\amd64 - - - D:\Balloon\2k22\amd64 - - - D:\pvpanic\2k22\amd64 - - - D:\qemupciserial\2k22\amd64 - - - D:\qxldod\2k22\amd64 - - - D:\vioinput\2k22\amd64 - - - D:\viorng\2k22\amd64 - - - D:\vioscsi\2k22\amd64 - - - D:\vioserial\2k22\amd64 - - - D:\viogpudo\2k22\amd64 - - - D:\sriov\2k22\amd64 - - - D:\viofs\2k22\amd64 - - - diff --git a/assets/win7x64-enterprise.xml b/assets/win7x64-enterprise.xml index 879767f..14c4060 100644 --- a/assets/win7x64-enterprise.xml +++ b/assets/win7x64-enterprise.xml @@ -85,40 +85,6 @@ false - - - - D:\viostor\w7\amd64 - - - D:\NetKVM\w7\amd64 - - - D:\Balloon\w7\amd64 - - - D:\pvpanic\w7\amd64 - - - D:\qemupciserial\w7\amd64 - - - D:\qxldod\w8\amd64 - - - D:\vioinput\w7\amd64 - - - D:\viorng\w7\amd64 - - - D:\vioscsi\w7\amd64 - - - D:\vioserial\w7\amd64 - - - diff --git a/assets/win7x64-ultimate.xml b/assets/win7x64-ultimate.xml index ad3d5d0..f3c1ae3 100644 --- a/assets/win7x64-ultimate.xml +++ b/assets/win7x64-ultimate.xml @@ -85,40 +85,6 @@ false - - - - D:\viostor\w7\amd64 - - - D:\NetKVM\w7\amd64 - - - D:\Balloon\w7\amd64 - - - D:\pvpanic\w7\amd64 - - - D:\qemupciserial\w7\amd64 - - - D:\qxldod\w8\amd64 - - - D:\vioinput\w7\amd64 - - - D:\viorng\w7\amd64 - - - D:\vioscsi\w7\amd64 - - - D:\vioserial\w7\amd64 - - - diff --git a/assets/win7x64.xml b/assets/win7x64.xml index 14765d2..b9f2908 100644 --- a/assets/win7x64.xml +++ b/assets/win7x64.xml @@ -85,40 +85,6 @@ false - - - - D:\viostor\w7\amd64 - - - D:\NetKVM\w7\amd64 - - - D:\Balloon\w7\amd64 - - - D:\pvpanic\w7\amd64 - - - D:\qemupciserial\w7\amd64 - - - D:\qxldod\w8\amd64 - - - D:\vioinput\w7\amd64 - - - D:\viorng\w7\amd64 - - - D:\vioscsi\w7\amd64 - - - D:\vioserial\w7\amd64 - - - diff --git a/assets/win7x86-enterprise.xml b/assets/win7x86-enterprise.xml index 0aa7779..ef606e5 100644 --- a/assets/win7x86-enterprise.xml +++ b/assets/win7x86-enterprise.xml @@ -85,40 +85,6 @@ false - - - - D:\viostor\w7\x86 - - - D:\NetKVM\w7\x86 - - - D:\Balloon\w7\x86 - - - D:\pvpanic\w7\x86 - - - D:\qemupciserial\w7\x86 - - - D:\qxldod\w8\x86 - - - D:\vioinput\w7\x86 - - - D:\viorng\w7\x86 - - - D:\vioscsi\w7\x86 - - - D:\vioserial\w7\x86 - - - diff --git a/assets/win7x86-ultimate.xml b/assets/win7x86-ultimate.xml index bb002d8..f0748cd 100644 --- a/assets/win7x86-ultimate.xml +++ b/assets/win7x86-ultimate.xml @@ -85,40 +85,6 @@ false - - - - D:\viostor\w7\x86 - - - D:\NetKVM\w7\x86 - - - D:\Balloon\w7\x86 - - - D:\pvpanic\w7\x86 - - - D:\qemupciserial\w7\x86 - - - D:\qxldod\w8\x86 - - - D:\vioinput\w7\x86 - - - D:\viorng\w7\x86 - - - D:\vioscsi\w7\x86 - - - D:\vioserial\w7\x86 - - - diff --git a/assets/win7x86.xml b/assets/win7x86.xml index 8f541ec..c5cd323 100644 --- a/assets/win7x86.xml +++ b/assets/win7x86.xml @@ -85,40 +85,6 @@ false - - - - D:\viostor\w7\x86 - - - D:\NetKVM\w7\x86 - - - D:\Balloon\w7\x86 - - - D:\pvpanic\w7\x86 - - - D:\qemupciserial\w7\x86 - - - D:\qxldod\w8\x86 - - - D:\vioinput\w7\x86 - - - D:\viorng\w7\x86 - - - D:\vioscsi\w7\x86 - - - D:\vioserial\w7\x86 - - - diff --git a/assets/win81x64-enterprise-eval.xml b/assets/win81x64-enterprise-eval.xml index c2a869d..2fe8c73 100644 --- a/assets/win81x64-enterprise-eval.xml +++ b/assets/win81x64-enterprise-eval.xml @@ -86,49 +86,6 @@ false - - - - D:\viostor\w10\amd64 - - - D:\NetKVM\w10\amd64 - - - D:\Balloon\w10\amd64 - - - D:\pvpanic\w10\amd64 - - - D:\qemupciserial\w10\amd64 - - - D:\qxldod\w10\amd64 - - - D:\vioinput\w10\amd64 - - - D:\viorng\w10\amd64 - - - D:\vioscsi\w10\amd64 - - - D:\vioserial\w10\amd64 - - - D:\viogpudo\w10\amd64 - - - D:\sriov\w10\amd64 - - - D:\viofs\w10\amd64 - - - diff --git a/assets/win81x64-enterprise.xml b/assets/win81x64-enterprise.xml index 547ff95..d6c72dc 100644 --- a/assets/win81x64-enterprise.xml +++ b/assets/win81x64-enterprise.xml @@ -89,49 +89,6 @@ false - - - - D:\viostor\w10\amd64 - - - D:\NetKVM\w10\amd64 - - - D:\Balloon\w10\amd64 - - - D:\pvpanic\w10\amd64 - - - D:\qemupciserial\w10\amd64 - - - D:\qxldod\w10\amd64 - - - D:\vioinput\w10\amd64 - - - D:\viorng\w10\amd64 - - - D:\vioscsi\w10\amd64 - - - D:\vioserial\w10\amd64 - - - D:\viogpudo\w10\amd64 - - - D:\sriov\w10\amd64 - - - D:\viofs\w10\amd64 - - - diff --git a/assets/win81x64.xml b/assets/win81x64.xml index 7e76d9b..e5e268e 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -96,49 +96,6 @@ false - - - - D:\viostor\w10\amd64 - - - D:\NetKVM\w10\amd64 - - - D:\Balloon\w10\amd64 - - - D:\pvpanic\w10\amd64 - - - D:\qemupciserial\w10\amd64 - - - D:\qxldod\w10\amd64 - - - D:\vioinput\w10\amd64 - - - D:\viorng\w10\amd64 - - - D:\vioscsi\w10\amd64 - - - D:\vioserial\w10\amd64 - - - D:\viogpudo\w10\amd64 - - - D:\sriov\w10\amd64 - - - D:\viofs\w10\amd64 - - - diff --git a/assets/winvistax64-enterprise.xml b/assets/winvistax64-enterprise.xml index 2cb7593..50527a0 100644 --- a/assets/winvistax64-enterprise.xml +++ b/assets/winvistax64-enterprise.xml @@ -60,19 +60,6 @@ - - - - D:\viostor\2k8\amd64 - - - D:\NetKVM\2k8\amd64 - - - D:\vioscsi\2k8\amd64 - - - diff --git a/assets/winvistax64-ultimate.xml b/assets/winvistax64-ultimate.xml index 4b1d6c5..14c627d 100644 --- a/assets/winvistax64-ultimate.xml +++ b/assets/winvistax64-ultimate.xml @@ -60,19 +60,6 @@ - - - - D:\viostor\2k8\amd64 - - - D:\NetKVM\2k8\amd64 - - - D:\vioscsi\2k8\amd64 - - - diff --git a/assets/winvistax64.xml b/assets/winvistax64.xml index 0f53ffc..f753ea3 100644 --- a/assets/winvistax64.xml +++ b/assets/winvistax64.xml @@ -60,19 +60,6 @@ - - - - D:\viostor\2k8\amd64 - - - D:\NetKVM\2k8\amd64 - - - D:\vioscsi\2k8\amd64 - - - diff --git a/assets/winvistax86-enterprise.xml b/assets/winvistax86-enterprise.xml index d1e1929..d087355 100644 --- a/assets/winvistax86-enterprise.xml +++ b/assets/winvistax86-enterprise.xml @@ -60,19 +60,6 @@ - - - - D:\viostor\2k8\x86 - - - D:\NetKVM\2k8\x86 - - - D:\vioscsi\2k8\x86 - - - diff --git a/assets/winvistax86-ultimate.xml b/assets/winvistax86-ultimate.xml index a8425b7..417722e 100644 --- a/assets/winvistax86-ultimate.xml +++ b/assets/winvistax86-ultimate.xml @@ -60,19 +60,6 @@ - - - - D:\viostor\2k8\x86 - - - D:\NetKVM\2k8\x86 - - - D:\vioscsi\2k8\x86 - - - diff --git a/assets/winvistax86.xml b/assets/winvistax86.xml index 7656474..172e5dd 100644 --- a/assets/winvistax86.xml +++ b/assets/winvistax86.xml @@ -60,19 +60,6 @@ - - - - D:\viostor\2k8\x86 - - - D:\NetKVM\2k8\x86 - - - D:\vioscsi\2k8\x86 - - - From fd83861e7dbdb39817bbe172ba03b3365d687064 Mon Sep 17 00:00:00 2001 From: Kroese Date: Mon, 27 May 2024 12:40:19 +0200 Subject: [PATCH 003/290] feat: Improved installation (#545) --- Dockerfile | 5 +- assets/win11x64-iot.xml | 453 +++++++++++++++++++++++++++++++++++++++ assets/win11x64-ltsc.xml | 453 +++++++++++++++++++++++++++++++++++++++ readme.md | 65 ++---- src/define.sh | 128 ++++++++--- src/entry.sh | 2 +- src/install.sh | 391 +++++++++++++++++++++++---------- src/mido.sh | 185 ++++++++++------ src/power.sh | 26 ++- 9 files changed, 1437 insertions(+), 271 deletions(-) create mode 100644 assets/win11x64-iot.xml create mode 100644 assets/win11x64-ltsc.xml diff --git a/Dockerfile b/Dockerfile index 83773ce..7d6cbd3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:5.07 / / +COPY --from=qemux/qemu-docker:5.08 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" @@ -14,6 +14,7 @@ RUN set -eu && \ 7zip \ wsdd \ samba \ + xz-utils \ wimtools \ dos2unix \ cabextract \ @@ -27,7 +28,7 @@ COPY --chmod=755 ./src /run/ COPY --chmod=755 ./assets /run/assets ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/v0.8/src/wsdd.py /usr/sbin/wsdd -ADD --chmod=664 https://github.com/qemus/virtiso/releases/download/v0.1.248/virtio-win-0.1.248.iso /run/drivers.iso +ADD --chmod=664 https://github.com/qemus/virtiso/releases/download/v0.1.248/virtio-win-0.1.248.tar.xz /drivers.txz EXPOSE 8006 3389 VOLUME /storage diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml new file mode 100644 index 0000000..cf49f4e --- /dev/null +++ b/assets/win11x64-iot.xml @@ -0,0 +1,453 @@ + + + + + + en-US + + 0409:00000409 + en-US + en-US + en-US + + + + + 0 + true + + + + 1 + EFI + 128 + + + + 2 + MSR + 128 + + + + 3 + Primary + true + + + + + + 1 + 1 + + FAT32 + + + + 2 + 2 + + + + 3 + 3 + + C + NTFS + + + + + + + + + /image/index + 2 + + + + 0 + 3 + + false + + + + true + Never + + + false + Never + + + true + Docker + Windows for Docker + + false + + false + + + + 1 + reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassTPMCheck /t REG_DWORD /d 1 /f + + + 2 + reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassSecureBootCheck /t REG_DWORD /d 1 /f + + + 3 + reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassRAMCheck /t REG_DWORD /d 1 /f + + + 4 + reg.exe add "HKLM\SYSTEM\Setup\MoSetup" /v AllowUpgradesWithUnsupportedTPMOrCPU /t REG_DWORD /d 1 /f + + + + + + + false + + + + + true + + + 1 + + + + + true + + + * + + Dockur + Windows for Docker + 24/7 + + Dockur + https://github.com/dockur/windows/issues + + Windows for Docker + + + 1 + + + true + true + https://google.com + about:blank + + + true + true + https://google.com + about:blank + + + 0 + + + 1 + + + 0409:00000409 + en-US + en-US + en-US + + + + + 1 + reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v BypassNRO /t REG_DWORD /d 1 /f + + + 2 + reg.exe load "HKU\mount" "C:\Users\Default\NTUSER.DAT" + + + 3 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "ContentDeliveryAllowed" /t REG_DWORD /d 0 /f + + + 4 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "FeatureManagementEnabled" /t REG_DWORD /d 0 /f + + + 5 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OEMPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f + + + 6 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f + + + 7 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEverEnabled" /t REG_DWORD /d 0 /f + + + 8 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f + + + 9 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SoftLandingEnabled" /t REG_DWORD /d 0 /f + + + 10 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContentEnabled" /t REG_DWORD /d 0 /f + + + 11 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-310093Enabled" /t REG_DWORD /d 0 /f + + + 12 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338387Enabled" /t REG_DWORD /d 0 /f + + + 13 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338388Enabled" /t REG_DWORD /d 0 /f + + + 14 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338389Enabled" /t REG_DWORD /d 0 /f + + + 15 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338393Enabled" /t REG_DWORD /d 0 /f + + + 16 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-353698Enabled" /t REG_DWORD /d 0 /f + + + 17 + reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SystemPaneSuggestionsEnabled" /t REG_DWORD /d 0 /f + + + 18 + reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableCloudOptimizedContent" /t REG_DWORD /d 1 /f + + + 19 + reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f + + + 20 + reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f + + + 21 + reg.exe unload "HKU\mount" + + + 22 + reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableCloudOptimizedContent" /t REG_DWORD /d 1 /f + + + 23 + reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f + + + 24 + reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f + + + 25 + reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f + Set Network Location to Home + + + + + false + + + 0 + + + + + true + all + @FirewallAPI.dll,-28752 + + + + + + + + + true + + + 1 + + + + + + Docker + Administrators + + + true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideLocalAccountScreen>true</HideLocalAccountScreen> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Home</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Task View from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Widgets from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Chat from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> + <Description>Disable unsupported hardware notifications</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> + <Description>Disable unsupported hardware notifications</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml new file mode 100644 index 0000000..16ec029 --- /dev/null +++ b/assets/win11x64-ltsc.xml @@ -0,0 +1,453 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>EFI</Type> + <Size>128</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + <Label>Windows</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Key>/image/index</Key> + <Value>1</Value> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>3</PartitionID> + </InstallTo> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassTPMCheck /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>2</Order> + <Path>reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassSecureBootCheck /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>3</Order> + <Path>reg.exe add "HKLM\SYSTEM\Setup\LabConfig" /v BypassRAMCheck /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>4</Order> + <Path>reg.exe add "HKLM\SYSTEM\Setup\MoSetup" /v AllowUpgradesWithUnsupportedTPMOrCPU /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + </RunSynchronous> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + <SupportHours>24/7</SupportHours> + <SupportPhone /> + <SupportProvider>Dockur</SupportProvider> + <SupportURL>https://github.com/dockur/windows/issues</SupportURL> + </OEMInformation> + <OEMName>Windows for Docker</OEMName> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OOBE" /v BypassNRO /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>2</Order> + <Path>reg.exe load "HKU\mount" "C:\Users\Default\NTUSER.DAT"</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>3</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "ContentDeliveryAllowed" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>4</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "FeatureManagementEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>5</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "OEMPreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>6</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>7</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "PreInstalledAppsEverEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>8</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SilentInstalledAppsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>9</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SoftLandingEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>10</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContentEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>11</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-310093Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>12</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338387Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>13</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338388Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>14</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338389Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>15</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-338393Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>16</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SubscribedContent-353698Enabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>17</Order> + <Path>reg.exe add "HKU\mount\Software\Microsoft\Windows\CurrentVersion\ContentDeliveryManager" /v "SystemPaneSuggestionsEnabled" /t REG_DWORD /d 0 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>18</Order> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableCloudOptimizedContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>19</Order> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>20</Order> + <Path>reg.exe add "HKU\mount\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>21</Order> + <Path>reg.exe unload "HKU\mount"</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>22</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableCloudOptimizedContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>23</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableWindowsConsumerFeatures" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>24</Order> + <Path>reg.exe add "HKLM\Software\Policies\Microsoft\Windows\CloudContent" /v "DisableConsumerAccountStateContent" /t REG_DWORD /d 1 /f</Path> + </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>25</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> + <Description>Set Network Location to Home</Description> + </RunSynchronousCommand> + </RunSynchronous> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="auditSystem" /> + <settings pass="auditUser" /> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PreventDeviceEncryption>true</PreventDeviceEncryption> + </component> + <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideLocalAccountScreen>true</HideLocalAccountScreen> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Home</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Task View from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Widgets from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Chat from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> + <Description>Disable unsupported hardware notifications</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> + <Description>Disable unsupported hardware notifications</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/readme.md b/readme.md index e264a0f..44d461a 100644 --- a/readme.md +++ b/readme.md @@ -87,12 +87,12 @@ kubectl apply -f kubernetes.yml |---|---|---| | `win11` | Windows 11 Pro | 6.4 GB | | `win11e` | Windows 11 Enterprise | 5.8 GB | - | `win10` | Windows 10 Pro | 5.8 GB | + | `win10` | Windows 10 Pro | 5.7 GB | | `ltsc10` | Windows 10 LTSC | 4.6 GB | | `win10e` | Windows 10 Enterprise | 5.2 GB | |||| - | `win8` | Windows 8.1 Pro | 4.2 GB | - | `win8e` | Windows 8.1 Enterprise | 3.8 GB | + | `win8` | Windows 8.1 Pro | 4.0 GB | + | `win8e` | Windows 8.1 Enterprise | 3.7 GB | | `win7` | Windows 7 Enterprise | 3.0 GB | | `vista` | Windows Vista Enterprise | 3.0 GB | | `winxp` | Windows XP Professional | 0.6 GB | @@ -179,22 +179,9 @@ kubectl apply -f kubernetes.yml Replace the example path `/home/user/example.iso` with the filename of your desired ISO file, the value of `VERSION` will be ignored in this case. -* ### How do I customize the installation? - - If you want to modify the settings used during the automatic installation, you can do this by editing the answer file corresponding to your Windows edition, for example [win11x64.xml](https://raw.githubusercontent.com/dockur/windows/master/assets/win11x64.xml) in the case of Windows 11 Pro. - - Apply your modifications to it, and add this line to your compose file: - - ```yaml - volumes: - - /home/user/example.xml:/custom.xml - ``` - - Replace the example path `/home/user/example.xml` with the filename of the modified XML file. - * ### How do I run a script after installation? - To run your own script after installation, you can create a file called `install.bat` and place it in a folder together with other files it needs (programs to install for example). Then bind it in your compose file like this: + To run your own script after installation, you can create a file called `install.bat` and place it in a folder together with any additional files it needs (software to be installed for example). Then bind that folder in your compose file like this: ```yaml volumes: @@ -205,7 +192,7 @@ kubectl apply -f kubernetes.yml * ### How do I perform a manual installation? - It's best to use the automatic installation, as it prevents common issues that occur when running Windows inside a virtualized environment and optimizes various settings to give you maximum performance. + It's best to stick to the automatic installation, as it adjusts various settings to prevent common issues when running Windows inside a virtual environment. However, if you insist on performing the installation manually, add the following environment variable to your compose file: @@ -214,32 +201,6 @@ kubectl apply -f kubernetes.yml MANUAL: "Y" ``` - Then follow these steps: - - - Start the container and connect to [port 8006](http://localhost:8006) of the container in your web browser. After the download is finished, you will see the Windows installation screen. - - - Start the installation by clicking `Install now`. On the next screen, press 'OK' when prompted to `Load driver`. - - - Select the `VirtIO SCSI` driver from the list that matches your Windows version. So for Windows 11, select `D:\amd64\w11\vioscsi.inf` and click 'Next'. - - - Accept the license agreement and select your preferred Windows edition, like Home or Pro. - - - Choose `Custom: Install Windows only (advanced)`, and click `Load driver` on the next screen. - - - Select 'Browse' and navigate to the `D:\NetKVM\w11\amd64` folder, and click 'OK'. - - - Select the `VirtIO Ethernet Adapter` from the list and click 'Next'. - - - Select `Drive 0` and click 'Next'. - - - Wait until Windows finishes copying files and completes the installation. - - - Once you see the desktop, open File Explorer and navigate to the CD-ROM drive (`E:\`). - - - Double-click on `virtio-win-gt-x64.msi` and proceed to install the VirtIO drivers. - - Enjoy your brand new machine, and don't forget to star this repo! - * ### How do I verify if my system supports KVM? To verify if your system supports KVM, run the following commands: @@ -251,11 +212,11 @@ kubectl apply -f kubernetes.yml If you receive an error from `kvm-ok` indicating that KVM acceleration can't be used, check the virtualization settings in the BIOS. -* ### How do I increase the amount of CPU or RAM? +* ### How do I change the amount of CPU or RAM? - By default, 2 CPU cores and 4 GB of RAM are allocated to the container, as those are the minimum requirements of Windows 11. + By default, the container will be allowed to use a maximum of 2 CPU cores and 4 GB of RAM. - If there arises a need to increase this, add the following environment variables: + If you want to adjust this, you can specify the desired amount using the following environment variables: ```yaml environment: @@ -265,12 +226,14 @@ kubectl apply -f kubernetes.yml * ### How do I configure the username and password? - By default, a user called `Docker` is created during installation with an empty password. You can change these credentials in your compose file: + By default, a user called `Docker` is created during the installation, with an empty password. + + If you want to use different credentials, you can change them in your compose file: ```yaml environment: - USERNAME: "john" - PASSWORD: "secret" + USERNAME: "bill" + PASSWORD: "gates" ``` * ### How do I connect using RDP? @@ -279,7 +242,7 @@ kubectl apply -f kubernetes.yml So for a better experience you can connect using any Microsoft Remote Desktop client to the IP of the container, using the username `Docker` and by leaving the password empty. - There is a good RDP client for [Android](https://play.google.com/store/apps/details?id=com.microsoft.rdc.androidx) available from the Play Store and one for [iOS](https://apps.apple.com/nl/app/microsoft-remote-desktop/id714464092?l=en-GB) in the Apple Store. For Linux you can use [FreeRDP](https://www.freerdp.com/) and on Windows just type `mstsc` in the search box. + There is a RDP client for [Android](https://play.google.com/store/apps/details?id=com.microsoft.rdc.androidx) available from the Play Store and one for [iOS](https://apps.apple.com/nl/app/microsoft-remote-desktop/id714464092?l=en-GB) in the Apple Store. For Linux you can use [FreeRDP](https://www.freerdp.com/) and on Windows just type `mstsc` in the search box. * ### How do I assign an individual IP address to the container? diff --git a/src/define.sh b/src/define.sh index 06ded9a..dad5cee 100644 --- a/src/define.sh +++ b/src/define.sh @@ -105,6 +105,10 @@ parseVersion() { VERSION="win10x64-enterprise-iot-eval" [ -z "$DETECTED" ] && DETECTED="win10x64-iot" ;; + "ltsc11" | "11ltsc" | "win11-ltsc" | "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) + VERSION="win11x64-enterprise-ltsc-eval" + [ -z "$DETECTED" ] && DETECTED="win11x64-iot" + ;; "ltsc10" | "10ltsc" | "win10-ltsc" | "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) VERSION="win10x64-enterprise-ltsc-eval" [ -z "$DETECTED" ] && DETECTED="win10x64-ltsc" @@ -358,6 +362,10 @@ printVersion() { "win10"* ) desc="Windows 10" ;; "win11"* ) desc="Windows 11" ;; "winxp"* ) desc="Windows XP" ;; + "win9x"* ) desc="Windows ME" ;; + "win98"* ) desc="Windows 98" ;; + "win95"* ) desc="Windows 95" ;; + "win2k"* ) desc="Windows 2000" ;; "winvista"* ) desc="Windows Vista" ;; "win2025"* ) desc="Windows Server 2025" ;; "win2022"* ) desc="Windows Server 2022" ;; @@ -556,19 +564,10 @@ getVersion() { *" enterprise"* ) id="$id-enterprise" ;; esac ;; - "win10"* ) - case "${name,,}" in - *" iot"* ) id="$id-iot" ;; - *" ltsc"* ) id="$id-ltsc" ;; - *" home"* ) id="$id-home" ;; - *" education"* ) id="$id-education" ;; - *" enterprise evaluation"* ) id="$id-enterprise-eval" ;; - *" enterprise"* ) id="$id-enterprise" ;; - esac - ;; - "win11"* ) + "win10"* | "win11"* ) case "${name,,}" in *" iot"* ) id="$id-iot" ;; + *" ltsc"* ) id="$id-ltsc" ;; *" home"* ) id="$id-home" ;; *" education"* ) id="$id-education" ;; *" enterprise evaluation"* ) id="$id-enterprise-eval" ;; @@ -629,6 +628,14 @@ getMido() { size=6209064960 sum="c8dbc96b61d04c8b01faf6ce0794fdf33965c7b350eaa3eb1e6697019902945c" ;; + "win11x64-enterprise-ltsc-eval" ) + size=4428627968 + sum="8abf91c9cd408368dc73aab3425d5e3c02dae74900742072eb5c750fc637c195" + ;; + "win11x64-enterprise-iot-eval" ) + size=4428627968 + sum="8abf91c9cd408368dc73aab3425d5e3c02dae74900742072eb5c750fc637c195" + ;; "win10x64" ) size=6140975104 sum="a6f470ca6d331eb353b815c043e327a347f594f37ff525f17764738fe812852e" @@ -1034,6 +1041,18 @@ getLink4() { "zh" | "zh-"* ) url="zh-cn_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_3db5a62b.iso" ;; esac ;; + "win11x64-iot" | "win11x64-enterprise-iot-eval" ) + [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 + size=4821989376 + sum="e8f1431c4e6289b3997c20eadbb2576670300bb6e1cf8948b5d7af179010a962" + url="26100.1.240331-1435.ge_release_CLIENTENTERPRISE_OEM_x64FRE_en-us.iso" + ;; + "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) + [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 + size=4821989376 + sum="e8f1431c4e6289b3997c20eadbb2576670300bb6e1cf8948b5d7af179010a962" + url="26100.1.240331-1435.ge_release_CLIENTENTERPRISE_OEM_x64FRE_en-us.iso" + ;; "win10x64" ) case "${culture,,}" in "ar" | "ar-"* ) url="ar-sa_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; @@ -1169,12 +1188,6 @@ getLink4() { "zh" | "zh-"* ) url="zh-cn_windows_10_enterprise_ltsc_2021_x64_dvd_033b7312.iso" ;; esac ;; - "win11x64-iot" | "win11x64-enterprise-iot-eval" ) - [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 - size=6248140800 - sum="5d9b86ad467bc89f488d1651a6c5ad3656a7ea923f9f914510657a24c501bb86" - url="en-us_windows_11_iot_enterprise_version_23h2_x64_dvd_fb37549c.iso" - ;; "win10x64-iot" | "win10x64-enterprise-iot-eval" ) [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 size=4851668992 @@ -1918,6 +1931,32 @@ prepareLegacy() { return 1 } +prepare9x() { + + local iso="$1" + local dir="$2" + local file="$dir/boot.img" + + ETFS=$(basename "$file") + [ -f "$file" ] && [ -s "$file" ] && return 0 + rm -f "$file" + + local src="[BOOT]/Boot-1.44M.img" + [ ! -f "$dir/$src" ] && error "Boot floppy not found!" && return 1 + + cp "$dir/$src" "$file" && return 0 + + return 1 +} + +prepare2k() { + + local dir="$2" + ETFS="[BOOT]/Boot-NoEmul.img" + + return 0 +} + prepareXP() { local dir="$2" @@ -1932,10 +1971,13 @@ prepareXP() { target="$dir/AMD64" fi - rm -rf "$drivers" + local msg="Adding drivers to image..." + info "$msg" && html "$msg" - if ! 7z x /run/drivers.iso -o"$drivers" > /dev/null; then - error "Failed to extract driver ISO file!" && return 1 + mkdir -p "$drivers" + + if ! tar -xf /drivers.txz -C "$drivers" --warning=no-timestamp; then + error "Failed to extract driver!" && return 1 fi cp "$drivers/viostor/xp/$arch/viostor.sys" "$target" @@ -1978,14 +2020,16 @@ prepareXP() { sed -i '/^\[SCSI\]/s/$/\niaStor=\"Intel\(R\) SATA RAID\/AHCI Controller\"/' "$target/TXTSETUP.SIF" sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_8086\&DEV_2922\&CC_0106=\"iaStor\"/' "$target/TXTSETUP.SIF" - local key pid setup + rm -rf "$drivers" + + local key pid file setup setup=$(find "$target" -maxdepth 1 -type f -iname setupp.ini | head -n 1) pid=$(<"$setup") pid="${pid:(-4)}" pid="${pid:0:3}" if [[ "$pid" == "270" ]]; then - info "Warning: this XP version requires a volume license, it will reject the generic key during installation." + warn "this version of Windows XP requires a volume license key (VLK), it will ask for one during installation." fi if [[ "${arch,,}" == "x86" ]]; then @@ -1998,10 +2042,28 @@ prepareXP() { key="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G" fi + local oem="" + local folder="/oem" + + [ ! -d "$folder" ] && folder="/OEM" + [ ! -d "$folder" ] && folder="$STORAGE/oem" + [ ! -d "$folder" ] && folder="$STORAGE/OEM" + + if [ -d "$folder" ]; then + + file=$(find "$folder" -maxdepth 1 -type f -iname install.bat | head -n 1) + + if [ -f "$file" ]; then + unix2dos -q "$file" + oem="\"Script\"=\"cmd /C start \\\"Install\\\" \\\"cmd /C C:\\\\OEM\\\\install.bat\\\"\"" + fi + fi + local username="Docker" local password="*" - [ -n "$USERNAME" ] && username="$USERNAME" + [ -n "$PASSWORD" ] && password="$PASSWORD" + [ -n "$USERNAME" ] && username=$(echo "$USERNAME" | sed 's/[^[:alnum:]@!._-]//g') find "$target" -maxdepth 1 -type f -iname winnt.sif -exec rm {} \; @@ -2055,9 +2117,6 @@ prepareXP() { echo " Home_Page = http://www.google.com" echo " Search_Page = http://www.google.com" echo "" - echo "[RegionalSettings]" - echo " Language=00000409" - echo "" echo "[TerminalServices]" echo " AllowConnections=1" echo "" @@ -2098,10 +2157,10 @@ prepareXP() { echo "\"DefaultSettings.XResolution\"=dword:00000780" echo "\"DefaultSettings.YResolution\"=dword:00000438" echo "" - echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnceEx]" + echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce]" echo "\"ScreenSaver\"=\"reg add \\\"HKCU\\\\Control Panel\\\\Desktop\\\" /f /v \\\"SCRNSAVE.EXE\\\" /t REG_SZ /d \\\"off\\\"\"" echo "\"ScreenSaverOff\"=\"reg add \\\"HKCU\\\\Control Panel\\\\Desktop\\\" /f /v \\\"ScreenSaveActive\\\" /t REG_SZ /d \\\"0\\\"\"" - echo "" + echo "$oem" } | unix2dos > "$dir/\$OEM\$/install.reg" { echo "Set WshShell = WScript.CreateObject(\"WScript.Shell\")" @@ -2118,7 +2177,18 @@ prepareXP() { echo "" } | unix2dos > "$dir/\$OEM\$/cmdlines.txt" - rm -rf "$drivers" + [ ! -d "$folder" ] && return 0 + + msg="Adding OEM folder to image..." + info "$msg" && html "$msg" + + local dest="$dir/\$OEM\$/\$1/" + mkdir -p "$dest" + + if ! cp -r "$folder" "$dest"; then + error "Failed to copy OEM folder!" && return 1 + fi + return 0 } diff --git a/src/entry.sh b/src/entry.sh index 24bdf50..c2c3912 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -35,4 +35,4 @@ cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" & wait $! || : sleep 1 & wait $! -finish 0 +[ ! -f "$QEMU_END" ] && finish 0 diff --git a/src/install.sh b/src/install.sh index 558b10e..8fd09c4 100644 --- a/src/install.sh +++ b/src/install.sh @@ -119,6 +119,7 @@ finishInstall() { fi rm -f "$STORAGE/windows.old" + rm -f "$STORAGE/windows.type" rm -f "$STORAGE/windows.base" rm -f "$STORAGE/windows.boot" rm -f "$STORAGE/windows.mode" @@ -149,21 +150,30 @@ finishInstall() { # Enable secure boot on multi-socket systems to workaround freeze if [ -n "$SOCKETS" ] && [[ "$SOCKETS" != "1" ]]; then BOOT_MODE="windows_secure" - echo "$BOOT_MODE" > "$STORAGE/windows.mode" + echo "$BOOT_MODE" > "$STORAGE/windows.mode" fi fi fi + if [ -n "${DISK_TYPE:-}" ] && [[ "${DISK_TYPE:-}" != "scsi" ]]; then + echo "$DISK_TYPE" > "$STORAGE/windows.type" + fi + rm -rf "$TMP" return 0 } abortInstall() { - local iso="$1" + local dir="$1" + local iso="$2" [[ "${iso,,}" == *".esd" ]] && exit 60 + if [ ! -d "$dir/EFI" ]; then + [[ "${PLATFORM,,}" == "x64" ]] && BOOT_MODE="windows_legacy" + fi + if [ -n "$CUSTOM" ]; then BOOT="$iso" REMOVE="N" @@ -468,6 +478,7 @@ detectLanguage() { setXML() { local file="/custom.xml" + [ ! -f "$file" ] || [ ! -s "$file" ] && file="$STORAGE/custom.xml" [ ! -f "$file" ] || [ ! -s "$file" ] && file="/run/assets/custom.xml" [ ! -f "$file" ] || [ ! -s "$file" ] && file="$1" @@ -478,11 +489,81 @@ setXML() { return 0 } +detectLegacy() { + + local dir="$1" + local find find2 desc + + find=$(find "$dir" -maxdepth 1 -type d -iname win95 | head -n 1) + + if [ -n "$find" ]; then + DETECTED="win95" + desc=$(printEdition "$DETECTED" "Windows 95") + info "Detected: $desc" && return 0 + fi + + find=$(find "$dir" -maxdepth 1 -type d -iname win98 | head -n 1) + + if [ -n "$find" ]; then + DETECTED="win98" + desc=$(printEdition "$DETECTED" "Windows 98") + info "Detected: $desc" && return 0 + fi + + find=$(find "$dir" -maxdepth 1 -type d -iname win9x | head -n 1) + + if [ -n "$find" ]; then + DETECTED="win9x" + desc=$(printEdition "$DETECTED" "Windows ME") + info "Detected: $desc" && return 0 + fi + + find=$(find "$dir" -maxdepth 1 -type d -iname win51 | head -n 1) + find2=$(find "$dir" -maxdepth 1 -type f -iname setupxp.htm | head -n 1) + + if [ -n "$find" ] || [ -n "$find2" ] || [ -f "$dir/WIN51AP" ] || [ -f "$dir/WIN51IC" ]; then + [ -d "$dir/AMD64" ] && DETECTED="winxpx64" || DETECTED="winxpx86" + desc=$(printEdition "$DETECTED" "Windows XP") + info "Detected: $desc" && return 0 + fi + + if [ -f "$dir/CDROM_NT.5" ]; then + DETECTED="win2kx86" + desc=$(printEdition "$DETECTED" "Windows 2000") + info "Detected: $desc" && return 0 + fi + + if [ -f "$dir/WIN51AA" ] || [ -f "$dir/WIN51AD" ] || [ -f "$dir/WIN51AS" ] || [ -f "$dir/WIN51MA" ] || [ -f "$dir/WIN51MD" ]; then + desc="Windows Server 2003" + info "Detected: $desc" && error "$desc is not supported yet!" && exit 54 + fi + + if [ -f "$dir/WIN51IA" ] || [ -f "$dir/WIN51IB" ] || [ -f "$dir/WIN51ID" ] || [ -f "$dir/WIN51IL" ] || [ -f "$dir/WIN51IS" ]; then + desc="Windows Server 2003" + info "Detected: $desc" && error "$desc is not supported yet!" && exit 54 + fi + + return 1 +} + +skipVersion() { + + local version="$1" + + case "${version,,}" in + "win2k"* | "winxp"* | "win9"* ) + return 0 + ;; + esac + + return 1 +} + detectImage() { local dir="$1" local version="$2" - local desc msg language + local desc msg find language XML="" @@ -492,7 +573,7 @@ detectImage() { if [ -n "$DETECTED" ]; then - [[ "${DETECTED,,}" == "winxp"* ]] && return 0 + skipVersion "${DETECTED,,}" && return 0 if ! setXML "" && [[ "$MANUAL" != [Yy1]* ]]; then MANUAL="Y" @@ -504,31 +585,23 @@ detectImage() { fi info "Detecting version from ISO image..." + detectLegacy "$dir" && return 0 - if [ -f "$dir/WIN51" ] || [ -f "$dir/SETUPXP.HTM" ]; then - [ -d "$dir/AMD64" ] && DETECTED="winxpx64" || DETECTED="winxpx86" - desc=$(printEdition "$DETECTED" "Windows XP") - info "Detected: $desc" - return 0 - fi - - local src loc info + local src wim info src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1) if [ ! -d "$src" ]; then - [[ "${PLATFORM,,}" == "x64" ]] && BOOT_MODE="windows_legacy" warn "failed to locate 'sources' folder in ISO image, $FB" && return 1 fi - loc=$(find "$src" -maxdepth 1 -type f -iname install.wim | head -n 1) - [ ! -f "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname install.esd | head -n 1) + wim=$(find "$src" -maxdepth 1 -type f -iname install.wim | head -n 1) + [ ! -f "$wim" ] && wim=$(find "$src" -maxdepth 1 -type f -iname install.esd | head -n 1) - if [ ! -f "$loc" ]; then - [[ "${PLATFORM,,}" == "x64" ]] && BOOT_MODE="windows_legacy" + if [ ! -f "$wim" ]; then warn "failed to locate 'install.wim' or 'install.esd' in ISO image, $FB" && return 1 fi - info=$(wimlib-imagex info -xml "$loc" | tr -d '\000') + info=$(wimlib-imagex info -xml "$wim" | tr -d '\000') ! checkPlatform "$info" && exit 67 DETECTED=$(detectVersion "$info") @@ -575,19 +648,33 @@ prepareImage() { local missing case "${DETECTED,,}" in + "win9"* | "win2k"* ) + MACHINE="pc-i440fx-2.4" ;; "winxp"* | "winvistax86"* | "win7x86"* ) - MACHINE="pc-q35-2.10" - ;; + MACHINE="pc-q35-2.10" ;; + esac + + case "${DETECTED,,}" in + "win9"* | "winxp"* | "win2k"* ) + HV="N" + BOOT_MODE="windows_legacy" ;; + "winvista"* | "win7"* | "win2008"* ) + BOOT_MODE="windows_legacy" ;; esac case "${DETECTED,,}" in "winxp"* ) - BOOT_MODE="windows_legacy" + DISK_TYPE="blk" prepareXP "$iso" "$dir" && return 0 - error "Failed to prepare Windows XP ISO!" && return 1 - ;; - "winvista"* | "win7"* | "win2008"* ) - BOOT_MODE="windows_legacy" ;; + error "Failed to prepare Windows XP ISO!" && return 1 ;; + "win9"* ) + DISK_TYPE="auto" + prepare9x "$iso" "$dir" && return 0 + error "Failed to prepare Windows 9x ISO!" && return 1 ;; + "win2k"* ) + DISK_TYPE="auto" + prepare2k "$iso" "$dir" && return 0 + error "Failed to prepare Windows 2000 ISO!" && return 1 ;; esac if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then @@ -596,10 +683,9 @@ prepareImage() { missing=$(basename "$dir/$EFISYS") [ ! -f "$dir/$ETFS" ] && missing=$(basename "$dir/$ETFS") - warn "failed to locate file '${missing,,}' in ISO image!" - [[ "${PLATFORM,,}" == "arm64" ]] && return 1 - BOOT_MODE="windows_legacy" + error "failed to locate file '${missing,,}' in ISO image!" + return 1 fi prepareLegacy "$iso" "$dir" && return 0 @@ -659,6 +745,118 @@ updateXML() { return 0 } +addDriver() { + + local id="$1" + local path="$2" + local target="$3" + local driver="$4" + local folder="" + + case "${id,,}" in + "win7x86"* ) folder="w7/x86" ;; + "win7x64"* ) folder="w7/amd64" ;; + "win81x64"* ) folder="w10/amd64" ;; + "win10x64"* ) folder="w10/amd64" ;; + "win11x64"* ) folder="w11/amd64" ;; + "win2022"* ) folder="2k22/amd64" ;; + "win2019"* ) folder="2k19/amd64" ;; + "win2016"* ) folder="2k16/amd64" ;; + "win2012"* ) folder="2k16/amd64" ;; + "win2008"* ) folder="2k8R2/amd64" ;; + "win10arm64"* ) folder="w10/ARM64" ;; + "win11arm64"* ) folder="w11/ARM64" ;; + "winvistax86"* ) folder="2k8/x86" ;; + "winvistax64"* ) folder="2k8/amd64" ;; + esac + + if [ -z "$folder" ]; then + warn "no \"$driver\" driver found for \"$DETECTED\" !" && return 0 + fi + + [ ! -d "$path/$driver/$folder" ] && return 0 + + if [[ "${id,,}" == "winvista"* ]]; then + [[ "${driver,,}" == "viorng" ]] && return 0 + fi + + local dest="$path/$target/$driver" + mv "$path/$driver/$folder" "$dest" + + return 0 +} + +addDrivers() { + + local file="$1" + local index="$2" + local version="$3" + + local msg="Adding drivers to image..." + info "$msg" && html "$msg" + + local drivers="$TMP/drivers" + mkdir -p "$drivers" + + if ! tar -xf /drivers.txz -C "$drivers" --warning=no-timestamp; then + error "Failed to extract driver!" && return 1 + fi + + local target="\$WinPEDriver\$" + local dest="$drivers/$target" + mkdir -p "$dest" + + wimlib-imagex update "$file" "$index" --command "delete --force --recursive /$target" >/dev/null || true + + addDriver "$version" "$drivers" "$target" "qxl" + addDriver "$version" "$drivers" "$target" "viofs" + addDriver "$version" "$drivers" "$target" "sriov" + addDriver "$version" "$drivers" "$target" "smbus" + addDriver "$version" "$drivers" "$target" "qxldod" + addDriver "$version" "$drivers" "$target" "viorng" + addDriver "$version" "$drivers" "$target" "viostor" + addDriver "$version" "$drivers" "$target" "NetKVM" + addDriver "$version" "$drivers" "$target" "Balloon" + addDriver "$version" "$drivers" "$target" "vioscsi" + addDriver "$version" "$drivers" "$target" "pvpanic" + addDriver "$version" "$drivers" "$target" "vioinput" + addDriver "$version" "$drivers" "$target" "viogpudo" + addDriver "$version" "$drivers" "$target" "vioserial" + addDriver "$version" "$drivers" "$target" "qemupciserial" + + if ! wimlib-imagex update "$file" "$index" --command "add $dest /$target" >/dev/null; then + return 1 + fi + + rm -rf "$drivers" + return 0 +} + +addFolder() { + + local src="$1" + local folder="/oem" + + [ ! -d "$folder" ] && folder="/OEM" + [ ! -d "$folder" ] && folder="$STORAGE/oem" + [ ! -d "$folder" ] && folder="$STORAGE/OEM" + [ ! -d "$folder" ] && return 0 + + local msg="Adding OEM folder to image..." + info "$msg" && html "$msg" + + local dest="$src/\$OEM\$/\$1/" + mkdir -p "$dest" + + ! cp -r "$folder" "$dest" && return 1 + + local file + file=$(find "$dest" -maxdepth 1 -type f -iname install.bat | head -n 1) + [ -f "$file" ] && unix2dos -q "$file" + + return 0 +} + updateImage() { local dir="$1" @@ -667,9 +865,9 @@ updateImage() { local file="autounattend.xml" local org="${file//.xml/.org}" local dat="${file//.xml/.dat}" - local desc path src loc xml index result + local desc path src wim xml index result - [[ "${DETECTED,,}" == "winxp"* ]] && return 0 + skipVersion "${DETECTED,,}" && return 0 if [ ! -s "$asset" ] || [ ! -f "$asset" ]; then asset="" @@ -682,29 +880,35 @@ updateImage() { src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1) if [ ! -d "$src" ]; then - [[ "${PLATFORM,,}" == "x64" ]] && BOOT_MODE="windows_legacy" - warn "failed to locate 'sources' folder in ISO image, $FB" && return 1 + error "failed to locate 'sources' folder in ISO image, $FB" && return 1 fi - loc=$(find "$src" -maxdepth 1 -type f -iname boot.wim | head -n 1) - [ ! -f "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname boot.esd | head -n 1) + wim=$(find "$src" -maxdepth 1 -type f -iname boot.wim | head -n 1) + [ ! -f "$wim" ] && wim=$(find "$src" -maxdepth 1 -type f -iname boot.esd | head -n 1) - if [ ! -f "$loc" ]; then - [[ "${PLATFORM,,}" == "x64" ]] && BOOT_MODE="windows_legacy" - warn "failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB" && return 1 + if [ ! -f "$wim" ]; then + error "failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB" && return 1 fi index="1" - result=$(wimlib-imagex info -xml "$loc" | tr -d '\000') + result=$(wimlib-imagex info -xml "$wim" | tr -d '\000') if [[ "${result^^}" == *"<IMAGE INDEX=\"2\">"* ]]; then index="2" fi - if wimlib-imagex extract "$loc" "$index" "/$file" "--dest-dir=$TMP" >/dev/null 2>&1; then - if ! wimlib-imagex extract "$loc" "$index" "/$dat" "--dest-dir=$TMP" >/dev/null 2>&1; then - if ! wimlib-imagex extract "$loc" "$index" "/$org" "--dest-dir=$TMP" >/dev/null 2>&1; then - if ! wimlib-imagex update "$loc" "$index" --command "rename /$file /$org" > /dev/null; then + if ! addDrivers "$wim" "$index" "$DETECTED"; then + error "Failed to add drivers to image!" && return 1 + fi + + if ! addFolder "$src"; then + error "Failed to add OEM folder to image!" && return 1 + fi + + if wimlib-imagex extract "$wim" "$index" "/$file" "--dest-dir=$TMP" >/dev/null 2>&1; then + if ! wimlib-imagex extract "$wim" "$index" "/$dat" "--dest-dir=$TMP" >/dev/null 2>&1; then + if ! wimlib-imagex extract "$wim" "$index" "/$org" "--dest-dir=$TMP" >/dev/null 2>&1; then + if ! wimlib-imagex update "$wim" "$index" --command "rename /$file /$org" > /dev/null; then warn "failed to backup original answer file ($file)." fi fi @@ -723,11 +927,11 @@ updateImage() { cp "$asset" "$answer" updateXML "$answer" "$language" - if ! wimlib-imagex update "$loc" "$index" --command "add $answer /$file" > /dev/null; then + if ! wimlib-imagex update "$wim" "$index" --command "add $answer /$file" > /dev/null; then MANUAL="Y" warn "failed to add answer file ($xml) to ISO image, $FB" else - wimlib-imagex update "$loc" "$index" --command "add $answer /$dat" > /dev/null || true + wimlib-imagex update "$wim" "$index" --command "add $answer /$dat" > /dev/null || true fi rm -f "$answer" @@ -736,10 +940,10 @@ updateImage() { if [[ "$MANUAL" == [Yy1]* ]]; then - wimlib-imagex update "$loc" "$index" --command "delete --force /$file" > /dev/null || true + wimlib-imagex update "$wim" "$index" --command "delete --force /$file" > /dev/null || true - if wimlib-imagex extract "$loc" "$index" "/$org" "--dest-dir=$TMP" >/dev/null 2>&1; then - if ! wimlib-imagex update "$loc" "$index" --command "add $TMP/$org /$file" > /dev/null; then + if wimlib-imagex extract "$wim" "$index" "/$org" "--dest-dir=$TMP" >/dev/null 2>&1; then + if ! wimlib-imagex update "$wim" "$index" --command "add $TMP/$org /$file" > /dev/null; then warn "failed to restore original answer file ($org)." fi fi @@ -763,7 +967,7 @@ updateImage() { return 0 } -removeDownload() { +removeImage() { local iso="$1" @@ -774,43 +978,10 @@ removeDownload() { return 0 } -copyOEM() { - - local dir="$1" - local folder="/oem" - local src dest file - - [ ! -d "$folder" ] && folder="/OEM" - [ ! -d "$folder" ] && folder="$STORAGE/oem" - [ ! -d "$folder" ] && folder="$STORAGE/OEM" - [ ! -d "$folder" ] && return 0 - - local msg="Copying OEM folder to image..." - info "$msg" && html "$msg" - - src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1) - - if [ ! -d "$src" ]; then - error "failed to locate 'sources' folder in ISO image!" && return 1 - fi - - dest="$src/\$OEM\$/\$1/" - mkdir -p "$dest" - - if ! cp -r "$folder" "$dest"; then - error "Failed to copy OEM folder!" && return 1 - fi - - file=$(find "$dest" -maxdepth 1 -type f -iname install.bat | head -n 1) - [ -f "$file" ] && unix2dos -q "$file" - - return 0 -} - buildImage() { local dir="$1" - local failed="N" + local failed="" local cat="BOOT.CAT" local log="/run/shm/iso.log" local base size size_gb space space_gb desc @@ -841,31 +1012,25 @@ buildImage() { if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then - if ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -V "${LABEL::30}" \ - -udf -boot-info-table -eltorito-alt-boot -eltorito-boot "$EFISYS" -no-emul-boot -allow-limited-size -quiet "$dir" 2> "$log"; then - failed="Y" - fi + ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -V "${LABEL::30}" \ + -udf -boot-info-table -eltorito-alt-boot -eltorito-boot "$EFISYS" -no-emul-boot -allow-limited-size -quiet "$dir" 2> "$log" && failed="y" else - if [[ "${DETECTED,,}" != "winxp"* ]]; then + case "${DETECTED,,}" in + "win2k"* | "winxp"* ) + ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -boot-load-seg 1984 -boot-load-size 4 -c "$cat" -iso-level 2 -J -l -D -N -joliet-long \ + -relaxed-filenames -V "${LABEL::30}" -quiet "$dir" 2> "$log" && failed="y" ;; + "win9"* ) + ! genisoimage -o "$out" -b "$ETFS" -J -r -V "${LABEL::30}" -quiet "$dir" 2> "$log" && failed="y" ;; + * ) + ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 2 -J -l -D -N -joliet-long -relaxed-filenames -V "${LABEL::30}" \ + -udf -allow-limited-size -quiet "$dir" 2> "$log" && failed="y" ;; + esac - if ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 2 -J -l -D -N -joliet-long -relaxed-filenames -V "${LABEL::30}" \ - -udf -allow-limited-size -quiet "$dir" 2> "$log"; then - failed="Y" - fi - - else - - if ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -boot-load-seg 1984 -boot-load-size 4 -c "$cat" -iso-level 2 -J -l -D -N -joliet-long \ - -relaxed-filenames -V "${LABEL::30}" -quiet "$dir" 2> "$log"; then - failed="Y" - fi - - fi fi - if [[ "$failed" != "N" ]]; then + if [ -n "$failed" ]; then [ -s "$log" ] && echo "$(<"$log")" error "Failed to build image!" && return 1 fi @@ -886,6 +1051,10 @@ bootWindows() { [[ "${PLATFORM,,}" == "arm64" ]] && VGA="virtio-gpu" + if [ -s "$STORAGE/windows.type" ] && [ -f "$STORAGE/windows.type" ]; then + DISK_TYPE=$(<"$STORAGE/windows.type") + fi + if [ -s "$STORAGE/windows.mode" ] && [ -f "$STORAGE/windows.mode" ]; then BOOT_MODE=$(<"$STORAGE/windows.mode") if [ -s "$STORAGE/windows.old" ] && [ -f "$STORAGE/windows.old" ]; then @@ -955,28 +1124,24 @@ if ! extractImage "$ISO" "$DIR" "$VERSION"; then fi if ! detectImage "$DIR" "$VERSION"; then - abortInstall "$ISO" && return 0 + abortInstall "$DIR" "$ISO" && return 0 exit 60 fi if ! prepareImage "$ISO" "$DIR"; then - abortInstall "$ISO" && return 0 - exit 60 + abortInstall "$DIR" "$ISO" && return 0 + exit 66 fi if ! updateImage "$DIR" "$XML" "$LANGUAGE"; then - abortInstall "$ISO" && return 0 - exit 60 -fi - -if ! removeDownload "$ISO"; then - exit 64 -fi - -if ! copyOEM "$DIR"; then + abortInstall "$DIR" "$ISO" && return 0 exit 63 fi +if ! removeImage "$ISO"; then + exit 64 +fi + if ! buildImage "$DIR"; then exit 65 fi diff --git a/src/mido.sh b/src/mido.sh index 59ceae7..ff285cb 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -6,12 +6,18 @@ handle_curl_error() { local error_code="$1" case "$error_code" in + 1) error "Unsupported protocol!" ;; + 2) error "Failed to initialize curl!" ;; + 3) error "The URL format is malformed!" ;; + 5) error "Failed to resolve address of proxy host!" ;; 6) error "Failed to resolve Microsoft servers! Is there an Internet connection?" ;; 7) error "Failed to contact Microsoft servers! Is there an Internet connection or is the server down?" ;; 8) error "Microsoft servers returned a malformed HTTP response!" ;; + 16) error "A problem was detected in the HTTP2 framing layer!" ;; 22) error "Microsoft servers returned a failing HTTP status code!" ;; 23) error "Failed at writing Windows media to disk! Out of disk space or permission error?" ;; - 26) error "Ran out of memory during download!" ;; + 26) error "Failed to read Windows media from disk!" ;; + 27) error "Ran out of memory during download!" ;; 28) error "Connection timed out to Microsoft server!" ;; 35) error "SSL connection error from Microsoft server!" ;; 36) error "Failed to continue earlier download!" ;; @@ -32,22 +38,34 @@ handle_curl_error() { # https://pubs.opengroup.org/onlinepubs/009695399/basedefs/signal.h.html INT) error "Curl was interrupted!" ;; # There could be other signals but these are most common - SEGV | ABRT ) error "Curl crashed! Failed exploitation attempt? Please report any core dumps to curl developers." ;; - *) error "Curl terminated due to a fatal signal!" ;; + SEGV | ABRT ) error "Curl crashed! Please report any core dumps to curl developers." ;; + *) error "Curl terminated due to fatal signal $error_code !" ;; esac esac return 1 } +get_agent() { + + local user_agent + + # Determine approximate latest Firefox release + browser_version="$((124 + ($(date +%s) - 1710892800) / 2419200))" + echo "Mozilla/5.0 (X11; Linux x86_64; rv:${browser_version}.0) Gecko/20100101 Firefox/${browser_version}.0" + + return 0 +} + download_windows() { local id="$1" local lang="$2" + local desc="$3" local sku_id="" local language="" local session_id="" - local browser_version="" + local user_agent="" local windows_version="" local iso_download_link="" local product_edition_id="" @@ -56,12 +74,13 @@ download_windows() { local language_skuid_table_html="" case "${id,,}" in - "win11${PLATFORM,,}" ) windows_version="11" ;; - "win10${PLATFORM,,}" ) windows_version="10" ;; - "win81${PLATFORM,,}" ) windows_version="8" ;; + "win11x64" ) windows_version="11" ;; + "win10x64" ) windows_version="10" ;; + "win81x64" ) windows_version="8" ;; * ) error "Invalid VERSION specified, value \"$id\" is not recognized!" && return 1 ;; esac + user_agent=$(get_agent) language=$(getLanguage "$lang" "name") local url="https://www.microsoft.com/en-us/software-download/windows$windows_version" @@ -69,12 +88,8 @@ download_windows() { 8 | 10) url="${url}ISO";; esac - # Determine approximate latest Firefox release - browser_version="$((124 + ($(date +%s) - 1710892800) / 2419200))" - local user_agent="Mozilla/5.0 (X11; Linux x86_64; rv:${browser_version}.0) Gecko/20100101 Firefox/${browser_version}.0" - # uuidgen: For MacOS (installed by default) and other systems (e.g. with no /proc) that don't have a kernel interface for generating random UUIDs - session_id="$(cat /proc/sys/kernel/random/uuid 2> /dev/null || uuidgen --random)" + session_id=$(cat /proc/sys/kernel/random/uuid 2> /dev/null || uuidgen --random) # Get product edition ID for latest release of given Windows version # Product edition ID: This specifies both the Windows release (e.g. 22H2) and edition ("multi-edition" is default, either Home/Pro/Edu/etc., we select "Pro" in the answer files) in one number @@ -82,7 +97,7 @@ download_windows() { # Also, keeping a "$WindowsVersions" array like Fido does would be way too much of a maintenance burden # Remove "Accept" header that curl sends by default [[ "$DEBUG" == [Yy1]* ]] && echo " - Parsing download page: ${url}" - iso_download_page_html="$(curl --silent --max-time 30 --user-agent "$user_agent" --header "Accept:" --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url")" || { + iso_download_page_html=$(curl --silent --max-time 30 --user-agent "$user_agent" --header "Accept:" --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url") || { handle_curl_error $? return $? } @@ -90,7 +105,7 @@ download_windows() { [[ "$DEBUG" == [Yy1]* ]] && echo -n "Getting Product edition ID: " # tr: Filter for only numerics to prevent HTTP parameter injection # head -c was recently added to POSIX: https://austingroupbugs.net/view.php?id=407 - product_edition_id="$(echo "$iso_download_page_html" | grep -Eo '<option value="[0-9]+">Windows' | cut -d '"' -f 2 | head -n 1 | tr -cd '0-9' | head -c 16)" + product_edition_id=$(echo "$iso_download_page_html" | grep -Eo '<option value="[0-9]+">Windows' | cut -d '"' -f 2 | head -n 1 | tr -cd '0-9' | head -c 16) [[ "$DEBUG" == [Yy1]* ]] && echo "$product_edition_id" [[ "$DEBUG" == [Yy1]* ]] && echo "Permit Session ID: $session_id" @@ -110,17 +125,17 @@ download_windows() { # SKU ID: This specifies the language of the ISO. We always use "English (United States)", however, the SKU for this changes with each Windows release # We must make this request so our next one will be allowed # --data "" is required otherwise no "Content-Length" header will be sent causing HTTP response "411 Length Required" - language_skuid_table_html="$(curl --silent --max-time 30 --request POST --user-agent "$user_agent" --data "" --header "Accept:" --max-filesize 10K --fail --proto =https --tlsv1.2 --http1.1 -- "https://www.microsoft.com/en-US/api/controls/contentinclude/html?pageId=a8f8f489-4c7f-463a-9ca6-5cff94d8d041&host=www.microsoft.com&segments=software-download,$url_segment_parameter&query=&action=getskuinformationbyproductedition&sessionId=$session_id&productEditionId=$product_edition_id&sdVersion=2")" || { + language_skuid_table_html=$(curl --silent --max-time 30 --request POST --user-agent "$user_agent" --data "" --header "Accept:" --max-filesize 10K --fail --proto =https --tlsv1.2 --http1.1 -- "https://www.microsoft.com/en-US/api/controls/contentinclude/html?pageId=a8f8f489-4c7f-463a-9ca6-5cff94d8d041&host=www.microsoft.com&segments=software-download,$url_segment_parameter&query=&action=getskuinformationbyproductedition&sessionId=$session_id&productEditionId=$product_edition_id&sdVersion=2") || { handle_curl_error $? return $? } # tr: Filter for only alphanumerics or "-" to prevent HTTP parameter injection - sku_id="$(echo "$language_skuid_table_html" | grep -m 1 ">${language}<" | sed 's/&quot;//g' | cut -d ',' -f 1 | cut -d ':' -f 2 | tr -cd '[:alnum:]-' | head -c 16)" + sku_id=$(echo "$language_skuid_table_html" | grep -m 1 ">${language}<" | sed 's/&quot;//g' | cut -d ',' -f 1 | cut -d ':' -f 2 | tr -cd '[:alnum:]-' | head -c 16) if [ -z "$sku_id" ]; then language=$(getLanguage "$lang" "desc") - error "No download for the $language language available!" + error "No download in the $language language available for $desc!" return 1 fi @@ -130,7 +145,7 @@ download_windows() { # Get ISO download link # If any request is going to be blocked by Microsoft it's always this last one (the previous requests always seem to succeed) # --referer: Required by Microsoft servers to allow request - iso_download_link_html="$(curl --silent --max-time 30 --request POST --user-agent "$user_agent" --data "" --referer "$url" --header "Accept:" --max-filesize 100K --fail --proto =https --tlsv1.2 --http1.1 -- "https://www.microsoft.com/en-US/api/controls/contentinclude/html?pageId=6e2a1789-ef16-4f27-a296-74ef7ef5d96b&host=www.microsoft.com&segments=software-download,$url_segment_parameter&query=&action=GetProductDownloadLinksBySku&sessionId=$session_id&skuId=$sku_id&language=English&sdVersion=2")" + iso_download_link_html=$(curl --silent --max-time 30 --request POST --user-agent "$user_agent" --data "" --referer "$url" --header "Accept:" --max-filesize 100K --fail --proto =https --tlsv1.2 --http1.1 -- "https://www.microsoft.com/en-US/api/controls/contentinclude/html?pageId=6e2a1789-ef16-4f27-a296-74ef7ef5d96b&host=www.microsoft.com&segments=software-download,$url_segment_parameter&query=&action=GetProductDownloadLinksBySku&sessionId=$session_id&skuId=$sku_id&language=English&sdVersion=2") if ! [ "$iso_download_link_html" ]; then # This should only happen if there's been some change to how this API works @@ -146,7 +161,7 @@ download_windows() { # Filter for 64-bit ISO download URL # sed: HTML decode "&" character # tr: Filter for only alphanumerics or punctuation - iso_download_link="$(echo "$iso_download_link_html" | grep -o "https://software.download.prss.microsoft.com.*IsoX64" | cut -d '"' -f 1 | sed 's/&amp;/\&/g' | tr -cd '[:alnum:][:punct:]')" + iso_download_link=$(echo "$iso_download_link_html" | grep -o "https://software.download.prss.microsoft.com.*IsoX64" | cut -d '"' -f 1 | sed 's/&amp;/\&/g' | tr -cd '[:alnum:][:punct:]') if ! [ "$iso_download_link" ]; then # This should only happen if there's been some change to the download endpoint web address @@ -162,37 +177,47 @@ download_windows_eval() { local id="$1" local lang="$2" + local desc="$3" + local filter="" local culture="" local language="" - local windows_version="" + local user_agent="" local enterprise_type="" + local windows_version="" case "${id,,}" in "win11${PLATFORM,,}-enterprise-eval" ) - windows_version="windows-11-enterprise" - enterprise_type="enterprise" ;; + enterprise_type="enterprise" + windows_version="windows-11-enterprise" ;; + "win11${PLATFORM,,}-enterprise-iot-eval" ) + enterprise_type="iot" + windows_version="windows-11-iot-enterprise-ltsc" ;; + "win11${PLATFORM,,}-enterprise-ltsc-eval" ) + enterprise_type="iot" + windows_version="windows-11-iot-enterprise-ltsc" ;; "win10${PLATFORM,,}-enterprise-eval" ) - windows_version="windows-10-enterprise" - enterprise_type="enterprise" ;; + enterprise_type="enterprise" + windows_version="windows-10-enterprise" ;; "win10${PLATFORM,,}-enterprise-ltsc-eval" ) - windows_version="windows-10-enterprise" - enterprise_type="ltsc" ;; + enterprise_type="ltsc" + windows_version="windows-10-enterprise" ;; "win2022-eval" ) - windows_version="windows-server-2022" - enterprise_type="server" ;; + enterprise_type="server" + windows_version="windows-server-2022" ;; "win2019-eval" ) - windows_version="windows-server-2019" - enterprise_type="server" ;; + enterprise_type="server" + windows_version="windows-server-2019" ;; "win2016-eval" ) - windows_version="windows-server-2016" - enterprise_type="server" ;; + enterprise_type="server" + windows_version="windows-server-2016" ;; "win2012r2-eval" ) - windows_version="windows-server-2012-r2" - enterprise_type="server" ;; + enterprise_type="server" + windows_version="windows-server-2012-r2" ;; * ) error "Invalid VERSION specified, value \"$id\" is not recognized!" && return 1 ;; esac + user_agent=$(get_agent) culture=$(getLanguage "$lang" "culture") local country="${culture#*-}" @@ -200,7 +225,7 @@ download_windows_eval() { local url="https://www.microsoft.com/en-us/evalcenter/download-$windows_version" [[ "$DEBUG" == [Yy1]* ]] && echo "Parsing download page: ${url}" - iso_download_page_html="$(curl --silent --max-time 30 --location --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url")" || { + iso_download_page_html=$(curl --silent --max-time 30 --user-agent "$user_agent" --location --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url") || { handle_curl_error $? return $? } @@ -212,32 +237,52 @@ download_windows_eval() { fi [[ "$DEBUG" == [Yy1]* ]] && echo "Getting download link.." - iso_download_links="$(echo "$iso_download_page_html" | grep -o "https://go.microsoft.com/fwlink/p/?LinkID=[0-9]\+&clcid=0x[0-9a-z]\+&culture=${culture,,}&country=${country^^}")" || { + + if [[ "$enterprise_type" == "iot" ]]; then + filter="https://go.microsoft.com/fwlink/?linkid=[0-9]\+&clcid=0x[0-9a-z]\+&culture=${culture,,}&country=${country^^}" + else + filter="https://go.microsoft.com/fwlink/p/?LinkID=[0-9]\+&clcid=0x[0-9a-z]\+&culture=${culture,,}&country=${country^^}" + fi + + iso_download_links=$(echo "$iso_download_page_html" | grep -io "$filter") || { # This should only happen if there's been some change to the download endpoint web address if [[ "${lang,,}" == "en" ]] || [[ "${lang,,}" == "en-"* ]]; then error "Windows server download page gave us no download link!" else language=$(getLanguage "$lang" "desc") - error "No download for the $language language available!" + error "No download in the $language language available for $desc!" fi return 1 } - # Limit untrusted size for input validation - iso_download_links="$(echo "$iso_download_links" | head -c 1024)" - case "$enterprise_type" in - # Select x64 download link - "enterprise") iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1) ;; - # Select x64 LTSC download link - "ltsc") iso_download_link=$(echo "$iso_download_links" | head -n 4 | tail -n 1) ;; - *) iso_download_link="$iso_download_links" ;; + "enterprise" ) + iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1) + ;; + "iot" ) + if [[ "${PLATFORM,,}" == "x64" ]]; then + iso_download_link=$(echo "$iso_download_links" | head -n 1) + fi + if [[ "${PLATFORM,,}" == "arm64" ]]; then + iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1) + fi + ;; + "ltsc" ) + iso_download_link=$(echo "$iso_download_links" | head -n 4 | tail -n 1) + ;; + "server" ) + iso_download_link=$(echo "$iso_download_links" | head -n 1) + ;; + * ) + error "Invalid type specified, value \"$enterprise_type\" is not recognized!" && return 1 ;; esac + [[ "$DEBUG" == [Yy1]* ]] && echo "Found download link: $iso_download_link" + # Follow redirect so proceeding log message is useful # This is a request we make this Fido doesn't # We don't need to set "--max-filesize" here because this is a HEAD request and the output is to /dev/null anyway - iso_download_link="$(curl --silent --max-time 30 --location --output /dev/null --silent --write-out "%{url_effective}" --head --fail --proto =https --tlsv1.2 --http1.1 -- "$iso_download_link")" || { + iso_download_link=$(curl --silent --max-time 30 --user-agent "$user_agent" --location --output /dev/null --silent --write-out "%{url_effective}" --head --fail --proto =https --tlsv1.2 --http1.1 -- "$iso_download_link") || { # This should only happen if the Microsoft servers are down handle_curl_error $? return $? @@ -252,37 +297,46 @@ getWindows() { local version="$1" local lang="$2" local desc="$3" - local language + + local language edition + language=$(getLanguage "$lang" "desc") + edition=$(printEdition "$version" "$desc") local msg="Requesting $desc from Microsoft server..." info "$msg" && html "$msg" + case "${version,,}" in + "win2008r2" | "win81${PLATFORM,,}-enterprise-eval" | "win11${PLATFORM,,}-enterprise-iot-eval" ) + if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then + error "No download in the $language language available for $edition!" + MIDO_URL="" && return 1 + fi ;; + esac + + case "${version,,}" in + "win11${PLATFORM,,}-enterprise-iot-eval" ) ;; + * ) + if [[ "${PLATFORM,,}" != "x64" ]]; then + error "No download for the ${PLATFORM^^} platform available for $edition!" + MIDO_URL="" && return 1 + fi ;; + esac + case "${version,,}" in "win81${PLATFORM,,}" | "win10${PLATFORM,,}" | "win11${PLATFORM,,}" ) - download_windows "$version" "$lang" && return 0 + download_windows "$version" "$lang" "$edition" && return 0 ;; - "win11${PLATFORM,,}-enterprise-eval" ) - download_windows_eval "$version" "$lang" && return 0 - ;; - "win10${PLATFORM,,}-enterprise-eval" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) - download_windows_eval "$version" "$lang" && return 0 + "win11${PLATFORM,,}-enterprise"* | "win10${PLATFORM,,}-enterprise"* ) + download_windows_eval "$version" "$lang" "$edition" && return 0 ;; "win2022-eval" | "win2019-eval" | "win2016-eval" | "win2012r2-eval" ) - download_windows_eval "$version" "$lang" && return 0 + download_windows_eval "$version" "$lang" "$edition" && return 0 ;; "win81${PLATFORM,,}-enterprise-eval" ) - if [[ "${lang,,}" == "en" ]] || [[ "${lang,,}" == "en-"* ]]; then - MIDO_URL="https://download.microsoft.com/download/B/9/9/B999286E-0A47-406D-8B3D-5B5AD7373A4A/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_ENTERPRISE_EVAL_EN-US-IR3_CENA_X64FREE_EN-US_DV9.ISO" && return 0 - fi - language=$(getLanguage "$lang" "desc") - error "No download for the $language language available!" + MIDO_URL="https://download.microsoft.com/download/B/9/9/B999286E-0A47-406D-8B3D-5B5AD7373A4A/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_ENTERPRISE_EVAL_EN-US-IR3_CENA_X64FREE_EN-US_DV9.ISO" && return 0 ;; "win2008r2" ) - if [[ "${lang,,}" == "en" ]] || [[ "${lang,,}" == "en-"* ]]; then - MIDO_URL="https://download.microsoft.com/download/4/1/D/41DEA7E0-B30D-4012-A1E3-F24DC03BA1BB/7601.17514.101119-1850_x64fre_server_eval_en-us-GRMSXEVAL_EN_DVD.iso" && return 0 - fi - language=$(getLanguage "$lang" "desc") - error "No download for the $language language available!" + MIDO_URL="https://download.microsoft.com/download/4/1/D/41DEA7E0-B30D-4012-A1E3-F24DC03BA1BB/7601.17514.101119-1850_x64fre_server_eval_en-us-GRMSXEVAL_EN_DVD.iso" && return 0 ;; * ) error "Invalid VERSION specified, value \"$version\" is not recognized!" ;; esac @@ -385,8 +439,9 @@ getESD() { size=$(stat -c%s "$dir/$eFile") if ((size<20)); then + desc=$(printEdition "$version" "$desc") language=$(getLanguage "$lang" "desc") - error "the $language language is not supported by this download method!" && return 1 + error "No download in the $language language available for $desc!" && return 1 fi local tag="FilePath" diff --git a/src/power.sh b/src/power.sh index 3b61825..6540a56 100644 --- a/src/power.sh +++ b/src/power.sh @@ -29,7 +29,12 @@ boot() { if [ -s "$QEMU_PTY" ]; then if [ "$(stat -c%s "$QEMU_PTY")" -gt 7 ]; then - if ! grep -Fq "BOOTMGR is missing" "$QEMU_PTY"; then + local fail="" + if [[ "${BOOT_MODE,,}" == "windows_legacy" ]]; then + grep -Fq "No bootable device." "$QEMU_PTY" && fail="y" + grep -Fq "BOOTMGR is missing" "$QEMU_PTY" && fail="y" + fi + if [ -z "$fail" ]; then info "Windows started succesfully, visit http://localhost:8006/ to view the screen..." return 0 fi @@ -37,6 +42,11 @@ boot() { fi error "Timeout while waiting for QEMU to boot the machine!" + + local pid + pid=$(<"$QEMU_PID") + { kill -15 "$pid" || true; } 2>/dev/null + return 0 } @@ -49,18 +59,14 @@ ready() { local last local bios="Booting from Hard" last=$(grep "^Booting.*" "$QEMU_PTY" | tail -1) - if [[ "${last,,}" == "${bios,,}"* ]]; then - if ! grep -Fq "BOOTMGR is missing" "$QEMU_PTY"; then - return 0 - fi - fi - return 1 + [[ "${last,,}" != "${bios,,}"* ]] && return 1 + grep -Fq "No bootable device." "$QEMU_PTY" && return 1 + grep -Fq "BOOTMGR is missing" "$QEMU_PTY" && return 1 + return 0 fi local line="\"Windows Boot Manager\"" - if grep -Fq "$line" "$QEMU_PTY"; then - return 0 - fi + grep -Fq "$line" "$QEMU_PTY" && return 0 return 1 } From 4e2651e06a0eac1cddf5020e06bb0fc67276fc00 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 27 May 2024 16:53:00 +0200 Subject: [PATCH 004/290] feat: Initial support for Windows Server 2025 (#546) --- assets/win2025-eval.xml | 341 +++++++++++++++++++++++++++++++++++++++ assets/win2025.xml | 344 ++++++++++++++++++++++++++++++++++++++++ src/define.sh | 115 +++++++++++++- src/install.sh | 58 +------ src/mido.sh | 5 +- 5 files changed, 801 insertions(+), 62 deletions(-) create mode 100644 assets/win2025-eval.xml create mode 100644 assets/win2025.xml diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml new file mode 100644 index 0000000..1ee2b54 --- /dev/null +++ b/assets/win2025-eval.xml @@ -0,0 +1,341 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>EFI</Type> + <Size>128</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + <Label>Windows</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Key>/IMAGE/NAME</Key> + <Value>Windows Server 2025 SERVERSTANDARD</Value> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>3</PartitionID> + </InstallTo> + <WillShowUI>OnError</WillShowUI> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + <SupportHours>24/7</SupportHours> + <SupportPhone /> + <SupportProvider>Dockur</SupportProvider> + <SupportURL>https://github.com/dockur/windows/issues</SupportURL> + </OEMInformation> + <OEMName>Windows for Docker</OEMName> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> + <Description>Set Network Location to Home</Description> + </RunSynchronousCommand> + </RunSynchronous> + </component> + <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> + </component> + <component name="Microsoft-Windows-OutOfBoxExperience" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenInitialConfigurationTasksAtLogon>true</DoNotOpenInitialConfigurationTasksAtLogon> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PreventDeviceEncryption>true</PreventDeviceEncryption> + </component> + <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideLocalAccountScreen>true</HideLocalAccountScreen> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Home</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Search from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Task View from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Widgets from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Chat from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/assets/win2025.xml b/assets/win2025.xml new file mode 100644 index 0000000..c0801b0 --- /dev/null +++ b/assets/win2025.xml @@ -0,0 +1,344 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>EFI</Type> + <Size>128</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + <Label>Windows</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Key>/IMAGE/NAME</Key> + <Value>Windows Server 2025 SERVERSTANDARD</Value> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>3</PartitionID> + </InstallTo> + <WillShowUI>OnError</WillShowUI> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + <ProductKey> + <Key>TVRH6-WHNXV-R9WG3-9XRFY-MY832</Key> + </ProductKey> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + <SupportHours>24/7</SupportHours> + <SupportPhone /> + <SupportProvider>Dockur</SupportProvider> + <SupportURL>https://github.com/dockur/windows/issues</SupportURL> + </OEMInformation> + <OEMName>Windows for Docker</OEMName> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> + <Description>Set Network Location to Home</Description> + </RunSynchronousCommand> + </RunSynchronous> + </component> + <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> + </component> + <component name="Microsoft-Windows-OutOfBoxExperience" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenInitialConfigurationTasksAtLogon>true</DoNotOpenInitialConfigurationTasksAtLogon> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PreventDeviceEncryption>true</PreventDeviceEncryption> + </component> + <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideLocalAccountScreen>true</HideLocalAccountScreen> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Home</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Search from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Task View from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Widgets from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Chat from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/src/define.sh b/src/define.sh index dad5cee..b0e8563 100644 --- a/src/define.sh +++ b/src/define.sh @@ -70,6 +70,9 @@ parseVersion() { "xp64" | "xpx64" | "winxp64" | "winxpx64" | "windowsxp64" | "windowsxpx64" ) VERSION="winxpx64" ;; + "25" | "2025" | "win25" | "win2025" | "windows2025" | "windows 2025" ) + VERSION="win2025-eval" + ;; "22" | "2022" | "win22" | "win2022" | "windows2022" | "windows 2022" ) VERSION="win2022-eval" ;; @@ -599,6 +602,7 @@ switchEdition() { "win81${PLATFORM,,}-enterprise-eval" ) DETECTED="win81${PLATFORM,,}-enterprise" ;; + "win2025-eval" ) DETECTED="win2025" ;; "win2022-eval" ) DETECTED="win2022" ;; "win2019-eval" ) DETECTED="win2019" ;; "win2016-eval" ) DETECTED="win2016" ;; @@ -656,6 +660,10 @@ getMido() { size=3961473024 sum="2dedd44c45646c74efc5a028f65336027e14a56f76686a4631cf94ffe37c72f2" ;; + "win2025-eval" ) + size=5307996160 + sum="16442d1c0509bcbb25b715b1b322a15fb3ab724a42da0f384b9406ca1c124ed4" + ;; "win2022-eval" ) size=5044094976 sum="3e4fa6d8507b554856fc9ca6079cc402df11a8b79344871669f0251535255325" @@ -702,14 +710,26 @@ getLink1() { [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 case "${id,,}" in - "win11x64" ) + "win11x64" | "win11x64-enterprise" | "win11x64-enterprise-eval" ) size=5946128384 sum="5bb1459034f50766ee480d895d751af73a4af30814240ae32ebc5633546a5af7" url="11/en-us_windows_11_23h2_x64.iso" ;; - "win10x64" ) - size=4957009920 - sum="6673e2ab6c6939a74eceff2c2bb4d36feb94ff8a6f71700adef0f0b998fdcaca" + "win11x64-iot" | "win11x64-enterprise-iot-eval" ) + [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 + size=4821989376 + sum="e8f1431c4e6289b3997c20eadbb2576670300bb6e1cf8948b5d7af179010a962" + url="26100.1.240331-1435.ge_release_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" + ;; + "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) + [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 + size=4821989376 + sum="e8f1431c4e6289b3997c20eadbb2576670300bb6e1cf8948b5d7af179010a962" + url="26100.1.240331-1435.ge_release_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" + ;; + "win10x64" | "win10x64-enterprise" | "win10x64-enterprise-eval" ) + size=5675616256 + sum="99c13b3afb1375661fc79496025cabe3f9ef5a555fc8ea767a48937b0f4bcace" url="10/en-us_windows_10_22h2_x64.iso" ;; "win10x64-iot" | "win10x64-enterprise-iot-eval" ) @@ -727,6 +747,11 @@ getLink1() { sum="d8333cf427eb3318ff6ab755eb1dd9d433f0e2ae43745312c1cd23e83ca1ce51" url="8.x/8.1/en_windows_8.1_with_update_x64_dvd_6051480.iso" ;; + "win2025" | "win2025-eval" ) + size=5307176960 + sum="2293897341febdcea599f5412300b470b5288c6fd2b89666a7b27d283e8d3cf3" + url="server/2025/en-us_windows_server_2025_preview_x64_dvd_ce9eb1a5.iso" + ;; "win2022" | "win2022-eval" ) size=5365624832 sum="c3c57bb2cf723973a7dcfb1a21e97dfa035753a7f111e348ad918bb64b3114db" @@ -1238,6 +1263,31 @@ getLink4() { "zh" | "zh-"* ) url="cn_windows_8.1_enterprise_with_update_x64_dvd_6050374.iso" ;; esac ;; + "win2025" | "win2025-eval" ) + case "${culture,,}" in + "cs" | "cs-"* ) url="cs-cz_windows_server_2025_preview_x64_dvd_8b1f5b49.iso" ;; + "de" | "de-"* ) url="de-de_windows_server_2025_preview_x64_dvd_1c3dfe1c.iso" ;; + "en" | "en-"* ) + size=5307176960 + sum="2293897341febdcea599f5412300b470b5288c6fd2b89666a7b27d283e8d3cf3" + url="en-us_windows_server_2025_preview_x64_dvd_ce9eb1a5.iso" ;; + "es" | "es-"* ) url="es-es_windows_server_2025_preview_x64_dvd_b07cc858.iso" ;; + "fr" | "fr-"* ) url="fr-fr_windows_server_2025_preview_x64_dvd_036e8a78.iso" ;; + "hu" | "hu-"* ) url="hu-hu_windows_server_2025_preview_x64_dvd_2d5d77e5.iso" ;; + "it" | "it-"* ) url="it-it_windows_server_2025_preview_x64_dvd_eaccac73.iso" ;; + "ja" | "ja-"* ) url="ja-jp_windows_server_2025_preview_x64_dvd_62f802be.iso" ;; + "ko" | "ko-"* ) url="ko-kr_windows_server_2025_preview_x64_dvd_e2c3e8f0.iso" ;; + "nl" | "nl-"* ) url="nl-nl_windows_server_2025_preview_x64_dvd_314b4ed1.iso" ;; + "pl" | "pl-"* ) url="pl-pl_windows_server_2025_preview_x64_dvd_be4b099e.iso" ;; + "br" | "pt-br" ) url="pt-br_windows_server_2025_preview_x64_dvd_993c803a.iso" ;; + "pt" | "pt-"* ) url="pt-pt_windows_server_2025_preview_x64_dvd_869aa534.iso" ;; + "ru" | "ru-"* ) url="ru-ru_windows_server_2025_preview_x64_dvd_5ada1817.iso" ;; + "sv" | "sv-"* ) url="sv-se_windows_server_2025_preview_x64_dvd_5fafd4f7.iso" ;; + "tr" | "tr-"* ) url="tr-tr_windows_server_2025_preview_x64_dvd_3aab7fda.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_windows_server_2025_preview_x64_dvd_9b147dcd.iso" ;; + "zh" | "zh-"* ) url="zh-cn_windows_server_2025_preview_x64_dvd_a12bb0bf.iso" ;; + esac + ;; "win2022" | "win2022-eval" ) case "${culture,,}" in "cs" | "cs-"* ) url="cs-cz_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; @@ -1912,6 +1962,63 @@ migrateFiles() { return 0 } +detectLegacy() { + + local dir="$1" + local find find2 desc + + find=$(find "$dir" -maxdepth 1 -type d -iname win95 | head -n 1) + + if [ -n "$find" ]; then + DETECTED="win95" + desc=$(printEdition "$DETECTED" "Windows 95") + info "Detected: $desc" && return 0 + fi + + find=$(find "$dir" -maxdepth 1 -type d -iname win98 | head -n 1) + + if [ -n "$find" ]; then + DETECTED="win98" + desc=$(printEdition "$DETECTED" "Windows 98") + info "Detected: $desc" && return 0 + fi + + find=$(find "$dir" -maxdepth 1 -type d -iname win9x | head -n 1) + + if [ -n "$find" ]; then + DETECTED="win9x" + desc=$(printEdition "$DETECTED" "Windows ME") + info "Detected: $desc" && return 0 + fi + + find=$(find "$dir" -maxdepth 1 -type d -iname win51 | head -n 1) + find2=$(find "$dir" -maxdepth 1 -type f -iname setupxp.htm | head -n 1) + + if [ -n "$find" ] || [ -n "$find2" ] || [ -f "$dir/WIN51AP" ] || [ -f "$dir/WIN51IC" ]; then + [ -d "$dir/AMD64" ] && DETECTED="winxpx64" || DETECTED="winxpx86" + desc=$(printEdition "$DETECTED" "Windows XP") + info "Detected: $desc" && return 0 + fi + + if [ -f "$dir/CDROM_NT.5" ]; then + DETECTED="win2kx86" + desc=$(printEdition "$DETECTED" "Windows 2000") + info "Detected: $desc" && return 0 + fi + + if [ -f "$dir/WIN51AA" ] || [ -f "$dir/WIN51AD" ] || [ -f "$dir/WIN51AS" ] || [ -f "$dir/WIN51MA" ] || [ -f "$dir/WIN51MD" ]; then + desc="Windows Server 2003" + info "Detected: $desc" && error "$desc is not supported yet!" && exit 54 + fi + + if [ -f "$dir/WIN51IA" ] || [ -f "$dir/WIN51IB" ] || [ -f "$dir/WIN51ID" ] || [ -f "$dir/WIN51IL" ] || [ -f "$dir/WIN51IS" ]; then + desc="Windows Server 2003" + info "Detected: $desc" && error "$desc is not supported yet!" && exit 54 + fi + + return 1 +} + prepareLegacy() { local iso="$1" diff --git a/src/install.sh b/src/install.sh index 8fd09c4..991446f 100644 --- a/src/install.sh +++ b/src/install.sh @@ -489,63 +489,6 @@ setXML() { return 0 } -detectLegacy() { - - local dir="$1" - local find find2 desc - - find=$(find "$dir" -maxdepth 1 -type d -iname win95 | head -n 1) - - if [ -n "$find" ]; then - DETECTED="win95" - desc=$(printEdition "$DETECTED" "Windows 95") - info "Detected: $desc" && return 0 - fi - - find=$(find "$dir" -maxdepth 1 -type d -iname win98 | head -n 1) - - if [ -n "$find" ]; then - DETECTED="win98" - desc=$(printEdition "$DETECTED" "Windows 98") - info "Detected: $desc" && return 0 - fi - - find=$(find "$dir" -maxdepth 1 -type d -iname win9x | head -n 1) - - if [ -n "$find" ]; then - DETECTED="win9x" - desc=$(printEdition "$DETECTED" "Windows ME") - info "Detected: $desc" && return 0 - fi - - find=$(find "$dir" -maxdepth 1 -type d -iname win51 | head -n 1) - find2=$(find "$dir" -maxdepth 1 -type f -iname setupxp.htm | head -n 1) - - if [ -n "$find" ] || [ -n "$find2" ] || [ -f "$dir/WIN51AP" ] || [ -f "$dir/WIN51IC" ]; then - [ -d "$dir/AMD64" ] && DETECTED="winxpx64" || DETECTED="winxpx86" - desc=$(printEdition "$DETECTED" "Windows XP") - info "Detected: $desc" && return 0 - fi - - if [ -f "$dir/CDROM_NT.5" ]; then - DETECTED="win2kx86" - desc=$(printEdition "$DETECTED" "Windows 2000") - info "Detected: $desc" && return 0 - fi - - if [ -f "$dir/WIN51AA" ] || [ -f "$dir/WIN51AD" ] || [ -f "$dir/WIN51AS" ] || [ -f "$dir/WIN51MA" ] || [ -f "$dir/WIN51MD" ]; then - desc="Windows Server 2003" - info "Detected: $desc" && error "$desc is not supported yet!" && exit 54 - fi - - if [ -f "$dir/WIN51IA" ] || [ -f "$dir/WIN51IB" ] || [ -f "$dir/WIN51ID" ] || [ -f "$dir/WIN51IL" ] || [ -f "$dir/WIN51IS" ]; then - desc="Windows Server 2003" - info "Detected: $desc" && error "$desc is not supported yet!" && exit 54 - fi - - return 1 -} - skipVersion() { local version="$1" @@ -759,6 +702,7 @@ addDriver() { "win81x64"* ) folder="w10/amd64" ;; "win10x64"* ) folder="w10/amd64" ;; "win11x64"* ) folder="w11/amd64" ;; + "win2025"* ) folder="2k22/amd64" ;; "win2022"* ) folder="2k22/amd64" ;; "win2019"* ) folder="2k19/amd64" ;; "win2016"* ) folder="2k16/amd64" ;; diff --git a/src/mido.sh b/src/mido.sh index ff285cb..06dc92e 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -201,6 +201,9 @@ download_windows_eval() { "win10${PLATFORM,,}-enterprise-ltsc-eval" ) enterprise_type="ltsc" windows_version="windows-10-enterprise" ;; + "win2025-eval" ) + enterprise_type="server" + windows_version="windows-server-2025" ;; "win2022-eval" ) enterprise_type="server" windows_version="windows-server-2022" ;; @@ -329,7 +332,7 @@ getWindows() { "win11${PLATFORM,,}-enterprise"* | "win10${PLATFORM,,}-enterprise"* ) download_windows_eval "$version" "$lang" "$edition" && return 0 ;; - "win2022-eval" | "win2019-eval" | "win2016-eval" | "win2012r2-eval" ) + "win2025-eval" | "win2022-eval" | "win2019-eval" | "win2016-eval" | "win2012r2-eval" ) download_windows_eval "$version" "$lang" "$edition" && return 0 ;; "win81${PLATFORM,,}-enterprise-eval" ) From beaeddac0b5d7c9decbf82251bcd34cb7d0a435d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 28 May 2024 01:00:16 +0200 Subject: [PATCH 005/290] feat: Added support for Windows Server 2003 (#547) --- src/define.sh | 258 +++++++++++++++++++++++++++++++++---------------- src/install.sh | 55 +++++------ 2 files changed, 199 insertions(+), 114 deletions(-) diff --git a/src/define.sh b/src/define.sh index b0e8563..677187b 100644 --- a/src/define.sh +++ b/src/define.sh @@ -72,7 +72,7 @@ parseVersion() { ;; "25" | "2025" | "win25" | "win2025" | "windows2025" | "windows 2025" ) VERSION="win2025-eval" - ;; + ;; "22" | "2022" | "win22" | "win2022" | "windows2022" | "windows 2022" ) VERSION="win2022-eval" ;; @@ -88,6 +88,9 @@ parseVersion() { "2008" | "2008r2" | "win2008" | "win2008r2" | "windows2008" | "windows 2008" ) VERSION="win2008r2" ;; + "2003" | "2003r2" | "win2003" | "win2003r2" | "windows2003" | "windows 2003" ) + VERSION="win2003r2" + ;; "core11" | "core 11" ) VERSION="core11" [ -z "$DETECTED" ] && DETECTED="win11x64" @@ -370,12 +373,13 @@ printVersion() { "win95"* ) desc="Windows 95" ;; "win2k"* ) desc="Windows 2000" ;; "winvista"* ) desc="Windows Vista" ;; - "win2025"* ) desc="Windows Server 2025" ;; - "win2022"* ) desc="Windows Server 2022" ;; - "win2019"* ) desc="Windows Server 2019" ;; - "win2016"* ) desc="Windows Server 2016" ;; - "win2012"* ) desc="Windows Server 2012" ;; + "win2003"* ) desc="Windows Server 2003" ;; "win2008"* ) desc="Windows Server 2008" ;; + "win2012"* ) desc="Windows Server 2012" ;; + "win2016"* ) desc="Windows Server 2016" ;; + "win2019"* ) desc="Windows Server 2019" ;; + "win2022"* ) desc="Windows Server 2022" ;; + "win2025"* ) desc="Windows Server 2025" ;; esac if [ -z "$desc" ]; then @@ -434,7 +438,10 @@ printEdition() { "winvista"* ) edition="Business" ;; - "win2025"* | "win2022"* | "win2019"* | "win2016"* | "win2012"* | "win2008"* ) + "win2025"* | "win2022"* | "win2019"* | "win2016"* ) + edition="Standard" + ;; + "win2012"* | "win2008"* | "win2003"* ) edition="Standard" ;; esac @@ -510,6 +517,9 @@ fromFile() { *"server2008"* | *"server_2008"* ) id="win2008r2" ;; + *"server2003"* | *"server_2003"* ) + id="win2003r2" + ;; esac if [ -n "$id" ]; then @@ -663,7 +673,7 @@ getMido() { "win2025-eval" ) size=5307996160 sum="16442d1c0509bcbb25b715b1b322a15fb3ab724a42da0f384b9406ca1c124ed4" - ;; + ;; "win2022-eval" ) size=5044094976 sum="3e4fa6d8507b554856fc9ca6079cc402df11a8b79344871669f0251535255325" @@ -901,6 +911,11 @@ getLink2() { sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c" url="Windows%20Vista/en_windows_vista_with_sp2_x86_dvd_342266.iso" ;; + "win2003r2" ) + size=652367872 + sum="74245cba888f935b138b106c2744bec7f392925b472358960a0b5643cd6abb32" + url="Windows%20Server%202003%20R2/en_win_srv_2003_r2_standard_x64_with_sp2_cd1_x13-05757.iso" + ;; "winxpx86" ) size=617756672 sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46" @@ -1287,7 +1302,7 @@ getLink4() { "zh-hk" | "zh-tw" ) url="zh-tw_windows_server_2025_preview_x64_dvd_9b147dcd.iso" ;; "zh" | "zh-"* ) url="zh-cn_windows_server_2025_preview_x64_dvd_a12bb0bf.iso" ;; esac - ;; + ;; "win2022" | "win2022-eval" ) case "${culture,,}" in "cs" | "cs-"* ) url="cs-cz_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; @@ -1962,6 +1977,19 @@ migrateFiles() { return 0 } +skipVersion() { + + local version="$1" + + case "${version,,}" in + "win2003"* | "win2k"* | "winxp"* | "win9"* ) + return 0 + ;; + esac + + return 1 +} + detectLegacy() { local dir="$1" @@ -2001,81 +2029,39 @@ detectLegacy() { fi if [ -f "$dir/CDROM_NT.5" ]; then - DETECTED="win2kx86" + DETECTED="win2k" desc=$(printEdition "$DETECTED" "Windows 2000") info "Detected: $desc" && return 0 fi if [ -f "$dir/WIN51AA" ] || [ -f "$dir/WIN51AD" ] || [ -f "$dir/WIN51AS" ] || [ -f "$dir/WIN51MA" ] || [ -f "$dir/WIN51MD" ]; then - desc="Windows Server 2003" - info "Detected: $desc" && error "$desc is not supported yet!" && exit 54 + DETECTED="win2003r2" + desc=$(printEdition "$DETECTED" "Windows Server 2003") + info "Detected: $desc" && return 0 fi if [ -f "$dir/WIN51IA" ] || [ -f "$dir/WIN51IB" ] || [ -f "$dir/WIN51ID" ] || [ -f "$dir/WIN51IL" ] || [ -f "$dir/WIN51IS" ]; then - desc="Windows Server 2003" - info "Detected: $desc" && error "$desc is not supported yet!" && exit 54 + DETECTED="win2003r2" + desc=$(printEdition "$DETECTED" "Windows Server 2003") + info "Detected: $desc" && return 0 fi return 1 } -prepareLegacy() { - - local iso="$1" - local dir="$2" - local file="$dir/boot.img" - - ETFS=$(basename "$file") - [ -f "$file" ] && [ -s "$file" ] && return 0 - rm -f "$file" - - local len offset - len=$(isoinfo -d -i "$iso" | grep "Nsect " | grep -o "[^ ]*$") - offset=$(isoinfo -d -i "$iso" | grep "Bootoff " | grep -o "[^ ]*$") - - dd "if=$iso" "of=$file" bs=2048 "count=$len" "skip=$offset" status=none && return 0 - - return 1 -} - -prepare9x() { - - local iso="$1" - local dir="$2" - local file="$dir/boot.img" - - ETFS=$(basename "$file") - [ -f "$file" ] && [ -s "$file" ] && return 0 - rm -f "$file" - - local src="[BOOT]/Boot-1.44M.img" - [ ! -f "$dir/$src" ] && error "Boot floppy not found!" && return 1 - - cp "$dir/$src" "$file" && return 0 - - return 1 -} - -prepare2k() { +prepareInstall() { local dir="$2" - ETFS="[BOOT]/Boot-NoEmul.img" - - return 0 -} - -prepareXP() { - - local dir="$2" - local arch="x86" - local target="$dir/I386" + local desc="$3" + local arch="$4" + local key="$5" + local driver="$6" local drivers="$TMP/drivers" ETFS="[BOOT]/Boot-NoEmul.img" - if [ -d "$dir/AMD64" ]; then - arch="amd64" - target="$dir/AMD64" + if [ ! -f "$dir/$ETFS" ] || [ ! -s "$dir/$ETFS" ]; then + error "Failed to locate file \"$ETFS\" in $desc ISO image!" && return 1 fi local msg="Adding drivers to image..." @@ -2084,20 +2070,23 @@ prepareXP() { mkdir -p "$drivers" if ! tar -xf /drivers.txz -C "$drivers" --warning=no-timestamp; then - error "Failed to extract driver!" && return 1 + error "Failed to extract drivers!" && return 1 fi - cp "$drivers/viostor/xp/$arch/viostor.sys" "$target" + local target + [[ "${arch,,}" == "x86" ]] && target="$dir/I386" || target="$dir/AMD64" + + cp "$drivers/viostor/$driver/$arch/viostor.sys" "$target" mkdir -p "$dir/\$OEM\$/\$1/Drivers/viostor" - cp "$drivers/viostor/xp/$arch/viostor.cat" "$dir/\$OEM\$/\$1/Drivers/viostor" - cp "$drivers/viostor/xp/$arch/viostor.inf" "$dir/\$OEM\$/\$1/Drivers/viostor" - cp "$drivers/viostor/xp/$arch/viostor.sys" "$dir/\$OEM\$/\$1/Drivers/viostor" + cp "$drivers/viostor/$driver/$arch/viostor.cat" "$dir/\$OEM\$/\$1/Drivers/viostor" + cp "$drivers/viostor/$driver/$arch/viostor.inf" "$dir/\$OEM\$/\$1/Drivers/viostor" + cp "$drivers/viostor/$driver/$arch/viostor.sys" "$dir/\$OEM\$/\$1/Drivers/viostor" mkdir -p "$dir/\$OEM\$/\$1/Drivers/NetKVM" - cp "$drivers/NetKVM/xp/$arch/netkvm.cat" "$dir/\$OEM\$/\$1/Drivers/NetKVM" - cp "$drivers/NetKVM/xp/$arch/netkvm.inf" "$dir/\$OEM\$/\$1/Drivers/NetKVM" - cp "$drivers/NetKVM/xp/$arch/netkvm.sys" "$dir/\$OEM\$/\$1/Drivers/NetKVM" + cp "$drivers/NetKVM/$driver/$arch/netkvm.cat" "$dir/\$OEM\$/\$1/Drivers/NetKVM" + cp "$drivers/NetKVM/$driver/$arch/netkvm.inf" "$dir/\$OEM\$/\$1/Drivers/NetKVM" + cp "$drivers/NetKVM/$driver/$arch/netkvm.sys" "$dir/\$OEM\$/\$1/Drivers/NetKVM" if [ ! -f "$target/TXTSETUP.SIF" ]; then error "The file TXTSETUP.SIF could not be found!" && return 1 @@ -2129,24 +2118,14 @@ prepareXP() { rm -rf "$drivers" - local key pid file setup + local pid file setup setup=$(find "$target" -maxdepth 1 -type f -iname setupp.ini | head -n 1) pid=$(<"$setup") pid="${pid:(-4)}" pid="${pid:0:3}" if [[ "$pid" == "270" ]]; then - warn "this version of Windows XP requires a volume license key (VLK), it will ask for one during installation." - fi - - if [[ "${arch,,}" == "x86" ]]; then - # Windows XP Professional x86 generic key (no activation, trial-only) - # This is not a pirated key, it comes from the official MS documentation. - key="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y" - else - # Windows XP Professional x64 generic key (no activation, trial-only) - # This is not a pirated key, it comes from the official MS documentation. - key="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G" + warn "this version of $desc requires a volume license key (VLK), it will ask for one during installation." fi local oem="" @@ -2211,6 +2190,10 @@ prepareXP() { echo " OrgName=\"Windows for Docker\"" echo " ProductKey=$key" echo "" + echo "[LicenseFilePrintData]" + echo " AutoMode=PerServer" + echo " AutoUsers=5" + echo "" echo "[Identification]" echo " JoinWorkgroup = WORKGROUP" echo "" @@ -2246,12 +2229,18 @@ prepareXP() { echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]" echo "\"LimitBlankPasswordUse\"=dword:00000000" echo "" + echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\srvWiz]" + echo "@=dword:00000000" + echo "" echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Tour]" echo "\"RunCount\"=dword:00000000" echo "" echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]" echo "\"HideFileExt\"=dword:00000000" echo "" + echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ServerOOBE\SecurityOOBE]" + echo "\"DontLaunchSecurityOOBE\"=dword:00000000" + echo "" echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]" echo "\"DefaultUserName\"=\"$username\"" echo "\"DefaultDomainName\"=\"Dockur\"" @@ -2299,4 +2288,103 @@ prepareXP() { return 0 } +prepare2k3() { + + local iso="$1" + local dir="$2" + local desc="$3" + local driver="2k3" + local arch key + + [ -d "$dir/AMD64" ] && arch="amd64" || arch="x86" + + if [[ "${arch,,}" == "x86" ]]; then + # Windows Server 2003 Standard x86 generic key (no activation, trial-only) + # This is not a pirated key, it comes from the official MS documentation. + key="QKDCQ-TP2JM-G4MDG-VR6F2-P9C48" + else + # Windows Server 2003 Standard x64 generic key (no activation, trial-only) + # This is not a pirated key, it comes from the official MS documentation. + key="P4WJG-WK3W7-3HM8W-RWHCK-8JTRY" + fi + + ! prepareInstall "$iso" "$dir" "$desc" "$arch" "$key" "$driver" && return 1 + + return 0 +} + +prepareXP() { + + local iso="$1" + local dir="$2" + local desc="$3" + local driver="xp" + local arch key + + [ -d "$dir/AMD64" ] && arch="amd64" || arch="x86" + + if [[ "${arch,,}" == "x86" ]]; then + # Windows XP Professional x86 generic key (no activation, trial-only) + # This is not a pirated key, it comes from the official MS documentation. + key="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y" + else + # Windows XP Professional x64 generic key (no activation, trial-only) + # This is not a pirated key, it comes from the official MS documentation. + key="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G" + fi + + ! prepareInstall "$iso" "$dir" "$desc" "$arch" "$key" "$driver" && return 1 + + return 0 +} + +prepareLegacy() { + + local iso="$1" + local dir="$2" + local desc="$3" + + ETFS="boot.img" + + [ -f "$dir/$ETFS" ] && [ -s "$dir/$ETFS" ] && return 0 + rm -f "$dir/$ETFS" + + local len offset + len=$(isoinfo -d -i "$iso" | grep "Nsect " | grep -o "[^ ]*$") + offset=$(isoinfo -d -i "$iso" | grep "Bootoff " | grep -o "[^ ]*$") + + if ! dd "if=$iso" "of=$dir/$ETFS" bs=2048 "count=$len" "skip=$offset" status=none; then + error "Failed to extract boot image from $desc ISO!" && return 1 + fi + + [ -f "$dir/$ETFS" ] && [ -s "$dir/$ETFS" ] && return 0 + + error "Failed to locate file \"$ETFS\" in $desc ISO image!" + return 1 +} + +prepare9x() { + + local dir="$2" + local desc="$3" + + ETFS="[BOOT]/Boot-1.44M.img" + [ -f "$dir/$ETFS" ] && [ -s "$dir/$ETFS" ] && return 0 + + error "Failed to locate file \"$ETFS\" in $desc ISO image!" + return 1 +} + +prepare2k() { + + local dir="$2" + local desc="$3" + + ETFS="[BOOT]/Boot-NoEmul.img" + [ -f "$dir/$ETFS" ] && [ -s "$dir/$ETFS" ] && return 0 + + error "Failed to locate file \"$ETFS\" in $desc ISO image!" + return 1 +} + return 0 diff --git a/src/install.sh b/src/install.sh index 991446f..e4af65f 100644 --- a/src/install.sh +++ b/src/install.sh @@ -489,19 +489,6 @@ setXML() { return 0 } -skipVersion() { - - local version="$1" - - case "${version,,}" in - "win2k"* | "winxp"* | "win9"* ) - return 0 - ;; - esac - - return 1 -} - detectImage() { local dir="$1" @@ -588,17 +575,19 @@ prepareImage() { local iso="$1" local dir="$2" - local missing + local desc missing + + desc=$(printVersion "$DETECTED" "$DETECTED") case "${DETECTED,,}" in "win9"* | "win2k"* ) MACHINE="pc-i440fx-2.4" ;; - "winxp"* | "winvistax86"* | "win7x86"* ) + "winvistax86"* | "win7x86"* | "winxp"* | "win2003"* ) MACHINE="pc-q35-2.10" ;; esac case "${DETECTED,,}" in - "win9"* | "winxp"* | "win2k"* ) + "win9"* | "win2k"* | "winxp"* | "win2003"* ) HV="N" BOOT_MODE="windows_legacy" ;; "winvista"* | "win7"* | "win2008"* ) @@ -606,18 +595,22 @@ prepareImage() { esac case "${DETECTED,,}" in - "winxp"* ) - DISK_TYPE="blk" - prepareXP "$iso" "$dir" && return 0 - error "Failed to prepare Windows XP ISO!" && return 1 ;; "win9"* ) DISK_TYPE="auto" - prepare9x "$iso" "$dir" && return 0 - error "Failed to prepare Windows 9x ISO!" && return 1 ;; + prepare9x "$iso" "$dir" "$desc" && return 0 + error "Failed to prepare $desc ISO!" && return 1 ;; "win2k"* ) DISK_TYPE="auto" - prepare2k "$iso" "$dir" && return 0 - error "Failed to prepare Windows 2000 ISO!" && return 1 ;; + prepare2k "$iso" "$dir" "$desc" && return 0 + error "Failed to prepare $desc ISO!" && return 1 ;; + "winxp"* ) + DISK_TYPE="blk" + prepareXP "$iso" "$dir" "$desc" && return 0 + error "Failed to prepare $desc ISO!" && return 1 ;; + "win2003"* ) + DISK_TYPE="blk" + prepare2k3 "$iso" "$dir" "$desc" && return 0 + error "Failed to prepare $desc ISO!" && return 1 ;; esac if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then @@ -627,13 +620,13 @@ prepareImage() { missing=$(basename "$dir/$EFISYS") [ ! -f "$dir/$ETFS" ] && missing=$(basename "$dir/$ETFS") - error "failed to locate file '${missing,,}' in ISO image!" + error "Failed to locate file \"${missing,,}\" in $desc ISO image!" return 1 fi - prepareLegacy "$iso" "$dir" && return 0 + prepareLegacy "$iso" "$dir" "$desc" && return 0 - error "Failed to extract boot image from ISO!" + error "Failed to extract boot image from $desc ISO image!" return 1 } @@ -702,7 +695,7 @@ addDriver() { "win81x64"* ) folder="w10/amd64" ;; "win10x64"* ) folder="w10/amd64" ;; "win11x64"* ) folder="w11/amd64" ;; - "win2025"* ) folder="2k22/amd64" ;; + "win2025"* ) folder="2k22/amd64" ;; "win2022"* ) folder="2k22/amd64" ;; "win2019"* ) folder="2k19/amd64" ;; "win2016"* ) folder="2k16/amd64" ;; @@ -934,6 +927,10 @@ buildImage() { error "File $BOOT does already exist?!" && return 1 fi + if [ ! -f "$dir/$ETFS" ]; then + error "Failed to locate file \"$ETFS\" in ISO image!" && return 1 + fi + base=$(basename "$BOOT") local out="$TMP/${base%.*}.tmp" rm -f "$out" @@ -962,7 +959,7 @@ buildImage() { else case "${DETECTED,,}" in - "win2k"* | "winxp"* ) + "win2k"* | "winxp"* | "win2003"* ) ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -boot-load-seg 1984 -boot-load-size 4 -c "$cat" -iso-level 2 -J -l -D -N -joliet-long \ -relaxed-filenames -V "${LABEL::30}" -quiet "$dir" 2> "$log" && failed="y" ;; "win9"* ) From 4ed34379836efa1a1db391639a2bf6f4b955607c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 28 May 2024 16:39:57 +0200 Subject: [PATCH 006/290] fix: Refactor code for legacy machines (#548) --- src/define.sh | 164 ++++++++++++++++++++++++------------------------- src/install.sh | 58 +++++------------ 2 files changed, 96 insertions(+), 126 deletions(-) diff --git a/src/define.sh b/src/define.sh index 677187b..c9e776a 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1977,78 +1977,6 @@ migrateFiles() { return 0 } -skipVersion() { - - local version="$1" - - case "${version,,}" in - "win2003"* | "win2k"* | "winxp"* | "win9"* ) - return 0 - ;; - esac - - return 1 -} - -detectLegacy() { - - local dir="$1" - local find find2 desc - - find=$(find "$dir" -maxdepth 1 -type d -iname win95 | head -n 1) - - if [ -n "$find" ]; then - DETECTED="win95" - desc=$(printEdition "$DETECTED" "Windows 95") - info "Detected: $desc" && return 0 - fi - - find=$(find "$dir" -maxdepth 1 -type d -iname win98 | head -n 1) - - if [ -n "$find" ]; then - DETECTED="win98" - desc=$(printEdition "$DETECTED" "Windows 98") - info "Detected: $desc" && return 0 - fi - - find=$(find "$dir" -maxdepth 1 -type d -iname win9x | head -n 1) - - if [ -n "$find" ]; then - DETECTED="win9x" - desc=$(printEdition "$DETECTED" "Windows ME") - info "Detected: $desc" && return 0 - fi - - find=$(find "$dir" -maxdepth 1 -type d -iname win51 | head -n 1) - find2=$(find "$dir" -maxdepth 1 -type f -iname setupxp.htm | head -n 1) - - if [ -n "$find" ] || [ -n "$find2" ] || [ -f "$dir/WIN51AP" ] || [ -f "$dir/WIN51IC" ]; then - [ -d "$dir/AMD64" ] && DETECTED="winxpx64" || DETECTED="winxpx86" - desc=$(printEdition "$DETECTED" "Windows XP") - info "Detected: $desc" && return 0 - fi - - if [ -f "$dir/CDROM_NT.5" ]; then - DETECTED="win2k" - desc=$(printEdition "$DETECTED" "Windows 2000") - info "Detected: $desc" && return 0 - fi - - if [ -f "$dir/WIN51AA" ] || [ -f "$dir/WIN51AD" ] || [ -f "$dir/WIN51AS" ] || [ -f "$dir/WIN51MA" ] || [ -f "$dir/WIN51MD" ]; then - DETECTED="win2003r2" - desc=$(printEdition "$DETECTED" "Windows Server 2003") - info "Detected: $desc" && return 0 - fi - - if [ -f "$dir/WIN51IA" ] || [ -f "$dir/WIN51IB" ] || [ -f "$dir/WIN51ID" ] || [ -f "$dir/WIN51IL" ] || [ -f "$dir/WIN51IS" ]; then - DETECTED="win2003r2" - desc=$(printEdition "$DETECTED" "Windows Server 2003") - info "Detected: $desc" && return 0 - fi - - return 1 -} - prepareInstall() { local dir="$2" @@ -2363,28 +2291,96 @@ prepareLegacy() { return 1 } -prepare9x() { +detectLegacy() { - local dir="$2" - local desc="$3" + local dir="$1" + local find find2 - ETFS="[BOOT]/Boot-1.44M.img" - [ -f "$dir/$ETFS" ] && [ -s "$dir/$ETFS" ] && return 0 + find=$(find "$dir" -maxdepth 1 -type d -iname win95 | head -n 1) + [ -n "$find" ] && DETECTED="win95" && return 0 + + find=$(find "$dir" -maxdepth 1 -type d -iname win98 | head -n 1) + [ -n "$find" ] && DETECTED="win98" && return 0 + + find=$(find "$dir" -maxdepth 1 -type d -iname win9x | head -n 1) + [ -n "$find" ] && DETECTED="win9x" && return 0 + + find=$(find "$dir" -maxdepth 1 -type f -iname cdrom_nt.5 | head -n 1) + [ -n "$find" ] && DETECTED="win2k" && return 0 + + find=$(find "$dir" -maxdepth 1 -type d -iname win51 | head -n 1) + find2=$(find "$dir" -maxdepth 1 -type f -iname setupxp.htm | head -n 1) + + if [ -n "$find" ] || [ -n "$find2" ] || [ -f "$dir/WIN51AP" ] || [ -f "$dir/WIN51IC" ]; then + [ -d "$dir/AMD64" ] && DETECTED="winxpx64" && return 0 + DETECTED="winxpx86" && return 0 + fi + + if [ -f "$dir/WIN51IA" ] || [ -f "$dir/WIN51IB" ] || [ -f "$dir/WIN51ID" ] || [ -f "$dir/WIN51IL" ] || [ -f "$dir/WIN51IS" ]; then + DETECTED="win2003r2" && return 0 + fi + + if [ -f "$dir/WIN51AA" ] || [ -f "$dir/WIN51AD" ] || [ -f "$dir/WIN51AS" ] || [ -f "$dir/WIN51MA" ] || [ -f "$dir/WIN51MD" ]; then + DETECTED="win2003r2" && return 0 + fi - error "Failed to locate file \"$ETFS\" in $desc ISO image!" return 1 } -prepare2k() { +skipVersion() { - local dir="$2" - local desc="$3" + local id="$1" - ETFS="[BOOT]/Boot-NoEmul.img" - [ -f "$dir/$ETFS" ] && [ -s "$dir/$ETFS" ] && return 0 + case "${id,,}" in + "win9"* | "winxp"* | "win2k"* | "win2003"* ) + return 0 ;; + esac - error "Failed to locate file \"$ETFS\" in $desc ISO image!" return 1 } +setMachine() { + + local id="$1" + local iso="$2" + local dir="$3" + local desc="$4" + + case "${id,,}" in + "win9"* | "win2k"* ) + MACHINE="pc-i440fx-2.4" ;; + "winxp"* | "win2003"* | "winvistax86"* | "win7x86"* ) + MACHINE="pc-q35-2.10" ;; + esac + + case "${id,,}" in + "win9"* | "win2k"* | "winxp"* | "win2003"* ) + HV="N" + BOOT_MODE="windows_legacy" ;; + "winvista"* | "win7"* | "win2008"* ) + BOOT_MODE="windows_legacy" ;; + esac + + case "${id,,}" in + "win9"* ) + DISK_TYPE="auto" + ETFS="[BOOT]/Boot-1.44M.img" ;; + "win2k"* ) + DISK_TYPE="auto" + ETFS="[BOOT]/Boot-NoEmul.img" ;; + "winxp"* ) + DISK_TYPE="blk" + if ! prepareXP "$iso" "$dir" "$desc"; then + error "Failed to prepare $desc ISO!" && return 1 + fi ;; + "win2003"* ) + DISK_TYPE="blk" + if ! prepare2k3 "$iso" "$dir" "$desc"; then + error "Failed to prepare $desc ISO!" && return 1 + fi ;; + esac + + return 0 +} + return 0 diff --git a/src/install.sh b/src/install.sh index e4af65f..e4abb25 100644 --- a/src/install.sh +++ b/src/install.sh @@ -515,7 +515,12 @@ detectImage() { fi info "Detecting version from ISO image..." - detectLegacy "$dir" && return 0 + + if detectLegacy "$dir"; then + desc=$(printEdition "$DETECTED" "$DETECTED") + info "Detected: $desc" + return 0 + fi local src wim info src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1) @@ -579,39 +584,8 @@ prepareImage() { desc=$(printVersion "$DETECTED" "$DETECTED") - case "${DETECTED,,}" in - "win9"* | "win2k"* ) - MACHINE="pc-i440fx-2.4" ;; - "winvistax86"* | "win7x86"* | "winxp"* | "win2003"* ) - MACHINE="pc-q35-2.10" ;; - esac - - case "${DETECTED,,}" in - "win9"* | "win2k"* | "winxp"* | "win2003"* ) - HV="N" - BOOT_MODE="windows_legacy" ;; - "winvista"* | "win7"* | "win2008"* ) - BOOT_MODE="windows_legacy" ;; - esac - - case "${DETECTED,,}" in - "win9"* ) - DISK_TYPE="auto" - prepare9x "$iso" "$dir" "$desc" && return 0 - error "Failed to prepare $desc ISO!" && return 1 ;; - "win2k"* ) - DISK_TYPE="auto" - prepare2k "$iso" "$dir" "$desc" && return 0 - error "Failed to prepare $desc ISO!" && return 1 ;; - "winxp"* ) - DISK_TYPE="blk" - prepareXP "$iso" "$dir" "$desc" && return 0 - error "Failed to prepare $desc ISO!" && return 1 ;; - "win2003"* ) - DISK_TYPE="blk" - prepare2k3 "$iso" "$dir" "$desc" && return 0 - error "Failed to prepare $desc ISO!" && return 1 ;; - esac + ! setMachine "$DETECTED" "$iso" "$dir" "$desc" && return 1 + skipVersion "$DETECTED" && return 0 if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then @@ -620,13 +594,13 @@ prepareImage() { missing=$(basename "$dir/$EFISYS") [ ! -f "$dir/$ETFS" ] && missing=$(basename "$dir/$ETFS") - error "Failed to locate file \"${missing,,}\" in $desc ISO image!" + error "Failed to locate file \"${missing,,}\" in ISO image!" return 1 fi prepareLegacy "$iso" "$dir" "$desc" && return 0 - error "Failed to extract boot image from $desc ISO image!" + error "Failed to extract boot image from ISO image!" return 1 } @@ -927,10 +901,6 @@ buildImage() { error "File $BOOT does already exist?!" && return 1 fi - if [ ! -f "$dir/$ETFS" ]; then - error "Failed to locate file \"$ETFS\" in ISO image!" && return 1 - fi - base=$(basename "$BOOT") local out="$TMP/${base%.*}.tmp" rm -f "$out" @@ -940,6 +910,12 @@ buildImage() { local msg="Building $desc image..." info "$msg" && html "$msg" + [ -z "$LABEL" ] && LABEL="Windows" + + if [ ! -f "$dir/$ETFS" ]; then + error "Failed to locate file \"$ETFS\" in ISO image!" && return 1 + fi + size=$(du -h -b --max-depth=0 "$dir" | cut -f1) size_gb=$(( (size + 1073741823)/1073741824 )) space=$(df --output=avail -B 1 "$TMP" | tail -n 1) @@ -949,8 +925,6 @@ buildImage() { error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." && return 1 fi - [ -z "$LABEL" ] && LABEL="Windows" - if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -V "${LABEL::30}" \ From fa3b17e87164f159daa5a75fb6ee667cc88ce947 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 28 May 2024 18:20:27 +0200 Subject: [PATCH 007/290] fix: Use NetBIOS on i440fx machines --- src/samba.sh | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index dc49bb0..b6f4654 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -72,19 +72,20 @@ mkdir -p "$share" ! smbd && smbd --debug-stdout -legacy="N" +legacy="" if [ -f "$STORAGE/windows.old" ]; then MT=$(<"$STORAGE/windows.old") - [[ "${MT,,}" == "pc-q35-2"* ]] && legacy="Y" + [[ "${MT,,}" == "pc-q35-2"* ]] && legacy="y" + [[ "${MT,,}" == "pc-i440fx-2"* ]] && legacy="y" fi -if [[ "$legacy" == [Yy1]* ]]; then +if [ -n "$legacy" ]; then [[ "$DHCP" == [Yy1]* ]] && return 0 - # Enable NetBIOS on Windows XP + # Enable NetBIOS on Windows XP and lower ! nmbd && nmbd --debug-stdout else - # Enable Web Service Discovery + # Enable Web Service Discovery on Vista and up wsdd -i "$interface" -p -n "$hostname" & echo "$!" > /var/run/wsdd.pid fi From 651bbe74ebedefc006bf23d37f49c5d83313403a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 29 May 2024 21:54:08 +0200 Subject: [PATCH 008/290] fix: Display driver for Windows 8 / Server 2012 --- src/install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/install.sh b/src/install.sh index e4abb25..bd56f6f 100644 --- a/src/install.sh +++ b/src/install.sh @@ -666,14 +666,14 @@ addDriver() { case "${id,,}" in "win7x86"* ) folder="w7/x86" ;; "win7x64"* ) folder="w7/amd64" ;; - "win81x64"* ) folder="w10/amd64" ;; + "win81x64"* ) folder="w8.1/amd64" ;; "win10x64"* ) folder="w10/amd64" ;; "win11x64"* ) folder="w11/amd64" ;; "win2025"* ) folder="2k22/amd64" ;; "win2022"* ) folder="2k22/amd64" ;; "win2019"* ) folder="2k19/amd64" ;; "win2016"* ) folder="2k16/amd64" ;; - "win2012"* ) folder="2k16/amd64" ;; + "win2012"* ) folder="2k12R2/amd64" ;; "win2008"* ) folder="2k8R2/amd64" ;; "win10arm64"* ) folder="w10/ARM64" ;; "win11arm64"* ) folder="w11/ARM64" ;; From 09c07d0634f70d458993602357a3bb9df806cd2a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 May 2024 22:58:22 +0200 Subject: [PATCH 009/290] chore(deps): update qemux/qemu-docker docker tag to v5.09 (#555) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 7d6cbd3..f1e6649 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:5.08 / / +COPY --from=qemux/qemu-docker:5.09 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" From 900b520f233b65cea30d508c550db45b02167ce7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20Mu=C3=B1iz?= <2011450+luisgmuniz@users.noreply.github.com> Date: Fri, 31 May 2024 07:24:46 +0200 Subject: [PATCH 010/290] feat: Only create readme.txt when folder is empty (#552) --- src/samba.sh | 47 ++++++++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index b6f4654..134e395 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -21,7 +21,32 @@ if [ ! -d "$share" ] && [ -d "$STORAGE/shared" ]; then fi mkdir -p "$share" -[ -z "$(ls -A "$share")" ] && chmod 777 "$share" + +if [ -z "$(ls -A "$share")" ]; then + + chmod 777 "$share" + + { echo "--------------------------------------------------------" + echo " $APP for Docker v$(</run/version)..." + echo " For support visit $SUPPORT" + echo "--------------------------------------------------------" + echo "" + echo "Using this folder you can share files with the host machine." + echo "" + echo "To change its location, include the following bind mount in your compose file:" + echo "" + echo " volumes:" + echo " - \"/home/user/example:/shared\"" + echo "" + echo "Or in your run command:" + echo "" + echo " -v \"/home/user/example:/shared\"" + echo "" + echo "Replace the example path /home/user/example with the desired shared folder." + echo "" + } | unix2dos > "$share/readme.txt" + +fi { echo "[global]" echo " server string = Dockur" @@ -50,26 +75,6 @@ mkdir -p "$share" echo " force group = root" } > "/etc/samba/smb.conf" -{ echo "--------------------------------------------------------" - echo " $APP for Docker v$(</run/version)..." - echo " For support visit $SUPPORT" - echo "--------------------------------------------------------" - echo "" - echo "Using this folder you can share files with the host machine." - echo "" - echo "To change its location, include the following bind mount in your compose file:" - echo "" - echo " volumes:" - echo " - \"/home/user/example:/shared\"" - echo "" - echo "Or in your run command:" - echo "" - echo " -v \"/home/user/example:/shared\"" - echo "" - echo "Replace the example path /home/user/example with the desired shared folder." - echo "" -} | unix2dos > "$share/readme.txt" - ! smbd && smbd --debug-stdout legacy="" From 71b2c5c110bd101640b70321f67afc13a3d8914b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 3 Jun 2024 02:00:40 +0200 Subject: [PATCH 011/290] chore(deps): update qemux/qemu-docker docker tag to v5.10 (#558) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index f1e6649..d98b08c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:5.09 / / +COPY --from=qemux/qemu-docker:5.10 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" From d0848b36cf1f864c0f1e65145307cffa85c0e13f Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 4 Jun 2024 15:55:28 +0200 Subject: [PATCH 012/290] fix: Error logging for Samba daemon (#562) --- src/samba.sh | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index 134e395..10dd37c 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -75,7 +75,10 @@ fi echo " force group = root" } > "/etc/samba/smb.conf" -! smbd && smbd --debug-stdout +if ! smbd; then + error "Samba daemon failed to start!" + smbd -i --debug-stdout || true +fi legacy="" @@ -86,9 +89,11 @@ if [ -f "$STORAGE/windows.old" ]; then fi if [ -n "$legacy" ]; then - [[ "$DHCP" == [Yy1]* ]] && return 0 # Enable NetBIOS on Windows XP and lower - ! nmbd && nmbd --debug-stdout + if ! nmbd; then + error "NetBIOS daemon failed to start!" + nmbd -i --debug-stdout || true + fi else # Enable Web Service Discovery on Vista and up wsdd -i "$interface" -p -n "$hostname" & From b67f58bf6a37c2789b28b07ea07bfe0d9e974375 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 4 Jun 2024 22:55:01 +0200 Subject: [PATCH 013/290] docs: Add warning about USB drives (#564) --- readme.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/readme.md b/readme.md index 44d461a..a19c4d2 100644 --- a/readme.md +++ b/readme.md @@ -333,6 +333,8 @@ kubectl apply -f kubernetes.yml - /dev/bus/usb ``` + Please note that in case of USB disk drives it is needed to wait until after the installation is completed, before adding them. Otherwise Windows will try to install itself to wrong disk, as the order of the disks will be rearranged. + * ### Is this project legal? Yes, this project contains only open-source code and does not distribute any copyrighted material. Any product keys found in the code are just generic placeholders provided by Microsoft for trial purposes. So under all applicable laws, this project would be considered legal. From 6b0ef457bd5cd14ad0082ddd3b14387a3bf97c8a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 4 Jun 2024 23:06:23 +0200 Subject: [PATCH 014/290] docs: Warn about USB disk drives (#565) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index a19c4d2..f31ea0f 100644 --- a/readme.md +++ b/readme.md @@ -333,7 +333,7 @@ kubectl apply -f kubernetes.yml - /dev/bus/usb ``` - Please note that in case of USB disk drives it is needed to wait until after the installation is completed, before adding them. Otherwise Windows will try to install itself to wrong disk, as the order of the disks will be rearranged. + Please note that in case of USB disk drives, it is needed to wait until after the installation is completed before adding them. Otherwise Windows tries to install itself to wrong disk, as the order of the disks will get rearranged. * ### Is this project legal? From 2e638b679a2e3690eb158842a942e1d3c678437f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 5 Jun 2024 18:19:33 +0200 Subject: [PATCH 015/290] chore(deps): update qemux/qemu-docker docker tag to v5.11 (#566) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index d98b08c..d45a0ca 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:5.10 / / +COPY --from=qemux/qemu-docker:5.11 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" From 074dcde8f7f29c2f796c73fef33d832ac74b7fb8 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 8 Jun 2024 18:27:00 +0200 Subject: [PATCH 016/290] docs: USB disk drives (#570) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index f31ea0f..53339aa 100644 --- a/readme.md +++ b/readme.md @@ -333,7 +333,7 @@ kubectl apply -f kubernetes.yml - /dev/bus/usb ``` - Please note that in case of USB disk drives, it is needed to wait until after the installation is completed before adding them. Otherwise Windows tries to install itself to wrong disk, as the order of the disks will get rearranged. + In case the device is a USB disk drive, please wait until after the installation is completed before connecting it. Otherwise the installation may fail, as the order of the disks can get rearranged. * ### Is this project legal? From 95ae5a853fed1bbf29819286ca9f6999bc062ac2 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 8 Jun 2024 18:37:31 +0200 Subject: [PATCH 017/290] docs: Mention macOS container (#571) --- readme.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/readme.md b/readme.md index 53339aa..a292281 100644 --- a/readme.md +++ b/readme.md @@ -335,6 +335,10 @@ kubectl apply -f kubernetes.yml In case the device is a USB disk drive, please wait until after the installation is completed before connecting it. Otherwise the installation may fail, as the order of the disks can get rearranged. +* ### How do I run macOS in a container? + + You can use [dockur/macos](https://github.com/dockur/macos) for that. It shares many of the same features, except for the automatic installation. + * ### Is this project legal? Yes, this project contains only open-source code and does not distribute any copyrighted material. Any product keys found in the code are just generic placeholders provided by Microsoft for trial purposes. So under all applicable laws, this project would be considered legal. From c4546bf687c1110c0f2d192009436acc7ea3be21 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 9 Jun 2024 12:17:46 +0200 Subject: [PATCH 018/290] docs: Reordered readme (#573) --- readme.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/readme.md b/readme.md index a292281..bc2608b 100644 --- a/readme.md +++ b/readme.md @@ -201,17 +201,6 @@ kubectl apply -f kubernetes.yml MANUAL: "Y" ``` -* ### How do I verify if my system supports KVM? - - To verify if your system supports KVM, run the following commands: - - ```bash - sudo apt install cpu-checker - sudo kvm-ok - ``` - - If you receive an error from `kvm-ok` indicating that KVM acceleration can't be used, check the virtualization settings in the BIOS. - * ### How do I change the amount of CPU or RAM? By default, the container will be allowed to use a maximum of 2 CPU cores and 4 GB of RAM. @@ -335,6 +324,17 @@ kubectl apply -f kubernetes.yml In case the device is a USB disk drive, please wait until after the installation is completed before connecting it. Otherwise the installation may fail, as the order of the disks can get rearranged. +* ### How do I verify if my system supports KVM? + + To verify if your system supports KVM, run the following commands: + + ```bash + sudo apt install cpu-checker + sudo kvm-ok + ``` + + If you receive an error from `kvm-ok` indicating that KVM acceleration can't be used, check the virtualization settings in the BIOS. + * ### How do I run macOS in a container? You can use [dockur/macos](https://github.com/dockur/macos) for that. It shares many of the same features, except for the automatic installation. From bc03034bb05e9cf0587c6b22838bd5b92c94663b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 9 Jun 2024 17:53:09 +0200 Subject: [PATCH 019/290] chore(deps): update qemux/qemu-docker docker tag to v5.12 (#574) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index d45a0ca..ff94b1f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:5.11 / / +COPY --from=qemux/qemu-docker:5.12 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" From 0bb55b7bc15bd0489f7eb1acdf1e8ba813075d47 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 9 Jun 2024 22:55:49 +0200 Subject: [PATCH 020/290] docs: KVM troubleshooting (#576) --- readme.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/readme.md b/readme.md index bc2608b..360f59d 100644 --- a/readme.md +++ b/readme.md @@ -120,14 +120,16 @@ kubectl apply -f kubernetes.yml You can choose between `Arabic`, `Bulgarian`, `Chinese`, `Croatian`, `Czech`, `Danish`, `Dutch`, `Estonian`, `Finnish`, `French`, `German`, `Greek`, `Hebrew`, `Hungarian`, `Italian`, `Japanese`, `Korean`, `Latvian`, `Lithuanian`, `Norwegian`, `Polish`, `Portuguese`, `Romanian`, `Russian`, `Serbian`, `Slovak`, `Slovenian`, `Spanish`, `Swedish`, `Turkish`, `Thai` and `Ukrainian`. - If you want to use a keyboard layout or locale that is not the default for the selected language, you can add the `KEYBOARD` and `REGION` variables with a culture code, like this: + If you want to use a keyboard layout or locale that is not the default for your selected language, you can add the `KEYBOARD` and `REGION` variables with a culture code, like this: ```yaml environment: REGION: "en-US" KEYBOARD: "en-US" ``` - + + Please note that changing these values will have no effect after the installation already has been performed. In that case you can use the Control Panel inside Windows for these settings. + * ### How do I change the storage location? To change the storage location, include the following bind mount in your compose file: @@ -326,14 +328,16 @@ kubectl apply -f kubernetes.yml * ### How do I verify if my system supports KVM? - To verify if your system supports KVM, run the following commands: + To verify that your system supports KVM, run the following commands: ```bash sudo apt install cpu-checker sudo kvm-ok ``` - If you receive an error from `kvm-ok` indicating that KVM acceleration can't be used, check the virtualization settings in the BIOS. + If you receive an error from `kvm-ok` indicating that KVM acceleration can't be used, check whether the virtualization extensions (`Intel VT-x` or `AMD SVM`) are enabled in your BIOS. If you are running the container inside a VM instead of directly on the host, you will also need to enable nested virtualization in its settings. If you are using a cloud provider, you may be out of luck as most of them do not allow nested virtualization for their VPS's. If you are using Windows 10 or MacOS, you are also out of luck, as only Linux and Windows 11 support KVM. + + If you don't receive any error from `kvm-ok` at all, but the container still complains that `/dev/kvm` is missing, it might help to add `privileged: true` to your compose file (or `--privileged` to your `run` command), to rule out any permission issue. * ### How do I run macOS in a container? @@ -341,7 +345,7 @@ kubectl apply -f kubernetes.yml * ### Is this project legal? - Yes, this project contains only open-source code and does not distribute any copyrighted material. Any product keys found in the code are just generic placeholders provided by Microsoft for trial purposes. So under all applicable laws, this project would be considered legal. + Yes, this project contains only open-source code and does not distribute any copyrighted material. Any product keys found in the code are just generic placeholders provided by Microsoft for trial purposes. So under all applicable laws, this project will be considered legal. ## Stars [![Stars](https://starchart.cc/dockur/windows.svg?variant=adaptive)](https://starchart.cc/dockur/windows) From 2f5f01dbb202ccea6ef694c98af48a49369c9624 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 9 Jun 2024 23:17:42 +0200 Subject: [PATCH 021/290] fix: Detection of EFI images (#577) --- src/define.sh | 8 ++++---- src/entry.sh | 3 ++- src/install.sh | 9 ++++++--- src/mido.sh | 44 ++++++++++++++++++++++++-------------------- src/power.sh | 2 +- 5 files changed, 37 insertions(+), 29 deletions(-) diff --git a/src/define.sh b/src/define.sh index c9e776a..051d79f 100644 --- a/src/define.sh +++ b/src/define.sh @@ -446,7 +446,7 @@ printEdition() { ;; esac - [ -n "$edition" ] && result="$result $edition" + [ -n "$edition" ] && result+=" $edition" echo "$result" return 0 @@ -729,13 +729,13 @@ getLink1() { [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 size=4821989376 sum="e8f1431c4e6289b3997c20eadbb2576670300bb6e1cf8948b5d7af179010a962" - url="26100.1.240331-1435.ge_release_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" + url="11/26100.1.240331-1435.ge_release_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" ;; "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 size=4821989376 sum="e8f1431c4e6289b3997c20eadbb2576670300bb6e1cf8948b5d7af179010a962" - url="26100.1.240331-1435.ge_release_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" + url="11/26100.1.240331-1435.ge_release_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" ;; "win10x64" | "win10x64-enterprise" | "win10x64-enterprise-eval" ) size=5675616256 @@ -2158,7 +2158,7 @@ prepareInstall() { echo "\"LimitBlankPasswordUse\"=dword:00000000" echo "" echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\srvWiz]" - echo "@=dword:00000000" + echo "@=dword:00000000" echo "" echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Tour]" echo "\"RunCount\"=dword:00000000" diff --git a/src/entry.sh b/src/entry.sh index c2c3912..c964635 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -23,7 +23,8 @@ cd /run trap - ERR -info "Booting ${APP}${BOOT_DESC}..." +version=$(qemu-system-x86_64 --version | head -n 1 | cut -d '(' -f 1 | awk '{ print $NF }') +info "Booting ${APP}${BOOT_DESC} using QEMU v$version..." { qemu-system-x86_64 ${ARGS:+ $ARGS} >"$QEMU_OUT" 2>"$QEMU_LOG"; rc=$?; } || : (( rc != 0 )) && error "$(<"$QEMU_LOG")" && exit 15 diff --git a/src/install.sh b/src/install.sh index bd56f6f..0aada6e 100644 --- a/src/install.sh +++ b/src/install.sh @@ -167,10 +167,13 @@ abortInstall() { local dir="$1" local iso="$2" + local efi [[ "${iso,,}" == *".esd" ]] && exit 60 - if [ ! -d "$dir/EFI" ]; then + efi=$(find "$dir" -maxdepth 1 -type d -iname efi | head -n 1) + + if [ -z "$efi" ]; then [[ "${PLATFORM,,}" == "x64" ]] && BOOT_MODE="windows_legacy" fi @@ -557,7 +560,7 @@ detectImage() { if [[ "${LANGUAGE,,}" != "en" ]] && [[ "${LANGUAGE,,}" != "en-"* ]]; then language=$(getLanguage "$LANGUAGE" "desc") - desc="$desc ($language)" + desc=+" ($language)" fi info "Detected: $desc" @@ -669,7 +672,7 @@ addDriver() { "win81x64"* ) folder="w8.1/amd64" ;; "win10x64"* ) folder="w10/amd64" ;; "win11x64"* ) folder="w11/amd64" ;; - "win2025"* ) folder="2k22/amd64" ;; + "win2025"* ) folder="w11/amd64" ;; "win2022"* ) folder="2k22/amd64" ;; "win2019"* ) folder="2k19/amd64" ;; "win2016"* ) folder="2k16/amd64" ;; diff --git a/src/mido.sh b/src/mido.sh index 06dc92e..98d0505 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -85,7 +85,7 @@ download_windows() { local url="https://www.microsoft.com/en-us/software-download/windows$windows_version" case "$windows_version" in - 8 | 10) url="${url}ISO";; + 8 | 10) url+="ISO";; esac # uuidgen: For MacOS (installed by default) and other systems (e.g. with no /proc) that don't have a kernel interface for generating random UUIDs @@ -416,8 +416,11 @@ getESD() { local fFile="products_filter.xml" { wget "$winCatalog" -O "$dir/$wFile" -q --timeout=30; rc=$?; } || : - (( rc == 4 )) && error "Failed to download $winCatalog , network failure!" && return 1 - (( rc != 0 )) && error "Failed to download $winCatalog , reason: $rc" && return 1 + + msg="Failed to download $winCatalog" + (( rc == 4 )) && error "$msg , network failure!" && return 1 + (( rc == 8 )) && error "$msg , server issued an error response!" && return 1 + (( rc != 0 )) && error "$msg , reason: $rc" && return 1 cd "$dir" @@ -495,8 +498,6 @@ verifyFile() { fi error "The downloaded file has an invalid $algo checksum: $hash , while expected value was: $check. Please report this at $SUPPORT/issues" - - rm -f "$iso" return 1 } @@ -519,19 +520,19 @@ downloadFile() { progress="--progress=dot:giga" fi - local msg="Downloading $desc..." - html "$msg" + local msg="Downloading $desc" + html "$msg..." domain=$(echo "$url" | awk -F/ '{print $3}') dots=$(echo "$domain" | tr -cd '.' | wc -c) (( dots > 1 )) && domain=$(expr "$domain" : '.*\.\(.*\..*\)') if [ -n "$domain" ] && [[ "${domain,,}" != *"microsoft.com" ]]; then - msg="Downloading $desc from $domain..." + msg="Downloading $desc from $domain" fi - info "$msg" - /run/progress.sh "$iso" "$size" "Downloading $desc ([P])..." & + info "$msg..." + /run/progress.sh "$iso" "$size" "$msg ([P])..." & { wget "$url" -O "$iso" -q --timeout=30 --show-progress "$progress"; rc=$?; } || : @@ -539,19 +540,18 @@ downloadFile() { if (( rc == 0 )) && [ -f "$iso" ]; then total=$(stat -c%s "$iso") - if [ "$total" -gt 100000000 ]; then - ! verifyFile "$iso" "$size" "$total" "$sum" && return 1 - html "Download finished successfully..." && return 0 + if [ "$total" -lt 100000000 ]; then + error "Downloaded ISO is only $total bytes?" && return 1 fi + ! verifyFile "$iso" "$size" "$total" "$sum" && return 1 + html "Download finished successfully..." && return 0 fi - if (( rc != 4 )); then - error "Failed to download $url , reason: $rc" - else - error "Failed to download $url , network failure!" - fi + msg="Failed to download $url" + (( rc == 4 )) && error "$msg , network failure!" && return 1 + (( rc == 8 )) && error "$msg , server issued an error response!" && return 1 - rm -f "$iso" + error "$msg , reason: $rc" return 1 } @@ -567,6 +567,7 @@ downloadImage() { base=$(basename "$iso") desc=$(fromFile "$base") downloadFile "$iso" "$version" "" "" "" "$desc" && return 0 + rm -f "$iso" return 1 fi @@ -582,7 +583,7 @@ downloadImage() { desc=$(printEdition "$version" "$desc") error "The $language language version of $desc is not available, please switch to English." && return 1 fi - desc="$desc in $language" + desc+=" in $language" fi if isMido "$version" "$lang"; then @@ -591,6 +592,7 @@ downloadImage() { size=$(getMido "$version" "$lang" "size" ) sum=$(getMido "$version" "$lang" "sum") downloadFile "$iso" "$MIDO_URL" "$sum" "$size" "$lang" "$desc" && return 0 + rm -f "$iso" fi fi @@ -607,6 +609,7 @@ downloadImage() { if getESD "$TMP/esd" "$version" "$lang" "$desc"; then ISO="${ISO%.*}.esd" downloadFile "$ISO" "$ESD" "$ESD_SUM" "$ESD_SIZE" "$lang" "$desc" && return 0 + rm -f "$ISO" ISO="$iso" fi @@ -624,6 +627,7 @@ downloadImage() { size=$(getSize "$i" "$version" "$lang") sum=$(getHash "$i" "$version" "$lang") downloadFile "$iso" "$url" "$sum" "$size" "$lang" "$desc" && return 0 + rm -f "$iso" fi done diff --git a/src/power.sh b/src/power.sh index 6540a56..e7ceaff 100644 --- a/src/power.sh +++ b/src/power.sh @@ -216,7 +216,7 @@ _graceful_shutdown() { SERIAL="pty" MONITOR="telnet:localhost:$QEMU_PORT,server,nowait,nodelay" -MONITOR="$MONITOR -daemonize -D $QEMU_LOG -pidfile $QEMU_PID" +MONITOR+=" -daemonize -D $QEMU_LOG -pidfile $QEMU_PID" _trap _graceful_shutdown SIGTERM SIGHUP SIGINT SIGABRT SIGQUIT From 5bf54a4158233561a074e5a4f61203a1e7c7defe Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 10 Jun 2024 19:38:32 +0200 Subject: [PATCH 022/290] feat: Make resolution configurable (#582) --- src/define.sh | 54 +++++++++++++++++++++++++++++++++++++++----------- src/install.sh | 21 +++++++++++++++++--- src/samba.sh | 4 ++-- 3 files changed, 62 insertions(+), 17 deletions(-) diff --git a/src/define.sh b/src/define.sh index 051d79f..3c3121d 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1,6 +1,8 @@ #!/usr/bin/env bash set -Eeuo pipefail +: "${XRES:=""}" +: "${YRES:=""}" : "${VERIFY:=""}" : "${REGION:=""}" : "${MANUAL:=""}" @@ -2073,6 +2075,12 @@ prepareInstall() { fi fi + [ -z "$YRES" ] && YRES="720" + [ -z "$XRES" ] && XRES="1280" + + XHEX=$(printf '%x\n' "$XRES") + YHEX=$(printf '%x\n' "$YRES") + local username="Docker" local password="*" @@ -2118,13 +2126,14 @@ prepareInstall() { echo " OrgName=\"Windows for Docker\"" echo " ProductKey=$key" echo "" - echo "[LicenseFilePrintData]" - echo " AutoMode=PerServer" - echo " AutoUsers=5" - echo "" echo "[Identification]" echo " JoinWorkgroup = WORKGROUP" echo "" + echo "[Display]" + echo " BitsPerPel=32" + echo " XResolution=$XRES" + echo " YResolution=$YRES" + echo "" echo "[Networking]" echo " InstallDefaultComponents=Yes" echo "" @@ -2140,6 +2149,17 @@ prepareInstall() { echo "" } | unix2dos > "$target/WINNT.SIF" + if [[ "$driver" == "2k3" ]]; then + { echo "[Components]" + echo " TerminalServer=On" + echo "" + echo "[LicenseFilePrintData]" + echo " AutoMode=PerServer" + echo " AutoUsers=5" + echo "" + } | unix2dos >> "$target/WINNT.SIF" + fi + { echo "Windows Registry Editor Version 5.00" echo "" echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Security]" @@ -2157,18 +2177,12 @@ prepareInstall() { echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]" echo "\"LimitBlankPasswordUse\"=dword:00000000" echo "" - echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\srvWiz]" - echo "@=dword:00000000" - echo "" echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Tour]" echo "\"RunCount\"=dword:00000000" echo "" echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]" echo "\"HideFileExt\"=dword:00000000" echo "" - echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ServerOOBE\SecurityOOBE]" - echo "\"DontLaunchSecurityOOBE\"=dword:00000000" - echo "" echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]" echo "\"DefaultUserName\"=\"$username\"" echo "\"DefaultDomainName\"=\"Dockur\"" @@ -2178,15 +2192,31 @@ prepareInstall() { echo "" echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video\{23A77BF7-ED96-40EC-AF06-9B1F4867732A}\0000]" echo "\"DefaultSettings.BitsPerPel\"=dword:00000020" - echo "\"DefaultSettings.XResolution\"=dword:00000780" - echo "\"DefaultSettings.YResolution\"=dword:00000438" + echo "\"DefaultSettings.XResolution\"=dword:00000$XHEX" + echo "\"DefaultSettings.YResolution\"=dword:00000$YHEX" + echo "" + echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Control\VIDEO\{23A77BF7-ED96-40EC-AF06-9B1F4867732A}\0000]" + echo "\"DefaultSettings.BitsPerPel\"=dword:00000020" + echo "\"DefaultSettings.XResolution\"=dword:00000$XHEX" + echo "\"DefaultSettings.YResolution\"=dword:00000$YHEX" echo "" echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce]" echo "\"ScreenSaver\"=\"reg add \\\"HKCU\\\\Control Panel\\\\Desktop\\\" /f /v \\\"SCRNSAVE.EXE\\\" /t REG_SZ /d \\\"off\\\"\"" echo "\"ScreenSaverOff\"=\"reg add \\\"HKCU\\\\Control Panel\\\\Desktop\\\" /f /v \\\"ScreenSaveActive\\\" /t REG_SZ /d \\\"0\\\"\"" echo "$oem" + echo "" } | unix2dos > "$dir/\$OEM\$/install.reg" + if [[ "$driver" == "2k3" ]]; then + { echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\srvWiz]" + echo "@=dword:00000000" + echo "" + echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ServerOOBE\SecurityOOBE]" + echo "\"DontLaunchSecurityOOBE\"=dword:00000000" + echo "" + } | unix2dos >> "$dir/\$OEM\$/install.reg" + fi + { echo "Set WshShell = WScript.CreateObject(\"WScript.Shell\")" echo "Set WshNetwork = WScript.CreateObject(\"WScript.Network\")" echo "Set oMachine = GetObject(\"WinNT://\" & WshNetwork.ComputerName)" diff --git a/src/install.sh b/src/install.sh index 0aada6e..b8cd8cf 100644 --- a/src/install.sh +++ b/src/install.sh @@ -119,10 +119,11 @@ finishInstall() { fi rm -f "$STORAGE/windows.old" - rm -f "$STORAGE/windows.type" + rm -f "$STORAGE/windows.vga" rm -f "$STORAGE/windows.base" rm -f "$STORAGE/windows.boot" rm -f "$STORAGE/windows.mode" + rm -f "$STORAGE/windows.type" cp -f /run/version "$STORAGE/windows.ver" @@ -155,6 +156,10 @@ finishInstall() { fi fi + if [ -n "${VGA:-}" ] && [[ "${VGA:-}" != "virtio" ]] && [[ "${VGA:-}" != "ramfb" ]]; then + echo "$VGA" > "$STORAGE/windows.vga" + fi + if [ -n "${DISK_TYPE:-}" ] && [[ "${DISK_TYPE:-}" != "scsi" ]]; then echo "$DISK_TYPE" > "$STORAGE/windows.type" fi @@ -613,6 +618,12 @@ updateXML() { local language="$2" local culture region user admin pass keyboard + [ -z "$YRES" ] && YRES="720" + [ -z "$XRES" ] && XRES="1280" + + sed -i "s/<VerticalResolution>1080<\/VerticalResolution>/<VerticalResolution>$YRES<\/VerticalResolution>/g" "$asset" + sed -i "s/<HorizontalResolution>1920<\/HorizontalResolution>/<HorizontalResolution>$XRES<\/HorizontalResolution>/g" "$asset" + culture=$(getLanguage "$language" "culture") if [ -n "$culture" ] && [[ "${culture,,}" != "en-us" ]]; then @@ -967,10 +978,14 @@ bootWindows() { rm -rf "$TMP" - [[ "${PLATFORM,,}" == "arm64" ]] && VGA="virtio-gpu" + if [ -s "$STORAGE/windows.vga" ] && [ -f "$STORAGE/windows.vga" ]; then + [ -z "${VGA:-}" ] && VGA=$(<"$STORAGE/windows.vga") + else + [ -z "${VGA:-}" ] && [[ "${PLATFORM,,}" == "arm64" ]] && VGA="virtio-gpu" + fi if [ -s "$STORAGE/windows.type" ] && [ -f "$STORAGE/windows.type" ]; then - DISK_TYPE=$(<"$STORAGE/windows.type") + [ -z "${DISK_TYPE:-}" ] && DISK_TYPE=$(<"$STORAGE/windows.type") fi if [ -s "$STORAGE/windows.mode" ] && [ -f "$STORAGE/windows.mode" ]; then diff --git a/src/samba.sh b/src/samba.sh index 10dd37c..71f9bcf 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -3,8 +3,8 @@ set -Eeuo pipefail : "${SAMBA:="Y"}" -[[ "$SAMBA" != [Yy1]* ]] && return 0 -[[ "$NETWORK" != [Yy1]* ]] && return 0 +[[ "$SAMBA" == [Nn]* ]] && return 0 +[[ "$NETWORK" == [Nn]* ]] && return 0 hostname="host.lan" interface="dockerbridge" From 577369a54fd73c18cdc132b2b4cf5a09e3d0f171 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 11 Jun 2024 02:10:36 +0200 Subject: [PATCH 023/290] feat: Check diskspace before download (#583) --- Dockerfile | 2 +- src/mido.sh | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index ff94b1f..4f671e0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:5.12 / / +COPY --from=qemux/qemu-docker:5.13 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" diff --git a/src/mido.sh b/src/mido.sh index 98d0505..897542d 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -418,6 +418,7 @@ getESD() { { wget "$winCatalog" -O "$dir/$wFile" -q --timeout=30; rc=$?; } || : msg="Failed to download $winCatalog" + (( rc == 3 )) && error "$msg , cannot write file (disk full?)" && return 1 (( rc == 4 )) && error "$msg , network failure!" && return 1 (( rc == 8 )) && error "$msg , server issued an error response!" && return 1 (( rc != 0 )) && error "$msg , reason: $rc" && return 1 @@ -509,10 +510,16 @@ downloadFile() { local size="$4" local lang="$5" local desc="$6" - local rc total progress domain dots + local rc total progress domain dots space folder rm -f "$iso" + if [ -n "$size" ] && [[ "$size" != "0" ]]; then + folder=$(dirname -- "$iso") + space=$(df --output=avail -B 1 "$folder" | tail -n 1) + (( size > space )) && error "Not enough free space left to download file!" && return 1 + fi + # Check if running with interactive TTY or redirected to docker log if [ -t 1 ]; then progress="--progress=bar:noscroll" @@ -548,6 +555,7 @@ downloadFile() { fi msg="Failed to download $url" + (( rc == 3 )) && error "$msg , cannot write file (disk full?)" && return 1 (( rc == 4 )) && error "$msg , network failure!" && return 1 (( rc == 8 )) && error "$msg , server issued an error response!" && return 1 From 2ec0e71daf21182b4ee5a2baf559aa340bbb5014 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 11 Jun 2024 20:00:19 +0200 Subject: [PATCH 024/290] docs: KVM information (#585) --- readme.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 360f59d..c454664 100644 --- a/readme.md +++ b/readme.md @@ -335,9 +335,17 @@ kubectl apply -f kubernetes.yml sudo kvm-ok ``` - If you receive an error from `kvm-ok` indicating that KVM acceleration can't be used, check whether the virtualization extensions (`Intel VT-x` or `AMD SVM`) are enabled in your BIOS. If you are running the container inside a VM instead of directly on the host, you will also need to enable nested virtualization in its settings. If you are using a cloud provider, you may be out of luck as most of them do not allow nested virtualization for their VPS's. If you are using Windows 10 or MacOS, you are also out of luck, as only Linux and Windows 11 support KVM. + If you receive an error from `kvm-ok` indicating that KVM acceleration can't be used, please check whether: - If you don't receive any error from `kvm-ok` at all, but the container still complains that `/dev/kvm` is missing, it might help to add `privileged: true` to your compose file (or `--privileged` to your `run` command), to rule out any permission issue. + - the virtualization extensions (`Intel VT-x` or `AMD SVM`) are enabled in your BIOS. + + - you are running an operating system that supports them, like Linux or Windows 11 (macOS and Windows 10 do not unfortunately). + + - you enabled "nested virtualization" if you are running the container inside a virtual machine. + + - you are not using a cloud provider, as most of them do not allow nested virtualization for their VPS's. + + If you didn't receive any error from `kvm-ok` at all, but the container still complains that `/dev/kvm` is missing, it might help to add `privileged: true` to your compose file (or `--privileged` to your `run` command), to rule out any permission issue. * ### How do I run macOS in a container? From 77c12a011371eaac1364681062b6833400a794b7 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 11 Jun 2024 20:56:49 +0200 Subject: [PATCH 025/290] docs: Add icons (#586) --- readme.md | 53 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 44 insertions(+), 9 deletions(-) diff --git a/readme.md b/readme.md index c454664..002e0f4 100644 --- a/readme.md +++ b/readme.md @@ -13,18 +13,18 @@ Windows inside a Docker container. -## Features +## Features ✨ - Multi-language - ISO downloader - KVM acceleration - Web-based viewer -## Video +## Video 📺 [![Youtube](https://img.youtube.com/vi/xhGYobuG508/0.jpg)](https://www.youtube.com/watch?v=xhGYobuG508) -## Usage +## Usage 🐳 Via Docker Compose: @@ -58,7 +58,7 @@ Via Kubernetes: kubectl apply -f kubernetes.yml ``` -## FAQ +## FAQ 💬 * ### How do I use it? @@ -115,10 +115,45 @@ kubectl apply -f kubernetes.yml ```yaml environment: - LANGUAGE: "Chinese" + LANGUAGE: "cn" ``` - - You can choose between `Arabic`, `Bulgarian`, `Chinese`, `Croatian`, `Czech`, `Danish`, `Dutch`, `Estonian`, `Finnish`, `French`, `German`, `Greek`, `Hebrew`, `Hungarian`, `Italian`, `Japanese`, `Korean`, `Latvian`, `Lithuanian`, `Norwegian`, `Polish`, `Portuguese`, `Romanian`, `Russian`, `Serbian`, `Slovak`, `Slovenian`, `Spanish`, `Swedish`, `Turkish`, `Thai` and `Ukrainian`. + + You can choose between: + + - 🇦🇪 **Arabic**: `ar` + - 🇧🇬 **Bulgarian**: `bg` + - 🇨🇳 **Chinese (simplified)**: `cn` + - 🇹🇼 **Chinese (traditional)**: `tw` + - 🇭🇷 **Croation**: `hr` + - 🇨🇿 **Czech**: `cs` + - 🇩🇰 **Danish**: `da` + - 🇳🇱 **Dutch**: `nl` + - 🇬🇧 **English**: `en` + - 🇪🇪 **Estionian**: `et` + - 🇫🇮 **Finnish**: `fi` + - 🇫🇷 **French**: `fr` + - 🇩🇪 **German**: `de` + - 🇬🇷 **Greek**: `el` + - 🇮🇱 **Hebrew**: `he` + - 🇭🇺 **Hungarian**: `hu` + - 🇮🇹 **Italian**: `it` + - 🇯🇵 **Japanese**: `ja` + - 🇰🇷 **Korean**: `ko` + - 🇱🇻 **Latvian**: `lv` + - 🇱🇹 **Lithuanian**: `lt` + - 🇳🇴 **Norwegian**: `nb` + - 🇵🇱 **Polish**: `pl` + - 🇵🇹 **Portuguese**: `pt` + - 🇷🇴 **Romanian**: `ro` + - 🇷🇺 **Russian**: `ru` + - 🇷🇸 **Serbian**: `sr` + - 🇸🇰 **Slovak**: `sk` + - 🇸🇮 **Slovenian**: `sl` + - 🇪🇸 **Spanish**: `es` + - 🇸🇪 **Swedish**: `sv` + - 🇹🇭 **Thai**: `th` + - 🇹🇷 **Turkish**: `tr` + - 🇺🇦 **Ukrainian**: `ua` If you want to use a keyboard layout or locale that is not the default for your selected language, you can add the `KEYBOARD` and `REGION` variables with a culture code, like this: @@ -355,10 +390,10 @@ kubectl apply -f kubernetes.yml Yes, this project contains only open-source code and does not distribute any copyrighted material. Any product keys found in the code are just generic placeholders provided by Microsoft for trial purposes. So under all applicable laws, this project will be considered legal. -## Stars +## Stars 🌟 [![Stars](https://starchart.cc/dockur/windows.svg?variant=adaptive)](https://starchart.cc/dockur/windows) -## Disclaimer +## Disclaimer ⚖️ The product names, logos, brands, and other trademarks referred to within this project are the property of their respective trademark holders. This project is not affiliated, sponsored, or endorsed by Microsoft Corporation. From 923839abfc9279a76b64db4dc3b63eb2ea275609 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 11 Jun 2024 21:47:13 +0200 Subject: [PATCH 026/290] docs: Readme (#587) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 002e0f4..a1e60b5 100644 --- a/readme.md +++ b/readme.md @@ -395,7 +395,7 @@ kubectl apply -f kubernetes.yml ## Disclaimer ⚖️ -The product names, logos, brands, and other trademarks referred to within this project are the property of their respective trademark holders. This project is not affiliated, sponsored, or endorsed by Microsoft Corporation. +*The product names, logos, brands, and other trademarks referred to within this project are the property of their respective trademark holders. This project is not affiliated, sponsored, or endorsed by Microsoft Corporation.* [build_url]: https://github.com/dockur/windows/ [hub_url]: https://hub.docker.com/r/dockurr/windows/ From 01935566eecd3f705623758eebd997ec42f57120 Mon Sep 17 00:00:00 2001 From: ipitio <21136719+ipitio@users.noreply.github.com> Date: Tue, 11 Jun 2024 17:21:55 -0400 Subject: [PATCH 027/290] docs: Add GHCR badge (#580) --- readme.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/readme.md b/readme.md index a1e60b5..f86d57d 100644 --- a/readme.md +++ b/readme.md @@ -7,6 +7,7 @@ [![Build]][build_url] [![Version]][tag_url] [![Size]][tag_url] +[![Package]][pkg_url] [![Pulls]][hub_url] </div></h1> @@ -400,8 +401,10 @@ kubectl apply -f kubernetes.yml [build_url]: https://github.com/dockur/windows/ [hub_url]: https://hub.docker.com/r/dockurr/windows/ [tag_url]: https://hub.docker.com/r/dockurr/windows/tags +[pkg_url]: https://github.com/dockur/windows/pkgs/container/windows [Build]: https://github.com/dockur/windows/actions/workflows/build.yml/badge.svg [Size]: https://img.shields.io/docker/image-size/dockurr/windows/latest?color=066da5&label=size [Pulls]: https://img.shields.io/docker/pulls/dockurr/windows.svg?style=flat&label=pulls&logo=docker [Version]: https://img.shields.io/docker/v/dockurr/windows/latest?arch=amd64&sort=semver&color=066da5 +[Package]: https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fraw.githubusercontent.com%2Fipitio%2Fghcr-pulls%2Fmaster%2Findex.json&query=%24%5B%3F(%40.owner%3D%3D%22dockur%22%20%26%26%20%40.repo%3D%3D%22windows%22%20%26%26%20%40.image%3D%3D%22windows%22)%5D.pulls&logo=github&style=flat&color=066da5&label=pulls From 8b4fe1b2785b41942e6851bca56c90166d2c076a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Jun 2024 23:43:12 +0200 Subject: [PATCH 028/290] chore(deps): update qemux/qemu-docker docker tag to v5.15 (#590) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 4f671e0..cd96907 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:5.13 / / +COPY --from=qemux/qemu-docker:5.15 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" From 135f8a01efa8b061d0ec2b6eecef1227d33a3ea0 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 13 Jun 2024 01:54:44 +0200 Subject: [PATCH 029/290] docs: Languages (#594) --- readme.md | 39 ++------------------------------------- 1 file changed, 2 insertions(+), 37 deletions(-) diff --git a/readme.md b/readme.md index f86d57d..473b92a 100644 --- a/readme.md +++ b/readme.md @@ -116,45 +116,10 @@ kubectl apply -f kubernetes.yml ```yaml environment: - LANGUAGE: "cn" + LANGUAGE: "French" ``` - You can choose between: - - - 🇦🇪 **Arabic**: `ar` - - 🇧🇬 **Bulgarian**: `bg` - - 🇨🇳 **Chinese (simplified)**: `cn` - - 🇹🇼 **Chinese (traditional)**: `tw` - - 🇭🇷 **Croation**: `hr` - - 🇨🇿 **Czech**: `cs` - - 🇩🇰 **Danish**: `da` - - 🇳🇱 **Dutch**: `nl` - - 🇬🇧 **English**: `en` - - 🇪🇪 **Estionian**: `et` - - 🇫🇮 **Finnish**: `fi` - - 🇫🇷 **French**: `fr` - - 🇩🇪 **German**: `de` - - 🇬🇷 **Greek**: `el` - - 🇮🇱 **Hebrew**: `he` - - 🇭🇺 **Hungarian**: `hu` - - 🇮🇹 **Italian**: `it` - - 🇯🇵 **Japanese**: `ja` - - 🇰🇷 **Korean**: `ko` - - 🇱🇻 **Latvian**: `lv` - - 🇱🇹 **Lithuanian**: `lt` - - 🇳🇴 **Norwegian**: `nb` - - 🇵🇱 **Polish**: `pl` - - 🇵🇹 **Portuguese**: `pt` - - 🇷🇴 **Romanian**: `ro` - - 🇷🇺 **Russian**: `ru` - - 🇷🇸 **Serbian**: `sr` - - 🇸🇰 **Slovak**: `sk` - - 🇸🇮 **Slovenian**: `sl` - - 🇪🇸 **Spanish**: `es` - - 🇸🇪 **Swedish**: `sv` - - 🇹🇭 **Thai**: `th` - - 🇹🇷 **Turkish**: `tr` - - 🇺🇦 **Ukrainian**: `ua` + You can choose between: 🇦🇪 Arabic, 🇧🇬 Bulgarian, 🇨🇳 Chinese, 🇭🇷 Croatian, 🇨🇿 Czech, 🇩🇰 Danish, 🇳🇱 Dutch, 🇬🇧 English, 🇪🇪 Estionian, 🇫🇮 Finnish, 🇫🇷 French, 🇩🇪 German, 🇬🇷 Greek, 🇮🇱 Hebrew, 🇭🇺 Hungarian, 🇮🇹 Italian, 🇯🇵 Japanese, 🇰🇷 Korean, 🇱🇻 Latvian, 🇱🇹 Lithuanian, 🇳🇴 Norwegian, 🇵🇱 Polish, 🇵🇹 Portuguese, 🇷🇴 Romanian, 🇷🇺 Russian, 🇷🇸 Serbian, 🇸🇰 Slovak, 🇸🇮 Slovenian, 🇪🇸 Spanish, 🇸🇪 Swedish, 🇹🇭 Thai, 🇹🇷 Turkish and 🇺🇦 Ukrainian. If you want to use a keyboard layout or locale that is not the default for your selected language, you can add the `KEYBOARD` and `REGION` variables with a culture code, like this: From d22372f47e76e63761dfc7a0a2afa7b1a52e93cc Mon Sep 17 00:00:00 2001 From: arisudesu <arisudesu@yandex.ru> Date: Thu, 13 Jun 2024 17:30:33 +0300 Subject: [PATCH 030/290] fix: Username customization in localized Windows XP versions (#596) --- src/define.sh | 42 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/src/define.sh b/src/define.sh index 3c3121d..7721537 100644 --- a/src/define.sh +++ b/src/define.sh @@ -2219,9 +2219,45 @@ prepareInstall() { { echo "Set WshShell = WScript.CreateObject(\"WScript.Shell\")" echo "Set WshNetwork = WScript.CreateObject(\"WScript.Network\")" - echo "Set oMachine = GetObject(\"WinNT://\" & WshNetwork.ComputerName)" - echo "Set oInfoUser = GetObject(\"WinNT://\" & WshNetwork.ComputerName & \"/Administrator,user\")" - echo "Set oUser = oMachine.MoveHere(oInfoUser.ADsPath,\"$username\")" + echo "Set Domain = GetObject(\"WinNT://\" & WshNetwork.ComputerName)" + echo "" + echo "Function DecodeSID(binSID)" + echo " ReDim o(LenB(binSID))" + echo "" + echo " For i = 1 To LenB(binSID)" + echo " o(i-1) = AscB(MidB(binSID, i, 1))" + echo " Next" + echo "" + echo " sid = \"S-\" & CStr(o(0)) & \"-\" & OctetArrayToString _" + echo " (Array(o(2), o(3), o(4), o(5), o(6), o(7)))" + echo " For i = 8 To (4 * o(1) + 4) Step 4" + echo " sid = sid & \"-\" & OctetArrayToString _" + echo " (Array(o(i+3), o(i+2), o(i+1), o(i)))" + echo " Next" + echo "" + echo " DecodeSID = sid" + echo "End Function" + echo "" + echo "Function OctetArrayToString(arr)" + echo " v = 0" + echo " For i = 0 To UBound(arr)" + echo " v = v * 256 + arr(i)" + echo " Next" + echo "" + echo " OctetArrayToString = CStr(v)" + echo "End Function" + echo "" + echo "For Each DomainItem in Domain" + echo " If DomainItem.Class = \"User\" Then" + echo " sid = DecodeSID(DomainItem.Get(\"objectSID\"))" + echo " If Left(sid, 9) = \"S-1-5-21-\" And Right(sid, 4) = \"-500\" Then" + echo " LocalAdminADsPath = DomainItem.ADsPath" + echo " Exit For" + echo " End If" + echo " End If" + echo "Next" + echo "" + echo "Call Domain.MoveHere(LocalAdminADsPath, \"$username\")" echo "" } | unix2dos > "$dir/\$OEM\$/admin.vbs" From e23f042c5f0b0a859d8477962eb2036517b62fe8 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 13 Jun 2024 18:15:03 +0200 Subject: [PATCH 031/290] docs: Add markdown alerts (#598) --- readme.md | 65 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 38 insertions(+), 27 deletions(-) diff --git a/readme.md b/readme.md index 473b92a..c2ea5a3 100644 --- a/readme.md +++ b/readme.md @@ -61,7 +61,7 @@ kubectl apply -f kubernetes.yml ## FAQ 💬 -* ### How do I use it? +### How do I use it? Very simple! These are the steps: @@ -73,7 +73,7 @@ kubectl apply -f kubernetes.yml Enjoy your brand new machine, and don't forget to star this repo! -* ### How do I select the Windows version? +### How do I select the Windows version? By default, Windows 11 will be installed. But you can add the `VERSION` environment variable to your compose file, in order to specify an alternative Windows version to be downloaded: @@ -108,9 +108,10 @@ kubectl apply -f kubernetes.yml | `tiny11` | Tiny 11 | 3.8 GB | | `tiny10` | Tiny 10 | 3.6 GB | - To install ARM64 versions of Windows use [dockur/windows-arm](https://github.com/dockur/windows-arm/). +> [!TIP] +> To install ARM64 versions of Windows use [dockur/windows-arm](https://github.com/dockur/windows-arm/). -* ### How do I select the Windows language? +### How do I select the Windows language? By default, the English version of Windows will be downloaded. But you can add the `LANGUAGE` environment variable to your compose file, in order to specify an alternative language: @@ -121,6 +122,8 @@ kubectl apply -f kubernetes.yml You can choose between: 🇦🇪 Arabic, 🇧🇬 Bulgarian, 🇨🇳 Chinese, 🇭🇷 Croatian, 🇨🇿 Czech, 🇩🇰 Danish, 🇳🇱 Dutch, 🇬🇧 English, 🇪🇪 Estionian, 🇫🇮 Finnish, 🇫🇷 French, 🇩🇪 German, 🇬🇷 Greek, 🇮🇱 Hebrew, 🇭🇺 Hungarian, 🇮🇹 Italian, 🇯🇵 Japanese, 🇰🇷 Korean, 🇱🇻 Latvian, 🇱🇹 Lithuanian, 🇳🇴 Norwegian, 🇵🇱 Polish, 🇵🇹 Portuguese, 🇷🇴 Romanian, 🇷🇺 Russian, 🇷🇸 Serbian, 🇸🇰 Slovak, 🇸🇮 Slovenian, 🇪🇸 Spanish, 🇸🇪 Swedish, 🇹🇭 Thai, 🇹🇷 Turkish and 🇺🇦 Ukrainian. +### How do I select the keyboard layout? + If you want to use a keyboard layout or locale that is not the default for your selected language, you can add the `KEYBOARD` and `REGION` variables with a culture code, like this: ```yaml @@ -129,9 +132,10 @@ kubectl apply -f kubernetes.yml KEYBOARD: "en-US" ``` - Please note that changing these values will have no effect after the installation already has been performed. In that case you can use the Control Panel inside Windows for these settings. +> [!NOTE] +> Changing these values will have no effect after the installation already has been performed. Use the control panel inside Windows in that case. -* ### How do I change the storage location? +### How do I change the storage location? To change the storage location, include the following bind mount in your compose file: @@ -142,7 +146,7 @@ kubectl apply -f kubernetes.yml Replace the example path `/var/win` with the desired storage folder. -* ### How do I change the size of the disk? +### How do I change the size of the disk? To expand the default size of 64 GB, add the `DISK_SIZE` setting to your compose file and set it to your preferred capacity: @@ -151,9 +155,10 @@ kubectl apply -f kubernetes.yml DISK_SIZE: "256G" ``` - This can also be used to resize the existing disk to a larger capacity without any data loss. +> [!TIP] +> This can also be used to resize the existing disk to a larger capacity without any data loss. -* ### How do I share files with the host? +### How do I share files with the host? Open 'File Explorer' and click on the 'Network' section, you will see a computer called `host.lan`. Double-click it and it will show a folder called `Data`, which can be binded to any folder on your host via the compose file: @@ -162,9 +167,12 @@ kubectl apply -f kubernetes.yml - /home/user/example:/shared ``` - The example folder `/home/user/example` will be available as ` \\host.lan\Data`. You can optionally map this path to a drive letter in Windows, for easier access. + The example folder `/home/user/example` will be available as ` \\host.lan\Data`. + +> [!TIP] +> You can map this path to a drive letter in Windows, for easier access. -* ### How do I install a custom image? +### How do I install a custom image? In order to download an unsupported ISO image that is not selectable from the list above, specify the URL of that ISO in the `VERSION` environment variable, for example: @@ -182,7 +190,7 @@ kubectl apply -f kubernetes.yml Replace the example path `/home/user/example.iso` with the filename of your desired ISO file, the value of `VERSION` will be ignored in this case. -* ### How do I run a script after installation? +### How do I run a script after installation? To run your own script after installation, you can create a file called `install.bat` and place it in a folder together with any additional files it needs (software to be installed for example). Then bind that folder in your compose file like this: @@ -193,7 +201,7 @@ kubectl apply -f kubernetes.yml The example folder `/home/user/example` will be copied to `C:\OEM` during installation and the containing `install.bat` will be executed during the last step. -* ### How do I perform a manual installation? +### How do I perform a manual installation? It's best to stick to the automatic installation, as it adjusts various settings to prevent common issues when running Windows inside a virtual environment. @@ -204,7 +212,7 @@ kubectl apply -f kubernetes.yml MANUAL: "Y" ``` -* ### How do I change the amount of CPU or RAM? +### How do I change the amount of CPU or RAM? By default, the container will be allowed to use a maximum of 2 CPU cores and 4 GB of RAM. @@ -216,7 +224,7 @@ kubectl apply -f kubernetes.yml CPU_CORES: "4" ``` -* ### How do I configure the username and password? +### How do I configure the username and password? By default, a user called `Docker` is created during the installation, with an empty password. @@ -228,7 +236,7 @@ kubectl apply -f kubernetes.yml PASSWORD: "gates" ``` -* ### How do I connect using RDP? +### How do I connect using RDP? The web-viewer is mainly meant to be used during installation, as its picture quality is low, and it has no audio or clipboard for example. @@ -236,7 +244,7 @@ kubectl apply -f kubernetes.yml There is a RDP client for [Android](https://play.google.com/store/apps/details?id=com.microsoft.rdc.androidx) available from the Play Store and one for [iOS](https://apps.apple.com/nl/app/microsoft-remote-desktop/id714464092?l=en-GB) in the Apple Store. For Linux you can use [FreeRDP](https://www.freerdp.com/) and on Windows just type `mstsc` in the search box. -* ### How do I assign an individual IP address to the container? +### How do I assign an individual IP address to the container? By default, the container uses bridge networking, which shares the IP address with the host. @@ -270,9 +278,10 @@ kubectl apply -f kubernetes.yml An added benefit of this approach is that you won't have to perform any port mapping anymore, since all ports will be exposed by default. - Please note that this IP address won't be accessible from the Docker host due to the design of macvlan, which doesn't permit communication between the two. If this is a concern, you need to create a [second macvlan](https://blog.oddbit.com/post/2018-03-12-using-docker-macvlan-networks/#host-access) as a workaround. +> [!IMPORTANT] +> This IP address won't be accessible from the Docker host due to the design of macvlan, which doesn't permit communication between the two. If this is a concern, you need to create a [second macvlan](https://blog.oddbit.com/post/2018-03-12-using-docker-macvlan-networks/#host-access) as a workaround. -* ### How can Windows acquire an IP address from my router? +### How can Windows acquire an IP address from my router? After configuring the container for macvlan (see above), it is possible for Windows to become part of your home network by requesting an IP from your router, just like a real PC. @@ -287,9 +296,10 @@ kubectl apply -f kubernetes.yml - 'c *:* rwm' ``` - Please note that in this mode, the container and Windows will each have their own separate IPs. The container will keep the macvlan IP, and Windows will use the DHCP IP. +> [!NOTE] +> In this mode, the container and Windows will each have their own separate IPs. -* ### How do I add multiple disks? +### How do I add multiple disks? To create additional disks, modify your compose file like this: @@ -302,7 +312,7 @@ kubectl apply -f kubernetes.yml - /mnt/data/example:/storage3 ``` -* ### How do I pass-through a disk? +### How do I pass-through a disk? It is possible to pass-through disk devices directly by adding them to your compose file in this way: @@ -314,7 +324,7 @@ kubectl apply -f kubernetes.yml Use `/disk1` if you want it to become your main drive, and use `/disk2` and higher to add them as secondary drives. -* ### How do I pass-through a USB device? +### How do I pass-through a USB device? To pass-through a USB device, first lookup its vendor and product id via the `lsusb` command, then add them to your compose file like this: @@ -325,9 +335,10 @@ kubectl apply -f kubernetes.yml - /dev/bus/usb ``` - In case the device is a USB disk drive, please wait until after the installation is completed before connecting it. Otherwise the installation may fail, as the order of the disks can get rearranged. +> [!IMPORTANT] +> In case the device is a USB disk drive, please wait until after the installation is completed before connecting it. Otherwise the installation may fail, as the order of the disks can get rearranged. -* ### How do I verify if my system supports KVM? +### How do I verify if my system supports KVM? To verify that your system supports KVM, run the following commands: @@ -348,11 +359,11 @@ kubectl apply -f kubernetes.yml If you didn't receive any error from `kvm-ok` at all, but the container still complains that `/dev/kvm` is missing, it might help to add `privileged: true` to your compose file (or `--privileged` to your `run` command), to rule out any permission issue. -* ### How do I run macOS in a container? +### How do I run macOS in a container? You can use [dockur/macos](https://github.com/dockur/macos) for that. It shares many of the same features, except for the automatic installation. -* ### Is this project legal? +### Is this project legal? Yes, this project contains only open-source code and does not distribute any copyrighted material. Any product keys found in the code are just generic placeholders provided by Microsoft for trial purposes. So under all applicable laws, this project will be considered legal. From d18b4bff79d38de70675be981dfdc0b236ce55ef Mon Sep 17 00:00:00 2001 From: alexeadem <alex@eadem.com> Date: Thu, 13 Jun 2024 10:25:12 -0700 Subject: [PATCH 032/290] docs: Removed Kubevirt dependancy (#597) --- kubernetes.yml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/kubernetes.yml b/kubernetes.yml index c46d3df..2fb5888 100644 --- a/kubernetes.yml +++ b/kubernetes.yml @@ -27,9 +27,6 @@ spec: protocol: TCP - containerPort: 3389 protocol: UDP - resources: - limits: - devices.kubevirt.io/kvm: 1 securityContext: privileged: true env: @@ -42,10 +39,15 @@ spec: volumeMounts: - mountPath: /storage name: storage + - mountPath: /dev/kvm + name: dev-kvm volumes: - name: storage persistentVolumeClaim: claimName: windows-pvc + - name: dev-kvm + hostPath: + path: /dev/kvm --- apiVersion: v1 kind: Service @@ -60,14 +62,11 @@ spec: protocol: TCP port: 8006 targetPort: 8006 - nodePort: 48006 - name: tcp-3389 protocol: TCP port: 3389 targetPort: 3389 - nodePort: 43389 - name: udp-3389 protocol: UDP port: 3389 targetPort: 3389 - nodePort: 43388 From e7b831232abd72b9bc2d5441e761a291a4e1944a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 14 Jun 2024 03:11:31 +0200 Subject: [PATCH 033/290] chore(deps): update qemux/qemu-docker docker tag to v5.16 (#600) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index cd96907..32bc617 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:5.15 / / +COPY --from=qemux/qemu-docker:5.16 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" From d2e0b6a90d3f3d4d160f7b5a9f87930b1dcad55c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 16 Jun 2024 06:11:33 +0200 Subject: [PATCH 034/290] docs: Networking (#610) --- readme.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index c2ea5a3..27db199 100644 --- a/readme.md +++ b/readme.md @@ -133,7 +133,7 @@ kubectl apply -f kubernetes.yml ``` > [!NOTE] -> Changing these values will have no effect after the installation already has been performed. Use the control panel inside Windows in that case. +> Changing these values will have no effect after the installation has been performed already. Use the control panel inside Windows in that case. ### How do I change the storage location? @@ -283,7 +283,7 @@ kubectl apply -f kubernetes.yml ### How can Windows acquire an IP address from my router? - After configuring the container for macvlan (see above), it is possible for Windows to become part of your home network by requesting an IP from your router, just like a real PC. + After configuring the container for [macvlan](#how-do-i-assign-an-individual-ip-address-to-the-container), it is possible for Windows to become part of your home network by requesting an IP from your router, just like a real PC. To enable this mode, add the following lines to your compose file: @@ -336,7 +336,7 @@ kubectl apply -f kubernetes.yml ``` > [!IMPORTANT] -> In case the device is a USB disk drive, please wait until after the installation is completed before connecting it. Otherwise the installation may fail, as the order of the disks can get rearranged. +> If the device is a USB disk drive, please wait until after the installation is completed before connecting it. Otherwise the installation may fail, as the order of the disks can get rearranged. ### How do I verify if my system supports KVM? From 4cc90d4e1e2aaa27b5ccb42173213a1ea69e8d59 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Jun 2024 11:57:55 +0200 Subject: [PATCH 035/290] chore(deps): update docker/build-push-action action to v6 (#611) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d437ad8..eb6174a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -69,7 +69,7 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} - name: Build Docker image - uses: docker/build-push-action@v5 + uses: docker/build-push-action@v6 with: context: . push: true From da1e631c9241b53e540ba0c67b219ae2fa9a08a5 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 13 Aug 2024 21:18:47 +0200 Subject: [PATCH 036/290] docs: Fix badge (#693) --- readme.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 27db199..ed4f6df 100644 --- a/readme.md +++ b/readme.md @@ -383,4 +383,5 @@ kubectl apply -f kubernetes.yml [Size]: https://img.shields.io/docker/image-size/dockurr/windows/latest?color=066da5&label=size [Pulls]: https://img.shields.io/docker/pulls/dockurr/windows.svg?style=flat&label=pulls&logo=docker [Version]: https://img.shields.io/docker/v/dockurr/windows/latest?arch=amd64&sort=semver&color=066da5 -[Package]: https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fraw.githubusercontent.com%2Fipitio%2Fghcr-pulls%2Fmaster%2Findex.json&query=%24%5B%3F(%40.owner%3D%3D%22dockur%22%20%26%26%20%40.repo%3D%3D%22windows%22%20%26%26%20%40.image%3D%3D%22windows%22)%5D.pulls&logo=github&style=flat&color=066da5&label=pulls +[Package]: +https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fraw.githubusercontent.com%2Fipitio%2Fbackage%2Fmaster%2Findex%2Fdockur%2Fwindows%2Fwindows.json&query=%24.downloads&logo=github&style=flat&color=066da5&label=pulls From fd1fe6f5c8adb3a6400685de4e70baec3a61dfa5 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 18 Aug 2024 18:02:59 +0200 Subject: [PATCH 037/290] build: Update VirtIO drivers to v0.1.262 (#697) --- Dockerfile | 12 +- readme.md | 2 +- src/define.sh | 572 +++++++++++++++++++++++-------------------------- src/entry.sh | 2 +- src/install.sh | 17 +- src/mido.sh | 6 +- 6 files changed, 292 insertions(+), 319 deletions(-) diff --git a/Dockerfile b/Dockerfile index 32bc617..4734e92 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:5.16 / / +COPY --from=qemux/qemu-docker:5.18 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" @@ -28,14 +28,14 @@ COPY --chmod=755 ./src /run/ COPY --chmod=755 ./assets /run/assets ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/v0.8/src/wsdd.py /usr/sbin/wsdd -ADD --chmod=664 https://github.com/qemus/virtiso/releases/download/v0.1.248/virtio-win-0.1.248.tar.xz /drivers.txz +ADD --chmod=664 https://github.com/qemus/virtiso/releases/download/v0.1.262/virtio-win-0.1.262.tar.xz /drivers.txz EXPOSE 8006 3389 VOLUME /storage -ENV RAM_SIZE "4G" -ENV CPU_CORES "2" -ENV DISK_SIZE "64G" -ENV VERSION "win11" +ENV RAM_SIZE="4G" +ENV CPU_CORES="2" +ENV DISK_SIZE="64G" +ENV VERSION="win11" ENTRYPOINT ["/usr/bin/tini", "-s", "/run/entry.sh"] diff --git a/readme.md b/readme.md index ed4f6df..5af0cb3 100644 --- a/readme.md +++ b/readme.md @@ -91,7 +91,7 @@ kubectl apply -f kubernetes.yml | `win10` | Windows 10 Pro | 5.7 GB | | `ltsc10` | Windows 10 LTSC | 4.6 GB | | `win10e` | Windows 10 Enterprise | 5.2 GB | - |||| + |||| | `win8` | Windows 8.1 Pro | 4.0 GB | | `win8e` | Windows 8.1 Enterprise | 3.7 GB | | `win7` | Windows 7 Enterprise | 3.0 GB | diff --git a/src/define.sh b/src/define.sh index 7721537..b95717b 100644 --- a/src/define.sh +++ b/src/define.sh @@ -14,7 +14,7 @@ set -Eeuo pipefail : "${USERNAME:=""}" : "${PASSWORD:=""}" -MIRRORS=5 +MIRRORS=4 PLATFORM="x64" parseVersion() { @@ -941,45 +941,6 @@ getLink2() { getLink3() { - local id="$1" - local lang="$2" - local ret="$3" - local url="" - local sum="" - local size="" - local host="https://file.cnxiaobai.com/Windows" - - [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 - - case "${id,,}" in - "core11" ) - size=2159738880 - sum="78f0f44444ff95b97125b43e560a72e0d6ce0a665cf9f5573bf268191e5510c1" - url="%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E5%8C%85/Tiny%2010_11/tiny11%20core%20x64%20beta%201.iso" - ;; - "tiny11" ) - size=3788177408 - sum="a028800a91addc35d8ae22dce7459b67330f7d69d2f11c70f53c0fdffa5b4280" - url="%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E5%8C%85/Tiny%2010_11/tiny11%202311%20x64.iso" - ;; - "tiny10" ) - size=3839819776 - sum="a11116c0645d892d6a5a7c585ecc1fa13aa66f8c7cc6b03bf1f27bd16860cc35" - url="%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85%E5%8C%85/Tiny%2010_11/tiny10%2023H2%20x64.iso" - ;; - esac - - case "${ret,,}" in - "sum" ) echo "$sum" ;; - "size" ) echo "$size" ;; - *) [ -n "$url" ] && echo "$host/$url";; - esac - - return 0 -} - -getLink4() { - # Fallbacks for users who cannot connect to the Microsoft servers local id="$1" @@ -989,98 +950,103 @@ getLink4() { local sum="" local size="" local host="https://drive.massgrave.dev" + local s22="windows_server_2022_updated_july_2024_x64_dvd_fee121d6" + local c11="windows_11_consumer_editions_version_23h2_updated_july_2024_x64_dvd_13e3dd80" + local b11="windows_11_business_editions_version_23h2_updated_july_2024_x64_dvd" + local c10="windows_10_consumer_editions_version_22h2_updated_july_2024_x64_dvd_3245b006" + local b10="windows_10_business_editions_version_22h2_updated_july_2024_x64_dvd" culture=$(getLanguage "$lang" "culture") case "${id,,}" in "win11x64" ) case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "bg" | "bg-"* ) url="bg-bg_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "cs" | "cs-"* ) url="cs-cz_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "da" | "da-"* ) url="da-dk_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "de" | "de-"* ) url="de-de_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "el" | "el-"* ) url="el-gr_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "gb" | "en-gb" ) url="en-gb_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + "ar" | "ar-"* ) url="ar-sa_${c11}.iso" ;; + "bg" | "bg-"* ) url="bg-bg_${c11}.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${c11}.iso" ;; + "da" | "da-"* ) url="da-dk_${c11}.iso" ;; + "de" | "de-"* ) url="de-de_${c11}.iso" ;; + "el" | "el-"* ) url="el-gr_${c11}.iso" ;; + "gb" | "en-gb" ) url="en-gb_${c11}.iso" ;; "en" | "en-"* ) - size=7004780544 - sum="a6c21313210182e0315054789a2b658b77394d5544b69b5341075492f89f51e5" - url="en-us_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "mx" | "es-mx" ) url="es-mx_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "es" | "es-"* ) url="es-es_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "et" | "et-"* ) url="et-ee_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "fi" | "fi-"* ) url="fi-fi_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "fr" | "fr-"* ) url="fr-fr_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "he" | "he-"* ) url="he-il_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "hr" | "hr-"* ) url="hr-hr_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "hu" | "hu-"* ) url="hu-hu_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "it" | "it-"* ) url="it-it_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "ja" | "ja-"* ) url="ja-jp_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "ko" | "ko-"* ) url="ko-kr_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "lt" | "lt-"* ) url="lt-lt_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "lv" | "lv-"* ) url="lv-lv_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "nb" | "nb-"* ) url="nb-no_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "nl" | "nl-"* ) url="nl-nl_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "pl" | "pl-"* ) url="pl-pl_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "br" | "pt-br" ) url="pt-br_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "pt" | "pt-"* ) url="pt-pt_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "ro" | "ro-"* ) url="ro-ro_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "ru" | "ru-"* ) url="ru-ru_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "sk" | "sk-"* ) url="sk-sk_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "sl" | "sl-"* ) url="sl-si_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "sv" | "sv-"* ) url="sv-se_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "th" | "th-"* ) url="th-th_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "tr" | "tr-"* ) url="tr-tr_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "uk" | "uk-"* ) url="uk-ua_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; - "zh" | "zh-"* ) url="zh-cn_windows_11_consumer_editions_version_23h2_updated_april_2024_x64_dvd_d986680b.iso" ;; + size=7165775872 + sum="b84e497c019e95ba9aee9da3d86e679454cba1a426593711f0f4d426f48fc845" + url="en-us_${c11}.iso" ;; + "mx" | "es-mx" ) url="es-mx_${c11}.iso" ;; + "es" | "es-"* ) url="es-es_${c11}.iso" ;; + "et" | "et-"* ) url="et-ee_${c11}.iso" ;; + "fi" | "fi-"* ) url="fi-fi_${c11}.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_${c11}.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${c11}.iso" ;; + "he" | "he-"* ) url="he-il_${c11}.iso" ;; + "hr" | "hr-"* ) url="hr-hr_${c11}.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${c11}.iso" ;; + "it" | "it-"* ) url="it-it_${c11}.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${c11}.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${c11}.iso" ;; + "lt" | "lt-"* ) url="lt-lt_${c11}.iso" ;; + "lv" | "lv-"* ) url="lv-lv_${c11}.iso" ;; + "nb" | "nb-"* ) url="nb-no_${c11}.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${c11}.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${c11}.iso" ;; + "br" | "pt-br" ) url="pt-br_${c11}.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${c11}.iso" ;; + "ro" | "ro-"* ) url="ro-ro_${c11}.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${c11}.iso" ;; + "sk" | "sk-"* ) url="sk-sk_${c11}.iso" ;; + "sl" | "sl-"* ) url="sl-si_${c11}.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_${c11}.iso" ;; + "sv" | "sv-"* ) url="sv-se_${c11}.iso" ;; + "th" | "th-"* ) url="th-th_${c11}.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${c11}.iso" ;; + "uk" | "uk-"* ) url="uk-ua_${c11}.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${c11}.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${c11}.iso" ;; esac ;; "win11x64-enterprise" | "win11x64-enterprise-eval" ) case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_7c2ed97c.iso" ;; - "bg" | "bg-"* ) url="bg-bg_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_b04d691c.iso" ;; - "cs" | "cs-"* ) url="cs-cz_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_a03b763a.iso" ;; - "da" | "da-"* ) url="da-dk_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_b7b16bf7.iso" ;; - "de" | "de-"* ) url="de-de_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_b8a95188.iso" ;; - "el" | "el-"* ) url="el-gr_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_c80dd818.iso" ;; - "gb" | "en-gb" ) url="en-gb_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_0716ab50.iso" ;; + "ar" | "ar-"* ) url="ar-sa_${b11}_39c553d6.iso" ;; + "bg" | "bg-"* ) url="bg-bg_${b11}_eb13b76c.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${b11}_397728ab.iso" ;; + "da" | "da-"* ) url="da-dk_${b11}_4df23c83.iso" ;; + "de" | "de-"* ) url="de-de_${b11}_9a27972d.iso" ;; + "el" | "el-"* ) url="el-gr_${b11}_c8957889.iso" ;; + "gb" | "en-gb" ) url="en-gb_${b11}_deb8a337.iso" ;; "en" | "en-"* ) - size=6879023104 - sum="3d4d388d6ffa371956304fa7401347b4535fd10e3137978a8f7750b790a43521" - url="en-us_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_349cd577.iso" ;; - "mx" | "es-mx" ) url="es-mx_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_79352ef9.iso" ;; - "es" | "es-"* ) url="es-es_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_252a527a.iso" ;; - "et" | "et-"* ) url="et-ee_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_3952b855.iso" ;; - "fi" | "fi-"* ) url="fi-fi_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_a90c9768.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_f4e143d8.iso" ;; - "fr" | "fr-"* ) url="fr-fr_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_9f143fd4.iso" ;; - "he" | "he-"* ) url="he-il_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_767966f8.iso" ;; - "hr" | "hr-"* ) url="hr-hr_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_dcc7bb81.iso" ;; - "hu" | "hu-"* ) url="hu-hu_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_305a2313.iso" ;; - "it" | "it-"* ) url="it-it_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_f0af2584.iso" ;; - "ja" | "ja-"* ) url="ja-jp_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_1b3949b3.iso" ;; - "ko" | "ko-"* ) url="ko-kr_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_b34a9c97.iso" ;; - "lt" | "lt-"* ) url="lt-lt_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_dbab7eb4.iso" ;; - "lv" | "lv-"* ) url="lv-lv_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_55d75975.iso" ;; - "nb" | "nb-"* ) url="nb-no_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_7baab32f.iso" ;; - "nl" | "nl-"* ) url="nl-nl_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_d223773d.iso" ;; - "pl" | "pl-"* ) url="pl-pl_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_55984e5b.iso" ;; - "br" | "pt-br" ) url="pt-br_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_151a4636.iso" ;; - "pt" | "pt-"* ) url="pt-pt_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_37cc9525.iso" ;; - "ro" | "ro-"* ) url="ro-ro_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_9a2982f1.iso" ;; - "ru" | "ru-"* ) url="ru-ru_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_a81ee700.iso" ;; - "sk" | "sk-"* ) url="sk-sk_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_e71e6779.iso" ;; - "sl" | "sl-"* ) url="sl-si_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_d48dc41a.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_86a8483f.iso" ;; - "sv" | "sv-"* ) url="sv-se_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_96fc11d1.iso" ;; - "th" | "th-"* ) url="th-th_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_282dc814.iso" ;; - "tr" | "tr-"* ) url="tr-tr_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_26e6c580.iso" ;; - "uk" | "uk-"* ) url="uk-ua_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_b2d33085.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_6aa057e6.iso" ;; - "zh" | "zh-"* ) url="zh-cn_windows_11_business_editions_version_23h2_updated_april_2024_x64_dvd_3db5a62b.iso" ;; + size=7035154432 + sum="651e02efa8efe5c3ed6f99f91a934604add93d0fa28a5e7e29898d47bc92eba5" + url="en-us_${b11}_5a07b6a4.iso" ;; + "mx" | "es-mx" ) url="es-mx_${b11}_2c5e4da9.iso" ;; + "es" | "es-"* ) url="es-es_${b11}_4fde1bd2.iso" ;; + "et" | "et-"* ) url="et-ee_${b11}_dbdba8e6.iso" ;; + "fi" | "fi-"* ) url="fi-fi_${b11}_84ef21ee.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_${b11}_2cfbb3d3.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${b11}_f922413d.iso" ;; + "he" | "he-"* ) url="he-il_${b11}_277cd23a.iso" ;; + "hr" | "hr-"* ) url="hr-hr_${b11}_65579a9d.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${b11}_3e8637f5.iso" ;; + "it" | "it-"* ) url="it-it_${b11}_da0f0ca1.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${b11}_86b39781.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${b11}_0a970f66.iso" ;; + "lt" | "lt-"* ) url="lt-lt_${b11}_8429ce4c.iso" ;; + "lv" | "lv-"* ) url="lv-lv_${b11}_8eb4a9a7.iso" ;; + "nb" | "nb-"* ) url="nb-no_${b11}_2ebae5cb.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${b11}_6dba664c.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${b11}_829bf56a.iso" ;; + "br" | "pt-br" ) url="pt-br_${b11}_cd555922.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${b11}_ad4cf2e0.iso" ;; + "ro" | "ro-"* ) url="ro-ro_${b11}_2340f750.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${b11}_4207eb9f.iso" ;; + "sk" | "sk-"* ) url="sk-sk_${b11}_a1ba40e5.iso" ;; + "sl" | "sl-"* ) url="sl-si_${b11}_282cc939.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_${b11}_b4915859.iso" ;; + "sv" | "sv-"* ) url="sv-se_${b11}_879e706a.iso" ;; + "th" | "th-"* ) url="th-th_${b11}_f51e12b1.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${b11}_b52351ad.iso" ;; + "uk" | "uk-"* ) url="uk-ua_${b11}_4a9948b3.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${b11}_75853f9b.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${b11}_8c3fbaa8.iso" ;; esac ;; "win11x64-iot" | "win11x64-enterprise-iot-eval" ) @@ -1097,92 +1063,92 @@ getLink4() { ;; "win10x64" ) case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "bg" | "bg-"* ) url="bg-bg_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "cs" | "cs-"* ) url="cs-cz_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "da" | "da-"* ) url="da-dk_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "de" | "de-"* ) url="de-de_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "el" | "el-"* ) url="el-gr_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "gb" | "en-gb" ) url="en-gb_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + "ar" | "ar-"* ) url="ar-sa_${c10}.iso" ;; + "bg" | "bg-"* ) url="bg-bg_${c10}.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${c10}.iso" ;; + "da" | "da-"* ) url="da-dk_${c10}.iso" ;; + "de" | "de-"* ) url="de-de_${c10}.iso" ;; + "el" | "el-"* ) url="el-gr_${c10}.iso" ;; + "gb" | "en-gb" ) url="en-gb_${c10}.iso" ;; "en" | "en-"* ) - size=6605459456 - sum="b072627c9b8d9f62af280faf2a8b634376f91dc73ea1881c81943c151983aa4a" - url="en-us_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "mx" | "es-mx" ) url="es-mx_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "es" | "es-"* ) url="es-es_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "et" | "et-"* ) url="et-ee_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "fi" | "fi-"* ) url="fi-fi_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "fr" | "fr-"* ) url="fr-fr_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "he" | "he-"* ) url="he-il_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "hr" | "hr-"* ) url="hr-hr_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "hu" | "hu-"* ) url="hu-hu_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "it" | "it-"* ) url="it-it_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "ja" | "ja-"* ) url="ja-jp_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "ko" | "ko-"* ) url="ko-kr_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "lt" | "lt-"* ) url="lt-lt_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "lv" | "lv-"* ) url="lv-lv_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "nb" | "nb-"* ) url="nb-no_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "nl" | "nl-"* ) url="nl-nl_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "pl" | "pl-"* ) url="pl-pl_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "br" | "pt-br" ) url="pt-br_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "pt" | "pt-"* ) url="pt-pt_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "ro" | "ro-"* ) url="ro-ro_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "ru" | "ru-"* ) url="ru-ru_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "sk" | "sk-"* ) url="sk-sk_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "sl" | "sl-"* ) url="sl-si_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "sv" | "sv-"* ) url="sv-se_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "th" | "th-"* ) url="th-th_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "tr" | "tr-"* ) url="tr-tr_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "uk" | "uk-"* ) url="uk-ua_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; - "zh" | "zh-"* ) url="zh-cn_windows_10_consumer_editions_version_22h2_updated_april_2024_x64_dvd_9a92dc89.iso" ;; + size=7151144960 + sum="2eda4701d3e4061eccfdf0ad264b69392e67e2a29fef9eb7d7a57150b08e87e0" + url="en-us_${c10}.iso" ;; + "mx" | "es-mx" ) url="es-mx_${c10}.iso" ;; + "es" | "es-"* ) url="es-es_${c10}.iso" ;; + "et" | "et-"* ) url="et-ee_${c10}.iso" ;; + "fi" | "fi-"* ) url="fi-fi_${c10}.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_${c10}.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${c10}.iso" ;; + "he" | "he-"* ) url="he-il_${c10}.iso" ;; + "hr" | "hr-"* ) url="hr-hr_${c10}.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${c10}.iso" ;; + "it" | "it-"* ) url="it-it_${c10}.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${c10}.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${c10}.iso" ;; + "lt" | "lt-"* ) url="lt-lt_${c10}.iso" ;; + "lv" | "lv-"* ) url="lv-lv_${c10}.iso" ;; + "nb" | "nb-"* ) url="nb-no_${c10}.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${c10}.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${c10}.iso" ;; + "br" | "pt-br" ) url="pt-br_${c10}.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${c10}.iso" ;; + "ro" | "ro-"* ) url="ro-ro_${c10}.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${c10}.iso" ;; + "sk" | "sk-"* ) url="sk-sk_${c10}.iso" ;; + "sl" | "sl-"* ) url="sl-si_${c10}.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_${c10}.iso" ;; + "sv" | "sv-"* ) url="sv-se_${c10}.iso" ;; + "th" | "th-"* ) url="th-th_${c10}.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${c10}.iso" ;; + "uk" | "uk-"* ) url="uk-ua_${c10}.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${c10}.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${c10}.iso" ;; esac ;; "win10x64-enterprise" | "win10x64-enterprise-eval" ) case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_4453f818.iso" ;; - "bg" | "bg-"* ) url="bg-bg_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_1777c1d1.iso" ;; - "cs" | "cs-"* ) url="cs-cz_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_c57cc386.iso" ;; - "da" | "da-"* ) url="da-dk_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_45f3ae0c.iso" ;; - "de" | "de-"* ) url="de-de_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_8042d5ca.iso" ;; - "el" | "el-"* ) url="el-gr_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_60cc062b.iso" ;; - "gb" | "en-gb" ) url="en-gb_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_da84fbf3.iso" ;; + "ar" | "ar-"* ) url="ar-sa_${b10}_c297cc0d.iso" ;; + "bg" | "bg-"* ) url="bg-bg_${b10}_30c9ad0e.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${b10}_0a65fb0a.iso" ;; + "da" | "da-"* ) url="da-dk_${b10}_57521eab.iso" ;; + "de" | "de-"* ) url="de-de_${b10}_9beb944c.iso" ;; + "el" | "el-"* ) url="el-gr_${b10}_4f7921a5.iso" ;; + "gb" | "en-gb" ) url="en-gb_${b10}_77325f32.iso" ;; "en" | "en-"* ) - size=6428377088 - sum="05fe9de04c2626bd00fbe69ad19129b2dbb75a93a2fe030ebfb2256d937ceab8" - url="en-us_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_c00090a7.iso" ;; - "mx" | "es-mx" ) url="es-mx_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_87806b10.iso" ;; - "es" | "es-"* ) url="es-es_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_a464088d.iso" ;; - "et" | "et-"* ) url="et-ee_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_bd09a0ce.iso" ;; - "fi" | "fi-"* ) url="fi-fi_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_4d76cfbd.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_40643c76.iso" ;; - "fr" | "fr-"* ) url="fr-fr_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_8ca89ac8.iso" ;; - "he" | "he-"* ) url="he-il_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_804bcaf0.iso" ;; - "hr" | "hr-"* ) url="hr-hr_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_4c4f5b26.iso" ;; - "hu" | "hu-"* ) url="hu-hu_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_43302dfb.iso" ;; - "it" | "it-"* ) url="it-it_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_73996e82.iso" ;; - "ja" | "ja-"* ) url="ja-jp_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_0aaece93.iso" ;; - "ko" | "ko-"* ) url="ko-kr_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_37654eaa.iso" ;; - "lt" | "lt-"* ) url="lt-lt_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_83c6a9b7.iso" ;; - "lv" | "lv-"* ) url="lv-lv_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_2b80cd3c.iso" ;; - "nb" | "nb-"* ) url="nb-no_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_2a274012.iso" ;; - "nl" | "nl-"* ) url="nl-nl_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_5eae56c5.iso" ;; - "pl" | "pl-"* ) url="pl-pl_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_6497a429.iso" ;; - "br" | "pt-br" ) url="pt-br_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_de63f2f7.iso" ;; - "pt" | "pt-"* ) url="pt-pt_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_a95933fb.iso" ;; - "ro" | "ro-"* ) url="ro-ro_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_d008e588.iso" ;; - "ru" | "ru-"* ) url="ru-ru_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_12b02d35.iso" ;; - "sk" | "sk-"* ) url="sk-sk_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_7caf6b4f.iso" ;; - "sl" | "sl-"* ) url="sl-si_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_e1e76668.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_b72c40ce.iso" ;; - "sv" | "sv-"* ) url="sv-se_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_4800fcd8.iso" ;; - "th" | "th-"* ) url="th-th_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_5077fb45.iso" ;; - "tr" | "tr-"* ) url="tr-tr_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_7703a6c4.iso" ;; - "uk" | "uk-"* ) url="uk-ua_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_37caf402.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_35f0e5a7.iso" ;; - "zh" | "zh-"* ) url="zh-cn_windows_10_business_editions_version_22h2_updated_april_2024_x64_dvd_a2873093.iso" ;; + size=6978310144 + sum="7847abd6f39abd02dc8089c4177d354f9eb66fa0ee2fe8ae20e596e675d1ab67" + url="en-us_${b10}_c004521a.iso" ;; + "mx" | "es-mx" ) url="es-mx_${b10}_56d48916.iso" ;; + "es" | "es-"* ) url="es-es_${b10}_4e057a75.iso" ;; + "et" | "et-"* ) url="et-ee_${b10}_8e8c70da.iso" ;; + "fi" | "fi-"* ) url="fi-fi_${b10}_023ba9da.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_${b10}_e4b0fd01.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${b10}_8a45f12e.iso" ;; + "he" | "he-"* ) url="he-il_${b10}_8ce094aa.iso" ;; + "hr" | "hr-"* ) url="hr-hr_${b10}_668d9ec4.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${b10}_7f70b22c.iso" ;; + "it" | "it-"* ) url="it-it_${b10}_3c49c82b.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${b10}_383799d9.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${b10}_f0249763.iso" ;; + "lt" | "lt-"* ) url="lt-lt_${b10}_a13593c6.iso" ;; + "lv" | "lv-"* ) url="lv-lv_${b10}_4a00695c.iso" ;; + "nb" | "nb-"* ) url="nb-no_${b10}_c949d1f1.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${b10}_bb1f8a40.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${b10}_26b503cc.iso" ;; + "br" | "pt-br" ) url="pt-br_${b10}_10757645.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${b10}_07f873cd.iso" ;; + "ro" | "ro-"* ) url="ro-ro_${b10}_e2c973f8.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${b10}_e86552ca.iso" ;; + "sk" | "sk-"* ) url="sk-sk_${b10}_03d84a11.iso" ;; + "sl" | "sl-"* ) url="sl-si_${b10}_ad745ec0.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_${b10}_36a086b8.iso" ;; + "sv" | "sv-"* ) url="sv-se_${b10}_756d5d5b.iso" ;; + "th" | "th-"* ) url="th-th_${b10}_cf4bb364.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${b10}_3ceed34b.iso" ;; + "uk" | "uk-"* ) url="uk-ua_${b10}_e6a5235d.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${b10}_fac0f45b.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${b10}_53d015e8.iso" ;; esac ;; "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) @@ -1307,129 +1273,129 @@ getLink4() { ;; "win2022" | "win2022-eval" ) case "${culture,,}" in - "cs" | "cs-"* ) url="cs-cz_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "de" | "de-"* ) url="de-de_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${s22}.iso" ;; + "de" | "de-"* ) url="de-de_${s22}.iso" ;; "en" | "en-"* ) - size=5515755520 - sum="7f41d603224e8a0bf34ba957d3abf0a02437ab75000dd758b5ce3f050963e91f" - url="en-us_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "es" | "es-"* ) url="es-es_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "fr" | "fr-"* ) url="fr-fr_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "hu" | "hu-"* ) url="hu-hu_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "it" | "it-"* ) url="it-it_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "ja" | "ja-"* ) url="ja-jp_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "ko" | "ko-"* ) url="ko-kr_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "nl" | "nl-"* ) url="nl-nl_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "pl" | "pl-"* ) url="pl-pl_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "br" | "pt-br" ) url="pt-br_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "pt" | "pt-"* ) url="pt-pt_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "ru" | "ru-"* ) url="ru-ru_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "sv" | "sv-"* ) url="sv-se_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "tr" | "tr-"* ) url="tr-tr_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; - "zh" | "zh-"* ) url="zh-cn_windows_server_2022_updated_april_2024_x64_dvd_164349f3.iso" ;; + size=5933062144 + sum="5b6c4fab1027ed15cbd4179b8a41b184304ba362fa0053b3bad6ac070ee74281" + url="en-us_${s22}.iso" ;; + "es" | "es-"* ) url="es-es_${s22}.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${s22}.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${s22}.iso" ;; + "it" | "it-"* ) url="it-it_${s22}.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${s22}.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${s22}.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${s22}.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${s22}.iso" ;; + "br" | "pt-br" ) url="pt-br_${s22}.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${s22}.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${s22}.iso" ;; + "sv" | "sv-"* ) url="sv-se_${s22}.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${s22}.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${s22}.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${s22}.iso" ;; esac ;; "win2019" | "win2019-eval" ) case "${culture,,}" in - "cs" | "cs-"* ) url="cs_windows_server_2019_x64_dvd_65383121.iso" ;; - "de" | "de-"* ) url="de_windows_server_2019_x64_dvd_17559a5b.iso" ;; + "cs" | "cs-"* ) url="cs-cz_windows_server_2019_x64_dvd_3781c31c.iso" ;; + "de" | "de-"* ) url="de-de_windows_server_2019_x64_dvd_132f7aa4.iso" ;; "en" | "en-"* ) - size=4843268096 - sum="4c5dd63efee50117986a2e38d4b3a3fbaf3c1c15e2e7ea1d23ef9d8af148dd2d" - url="en_windows_server_2019_x64_dvd_4cb967d8.iso" ;; - "es" | "es-"* ) url="es_windows_server_2019_x64_dvd_dd6b7747.iso" ;; - "fr" | "fr-"* ) url="fr_windows_server_2019_x64_dvd_d936fc7a.iso" ;; - "hu" | "hu-"* ) url="hu_windows_server_2019_x64_dvd_c8f2c460.iso" ;; - "it" | "it-"* ) url="it_windows_server_2019_x64_dvd_03c34df6.iso" ;; - "ja" | "ja-"* ) url="ja_windows_server_2019_x64_dvd_260a1d93.iso" ;; - "ko" | "ko-"* ) url="ko_windows_server_2019_x64_dvd_8778047d.iso" ;; - "nl" | "nl-"* ) url="nl_windows_server_2019_x64_dvd_82f9a152.iso" ;; - "pl" | "pl-"* ) url="pl_windows_server_2019_x64_dvd_2cd7adba.iso" ;; - "br" | "pt-br" ) url="pt_windows_server_2019_x64_dvd_e078dea6.iso" ;; - "pt" | "pt-"* ) url="pp_windows_server_2019_x64_dvd_e8fadd22.iso" ;; - "ru" | "ru-"* ) url="ru_windows_server_2019_x64_dvd_3411c84a.iso" ;; - "sv" | "sv-"* ) url="sv_windows_server_2019_x64_dvd_ce3d1a8d.iso" ;; - "tr" | "tr-"* ) url="tr_windows_server_2019_x64_dvd_475b2d44.iso" ;; - "zh-hk" | "zh-tw" ) url="ct_windows_server_2019_x64_dvd_b776f44b.iso" ;; - "zh" | "zh-"* ) url="cn_windows_server_2019_x64_dvd_4de40f33.iso" ;; + size=5651695616 + sum="ea247e5cf4df3e5829bfaaf45d899933a2a67b1c700a02ee8141287a8520261c" + url="en-us_windows_server_2019_x64_dvd_f9475476.iso" ;; + "es" | "es-"* ) url="es-es_windows_server_2019_x64_dvd_3ce0fd9e.iso" ;; + "fr" | "fr-"* ) url="fr-fr_windows_server_2019_x64_dvd_f6f6acf6.iso" ;; + "hu" | "hu-"* ) url="hu-hu_windows_server_2019_x64_dvd_1d834c46.iso" ;; + "it" | "it-"* ) url="it-it_windows_server_2019_x64_dvd_454267de.iso" ;; + "ja" | "ja-"* ) url="ja-jp_windows_server_2019_x64_dvd_3899c3a3.iso" ;; + "ko" | "ko-"* ) url="ko-kr_windows_server_2019_x64_dvd_84101c0a.iso" ;; + "nl" | "nl-"* ) url="nl-nl_windows_server_2019_x64_dvd_f69d914e.iso" ;; + "pl" | "pl-"* ) url="pl-pl_windows_server_2019_x64_dvd_a50263e1.iso" ;; + "br" | "pt-br" ) url="pt-br_windows_server_2019_x64_dvd_aee8c1c2.iso" ;; + "pt" | "pt-"* ) url="pt-pt_windows_server_2019_x64_dvd_464373e8.iso" ;; + "ru" | "ru-"* ) url="ru-ru_windows_server_2019_x64_dvd_e02b76ba.iso" ;; + "sv" | "sv-"* ) url="sv-se_windows_server_2019_x64_dvd_48c1aeff.iso" ;; + "tr" | "tr-"* ) url="tr-tr_windows_server_2019_x64_dvd_b51af600.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_windows_server_2019_x64_dvd_a4c80409.iso" ;; + "zh" | "zh-"* ) url="zh-cn_windows_server_2019_x64_dvd_19d65722.iso" ;; esac ;; "win2016" | "win2016-eval" ) case "${culture,,}" in - "cs" | "cs-"* ) url="cs_windows_server_2016_x64_dvd_9327749.iso" ;; - "de" | "de-"* ) url="de_windows_server_2016_x64_dvd_9327757.iso" ;; + "cs" | "cs-"* ) url="cs_windows_server_2016_vl_x64_dvd_11636699.iso" ;; + "de" | "de-"* ) url="de_windows_server_2016_vl_x64_dvd_11636696.iso" ;; "en" | "en-"* ) - size=5653628928 - sum="4caeb24b661fcede81cd90661aec31aa69753bf49a5ac247253dd021bc1b5cbb" - url="en_windows_server_2016_x64_dvd_9327751.iso" ;; - "es" | "es-"* ) url="es_windows_server_2016_x64_dvd_9327767.iso" ;; - "fr" | "fr-"* ) url="fr_windows_server_2016_x64_dvd_9327754.iso" ;; - "hu" | "hu-"* ) url="hu_windows_server_2016_x64_dvd_9327759.iso" ;; - "it" | "it-"* ) url="it_windows_server_2016_x64_dvd_9327760.iso" ;; - "ja" | "ja-"* ) url="ja_windows_server_2016_x64_dvd_9327761.iso" ;; - "ko" | "ko-"* ) url="ko_windows_server_2016_x64_dvd_9327762.iso" ;; - "nl" | "nl-"* ) url="nl_windows_server_2016_x64_dvd_9327750.iso" ;; - "pl" | "pl-"* ) url="pl_windows_server_2016_x64_dvd_9327763.iso" ;; - "br" | "pt-br" ) url="pt_windows_server_2016_x64_dvd_9327764.iso" ;; - "pt" | "pt-"* ) url="pp_windows_server_2016_x64_dvd_9327765.iso" ;; - "ru" | "ru-"* ) url="ru_windows_server_2016_x64_dvd_9327766.iso" ;; - "sv" | "sv-"* ) url="sv_windows_server_2016_x64_dvd_9327768.iso" ;; - "tr" | "tr-"* ) url="tr_windows_server_2016_x64_dvd_9327769.iso" ;; - "zh-hk" | "zh-tw" ) url="ct_windows_server_2016_x64_dvd_9327748.iso" ;; - "zh" | "zh-"* ) url="cn_windows_server_2016_x64_dvd_9327743.iso" ;; + size=6003804160 + sum="47919ce8b4993f531ca1fa3f85941f4a72b47ebaa4d3a321fecf83ca9d17e6b8" + url="en_windows_server_2016_vl_x64_dvd_11636701.iso" ;; + "es" | "es-"* ) url="es_windows_server_2016_vl_x64_dvd_11636712.iso" ;; + "fr" | "fr-"* ) url="fr_windows_server_2016_vl_x64_dvd_11636729.iso" ;; + "hu" | "hu-"* ) url="hu_windows_server_2016_vl_x64_dvd_11636720.iso" ;; + "it" | "it-"* ) url="it_windows_server_2016_vl_x64_dvd_11636710.iso" ;; + "ja" | "ja-"* ) url="ja_windows_server_2016_vl_x64_dvd_11645964.iso" ;; + "ko" | "ko-"* ) url="ko_windows_server_2016_vl_x64_dvd_11636709.iso" ;; + "nl" | "nl-"* ) url="nl_windows_server_2016_vl_x64_dvd_11636731.iso" ;; + "pl" | "pl-"* ) url="pl_windows_server_2016_vl_x64_dvd_11636719.iso" ;; + "br" | "pt-br" ) url="pt_windows_server_2016_vl_x64_dvd_11636697.iso" ;; + "pt" | "pt-"* ) url="pp_windows_server_2016_vl_x64_dvd_11637454.iso" ;; + "ru" | "ru-"* ) url="ru_windows_server_2016_vl_x64_dvd_11636694.iso" ;; + "sv" | "sv-"* ) url="sv_windows_server_2016_vl_x64_dvd_11636706.iso" ;; + "tr" | "tr-"* ) url="tr_windows_server_2016_vl_x64_dvd_11636725.iso" ;; + "zh-hk" | "zh-tw" ) url="ct_windows_server_2016_vl_x64_dvd_11636717.iso" ;; + "zh" | "zh-"* ) url="cn_windows_server_2016_vl_x64_dvd_11636695.iso" ;; esac ;; "win2012r2" | "win2012r2-eval" ) case "${culture,,}" in - "cs" | "cs-"* ) url="cs_windows_server_2012_r2_with_update_x64_dvd_6052695.iso" ;; - "de" | "de-"* ) url="de_windows_server_2012_r2_with_update_x64_dvd_6052720.iso" ;; + "cs" | "cs-"* ) url="cs_windows_server_2012_r2_vl_with_update_x64_dvd_6052752.iso" ;; + "de" | "de-"* ) url="de_windows_server_2012_r2_vl_with_update_x64_dvd_6052780.iso" ;; "en" | "en-"* ) - size=5397889024 - sum="f351e89eb88a96af4626ceb3450248b8573e3ed5924a4e19ea891e6003b62e4e" - url="en_windows_server_2012_r2_with_update_x64_dvd_6052708.iso" ;; - "es" | "es-"* ) url="es_windows_server_2012_r2_with_update_x64_dvd_6052769.iso" ;; - "fr" | "fr-"* ) url="fr_windows_server_2012_r2_with_update_x64_dvd_6052713.iso" ;; - "hu" | "hu-"* ) url="hu_windows_server_2012_r2_with_update_x64_dvd_6052727.iso" ;; - "it" | "it-"* ) url="it_windows_server_2012_r2_with_update_x64_dvd_6052734.iso" ;; - "ja" | "ja-"* ) url="ja_windows_server_2012_r2_with_update_x64_dvd_6052738.iso" ;; - "ko" | "ko-"* ) url="ko_windows_server_2012_r2_with_update_x64_dvd_6052743.iso" ;; - "nl" | "nl-"* ) url="nl_windows_server_2012_r2_with_update_x64_dvd_6052701.iso" ;; - "pl" | "pl-"* ) url="pl_windows_server_2012_r2_with_update_x64_dvd_6052749.iso" ;; - "br" | "pt-br" ) url="pt_windows_server_2012_r2_with_update_x64_dvd_6052754.iso" ;; - "pt" | "pt-"* ) url="pp_windows_server_2012_r2_with_update_x64_dvd_6052758.iso" ;; - "ru" | "ru-"* ) url="ru_windows_server_2012_r2_with_update_x64_dvd_6052763.iso" ;; - "sv" | "sv-"* ) url="sv_windows_server_2012_r2_with_update_x64_dvd_6052773.iso" ;; - "tr" | "tr-"* ) url="tr_windows_server_2012_r2_with_update_x64_dvd_6052778.iso" ;; - "zh-hk" ) url="hk_windows_server_2012_r2_with_update_x64_dvd_6052731.iso" ;; - "zh-tw" ) url="tw_windows_server_2012_r2_with_update_x64_dvd_6052736.iso" ;; - "zh" | "zh-"* ) url="cn_windows_server_2012_r2_with_update_x64_dvd_6052725.iso" ;; + size=5400115200 + sum="0e883ce28eb5c6f58a3a3007be978d43edb1035a4585506c1c4504c9e143408d" + url="en_windows_server_2012_r2_vl_with_update_x64_dvd_6052766.iso" ;; + "es" | "es-"* ) url="es_windows_server_2012_r2_vl_with_update_x64_dvd_6052831.iso" ;; + "fr" | "fr-"* ) url="fr_windows_server_2012_r2_vl_with_update_x64_dvd_6052772.iso" ;; + "hu" | "hu-"* ) url="hu_windows_server_2012_r2_vl_with_update_x64_dvd_6052786.iso" ;; + "it" | "it-"* ) url="it_windows_server_2012_r2_vl_with_update_x64_dvd_6052792.iso" ;; + "ja" | "ja-"* ) url="ja_windows_server_2012_r2_vl_with_update_x64_dvd_6052800.iso" ;; + "ko" | "ko-"* ) url="ko_windows_server_2012_r2_vl_with_update_x64_dvd_6052806.iso" ;; + "nl" | "nl-"* ) url="nl_windows_server_2012_r2_vl_with_update_x64_dvd_6052760.iso" ;; + "pl" | "pl-"* ) url="pl_windows_server_2012_r2_vl_with_update_x64_dvd_6052815.iso" ;; + "br" | "pt-br" ) url="pt_windows_server_2012_r2_vl_with_update_x64_dvd_6052819.iso" ;; + "pt" | "pt-"* ) url="pp_windows_server_2012_r2_vl_with_update_x64_dvd_6052823.iso" ;; + "ru" | "ru-"* ) url="ru_windows_server_2012_r2_vl_with_update_x64_dvd_6052827.iso" ;; + "sv" | "sv-"* ) url="sv_windows_server_2012_r2_vl_with_update_x64_dvd_6052835.iso" ;; + "tr" | "tr-"* ) url="tr_windows_server_2012_r2_vl_with_update_x64_dvd_6052838.iso" ;; + "zh-hk" ) url="hk_windows_server_2012_r2_vl_with_update_x64_dvd_6052739.iso" ;; + "zh-tw" ) url="tw_windows_server_2012_r2_vl_with_update_x64_dvd_6052746.iso" ;; + "zh" | "zh-"* ) url="cn_windows_server_2012_r2_vl_with_update_x64_dvd_6052729.iso" ;; esac ;; "win2008r2" | "win2008r2-eval" ) case "${culture,,}" in - "cs" | "cs-"* ) url="cs_windows_server_2008_r2_with_sp1_x64_dvd_617602.iso" ;; - "de" | "de-"* ) url="de_windows_server_2008_r2_with_sp1_x64_dvd_617380.iso" ;; + "cs" | "cs-"* ) url="cs_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617402.iso" ;; + "de" | "de-"* ) url="de_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617404.iso" ;; "en" | "en-"* ) - size=3166584832 - sum="dfd9890881b7e832a927c38310fb415b7ea62ac5a896671f2ce2a111998f0df8" - url="en_windows_server_2008_r2_with_sp1_x64_dvd_617601.iso" ;; - "es" | "es-"* ) url="es_windows_server_2008_r2_with_sp1_x64_dvd_617398.iso" ;; - "fr" | "fr-"* ) url="fr_windows_server_2008_r2_with_sp1_x64_dvd_617591.iso" ;; - "hu" | "hu-"* ) url="hu_windows_server_2008_r2_with_sp1_x64_dvd_617383.iso" ;; - "it" | "it-"* ) url="it_windows_server_2008_r2_with_sp1_x64_dvd_617391.iso" ;; - "ja" | "ja-"* ) url="ja_windows_server_2008_r2_with_sp1_x64_dvd_617387.iso" ;; - "ko" | "ko-"* ) url="ko_windows_server_2008_r2_with_sp1_x64_dvd_617385.iso" ;; - "nl" | "nl-"* ) url="nl_windows_server_2008_r2_with_sp1_x64_dvd_617597.iso" ;; - "pl" | "pl-"* ) url="pl_windows_server_2008_r2_with_sp1_x64_dvd_617388.iso" ;; - "br" | "pt-br" ) url="pt_windows_server_2008_r2_with_sp1_x64_dvd_617599.iso" ;; - "pt" | "pt-"* ) url="pp_windows_server_2008_r2_with_sp1_x64_dvd_617382.iso" ;; - "ru" | "ru-"* ) url="ru_windows_server_2008_r2_with_sp1_x64_dvd_617389.iso" ;; - "sv" | "sv-"* ) url="sv_windows_server_2008_r2_with_sp1_x64_dvd_617393.iso" ;; - "tr" | "tr-"* ) url="tr_windows_server_2008_r2_with_sp1_x64_dvd_617390.iso" ;; - "zh-hk" ) url="hk_windows_server_2008_r2_with_sp1_x64_dvd_617586.iso" ;; - "zh-tw" ) url="tw_windows_server_2008_r2_with_sp1_x64_dvd_617595.iso" ;; - "zh" | "zh-"* ) url="cn_windows_server_2008_r2_with_sp1_x64_dvd_617598.iso" ;; + size=3166720000 + sum="9b0cd5b11cc2e92badb74450f0cac03006d3c63a2ada36cb1eb95c1bf4b2608f" + url="en_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617403.iso" ;; + "es" | "es-"* ) url="es_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617410.iso" ;; + "fr" | "fr-"* ) url="fr_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617392.iso" ;; + "hu" | "hu-"* ) url="hu_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617415.iso" ;; + "it" | "it-"* ) url="it_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_619596.iso" ;; + "ja" | "ja-"* ) url="ja_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_631466.iso" ;; + "ko" | "ko-"* ) url="ko_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617409.iso" ;; + "nl" | "nl-"* ) url="nl_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617395.iso" ;; + "pl" | "pl-"* ) url="pl_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617397.iso" ;; + "br" | "pt-br" ) url="pt_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617394.iso" ;; + "pt" | "pt-"* ) url="pp_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617411.iso" ;; + "ru" | "ru-"* ) url="ru_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617421.iso" ;; + "sv" | "sv-"* ) url="sv_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617400.iso" ;; + "tr" | "tr-"* ) url="tr_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617416.iso" ;; + "zh-hk" ) url="hk_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617386.iso" ;; + "zh-tw" ) url="tw_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617405.iso" ;; + "zh" | "zh-"* ) url="cn_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617396.iso" ;; esac ;; "win7x64" | "win7x64-enterprise" ) @@ -1820,7 +1786,7 @@ getLink4() { return 0 } -getLink5() { +getLink4() { local id="$1" local lang="$2" diff --git a/src/entry.sh b/src/entry.sh index c964635..b037cdc 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -30,7 +30,7 @@ info "Booting ${APP}${BOOT_DESC} using QEMU v$version..." (( rc != 0 )) && error "$(<"$QEMU_LOG")" && exit 15 terminal -( sleep 10; boot ) & +( sleep 30; boot ) & tail -fn +0 "$QEMU_LOG" 2>/dev/null & cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" & wait $! || : diff --git a/src/install.sh b/src/install.sh index b8cd8cf..ac051ff 100644 --- a/src/install.sh +++ b/src/install.sh @@ -620,7 +620,7 @@ updateXML() { [ -z "$YRES" ] && YRES="720" [ -z "$XRES" ] && XRES="1280" - + sed -i "s/<VerticalResolution>1080<\/VerticalResolution>/<VerticalResolution>$YRES<\/VerticalResolution>/g" "$asset" sed -i "s/<HorizontalResolution>1920<\/HorizontalResolution>/<HorizontalResolution>$XRES<\/HorizontalResolution>/g" "$asset" @@ -683,7 +683,7 @@ addDriver() { "win81x64"* ) folder="w8.1/amd64" ;; "win10x64"* ) folder="w10/amd64" ;; "win11x64"* ) folder="w11/amd64" ;; - "win2025"* ) folder="w11/amd64" ;; + "win2025"* ) folder="2k25/amd64" ;; "win2022"* ) folder="2k22/amd64" ;; "win2019"* ) folder="2k19/amd64" ;; "win2016"* ) folder="2k16/amd64" ;; @@ -701,9 +701,16 @@ addDriver() { [ ! -d "$path/$driver/$folder" ] && return 0 - if [[ "${id,,}" == "winvista"* ]]; then - [[ "${driver,,}" == "viorng" ]] && return 0 - fi + case "${id,,}" in + "winvista"* ) + [[ "${driver,,}" == "viorng" ]] && return 0 + ;; + "win2025"* | "win11x64-iot"* | "win11x64-ltsc"* ) + [[ "${driver,,}" == "smbus" ]] && return 0 + [[ "${driver,,}" == "pvpanic" ]] && return 0 + [[ "${driver,,}" == "viogpudo" ]] && return 0 + ;; + esac local dest="$path/$target/$driver" mv "$path/$driver/$folder" "$dest" diff --git a/src/mido.sh b/src/mido.sh index 897542d..8773263 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -191,10 +191,10 @@ download_windows_eval() { windows_version="windows-11-enterprise" ;; "win11${PLATFORM,,}-enterprise-iot-eval" ) enterprise_type="iot" - windows_version="windows-11-iot-enterprise-ltsc" ;; + windows_version="windows-11-iot-enterprise-ltsc-eval" ;; "win11${PLATFORM,,}-enterprise-ltsc-eval" ) enterprise_type="iot" - windows_version="windows-11-iot-enterprise-ltsc" ;; + windows_version="windows-11-iot-enterprise-ltsc-eval" ;; "win10${PLATFORM,,}-enterprise-eval" ) enterprise_type="enterprise" windows_version="windows-10-enterprise" ;; @@ -548,7 +548,7 @@ downloadFile() { if (( rc == 0 )) && [ -f "$iso" ]; then total=$(stat -c%s "$iso") if [ "$total" -lt 100000000 ]; then - error "Downloaded ISO is only $total bytes?" && return 1 + error "Invalid download link: $url (is only $total bytes?). Please report this issue." && return 1 fi ! verifyFile "$iso" "$size" "$total" "$sum" && return 1 html "Download finished successfully..." && return 0 From cac5196c0976e0098da89ddb7503c672d860a8fc Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 27 Aug 2024 18:30:29 +0200 Subject: [PATCH 038/290] docs: Update package URL (#716) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 5af0cb3..7054e6b 100644 --- a/readme.md +++ b/readme.md @@ -384,4 +384,4 @@ kubectl apply -f kubernetes.yml [Pulls]: https://img.shields.io/docker/pulls/dockurr/windows.svg?style=flat&label=pulls&logo=docker [Version]: https://img.shields.io/docker/v/dockurr/windows/latest?arch=amd64&sort=semver&color=066da5 [Package]: -https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fraw.githubusercontent.com%2Fipitio%2Fbackage%2Fmaster%2Findex%2Fdockur%2Fwindows%2Fwindows.json&query=%24.downloads&logo=github&style=flat&color=066da5&label=pulls +https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fipitio.github.io%2Fbackage%2Fdockur%2Fwindows%2Fwindows.json&query=%24.downloads&logo=github&style=flat&color=066da5&label=pulls From c3177e279a37198d36696461ca2853d068ae83db Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 28 Aug 2024 13:14:09 +0200 Subject: [PATCH 039/290] fix: Update Win10 checksum (#717) --- src/define.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/define.sh b/src/define.sh index b95717b..1706a31 100644 --- a/src/define.sh +++ b/src/define.sh @@ -740,8 +740,8 @@ getLink1() { url="11/26100.1.240331-1435.ge_release_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" ;; "win10x64" | "win10x64-enterprise" | "win10x64-enterprise-eval" ) - size=5675616256 - sum="99c13b3afb1375661fc79496025cabe3f9ef5a555fc8ea767a48937b0f4bcace" + size=5623582720 + sum="57371545d752a79a8a8b163b209c7028915da661de83516e06ddae913290a855" url="10/en-us_windows_10_22h2_x64.iso" ;; "win10x64-iot" | "win10x64-enterprise-iot-eval" ) From a2a8ad8243935118877df966c5c06cc1f954b837 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 5 Sep 2024 20:03:34 +0200 Subject: [PATCH 040/290] fix: Update download mirrors (#729) --- Dockerfile | 4 +- readme.md | 3 +- src/define.sh | 259 ++++++++++++++++++-------------------------------- src/mido.sh | 2 +- 4 files changed, 95 insertions(+), 173 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4734e92..dc0e068 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:5.18 / / +COPY --from=qemux/qemu-docker:6.00 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" @@ -28,7 +28,7 @@ COPY --chmod=755 ./src /run/ COPY --chmod=755 ./assets /run/assets ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/v0.8/src/wsdd.py /usr/sbin/wsdd -ADD --chmod=664 https://github.com/qemus/virtiso/releases/download/v0.1.262/virtio-win-0.1.262.tar.xz /drivers.txz +ADD --chmod=664 https://github.com/qemus/virtiso/releases/download/v0.1.262-2/virtio-win-0.1.262.tar.xz /drivers.txz EXPOSE 8006 3389 VOLUME /storage diff --git a/readme.md b/readme.md index 7054e6b..a3d7b49 100644 --- a/readme.md +++ b/readme.md @@ -383,5 +383,4 @@ kubectl apply -f kubernetes.yml [Size]: https://img.shields.io/docker/image-size/dockurr/windows/latest?color=066da5&label=size [Pulls]: https://img.shields.io/docker/pulls/dockurr/windows.svg?style=flat&label=pulls&logo=docker [Version]: https://img.shields.io/docker/v/dockurr/windows/latest?arch=amd64&sort=semver&color=066da5 -[Package]: -https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fipitio.github.io%2Fbackage%2Fdockur%2Fwindows%2Fwindows.json&query=%24.downloads&logo=github&style=flat&color=066da5&label=pulls +[Package]: https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fipitio.github.io%2Fbackage%2Fdockur%2Fwindows%2Fwindows.json&query=%24.downloads&logo=github&style=flat&color=066da5&label=pulls diff --git a/src/define.sh b/src/define.sh index 1706a31..efcb6b7 100644 --- a/src/define.sh +++ b/src/define.sh @@ -950,11 +950,11 @@ getLink3() { local sum="" local size="" local host="https://drive.massgrave.dev" - local s22="windows_server_2022_updated_july_2024_x64_dvd_fee121d6" - local c11="windows_11_consumer_editions_version_23h2_updated_july_2024_x64_dvd_13e3dd80" - local b11="windows_11_business_editions_version_23h2_updated_july_2024_x64_dvd" - local c10="windows_10_consumer_editions_version_22h2_updated_july_2024_x64_dvd_3245b006" - local b10="windows_10_business_editions_version_22h2_updated_july_2024_x64_dvd" + local s22="windows_server_2022_updated_aug_2024_x64_dvd_17b2bb17" + local c11="windows_11_consumer_editions_version_23h2_updated_aug_2024_x64_dvd_d3e1c088" + local b11="windows_11_business_editions_version_23h2_updated_aug_2024_x64_dvd" + local c10="windows_10_consumer_editions_version_22h2_updated_aug_2024_x86_dvd_2454bb57" + local b10="windows_10_business_editions_version_22h2_updated_aug_2024_x64_dvd" culture=$(getLanguage "$lang" "culture") @@ -969,8 +969,8 @@ getLink3() { "el" | "el-"* ) url="el-gr_${c11}.iso" ;; "gb" | "en-gb" ) url="en-gb_${c11}.iso" ;; "en" | "en-"* ) - size=7165775872 - sum="b84e497c019e95ba9aee9da3d86e679454cba1a426593711f0f4d426f48fc845" + size=7174344704 + sum="c37962a65405106323ccd9c8b26a148959413a8b4cae22be315338f283a25e60" url="en-us_${c11}.iso" ;; "mx" | "es-mx" ) url="es-mx_${c11}.iso" ;; "es" | "es-"* ) url="es-es_${c11}.iso" ;; @@ -1006,47 +1006,47 @@ getLink3() { ;; "win11x64-enterprise" | "win11x64-enterprise-eval" ) case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_${b11}_39c553d6.iso" ;; - "bg" | "bg-"* ) url="bg-bg_${b11}_eb13b76c.iso" ;; - "cs" | "cs-"* ) url="cs-cz_${b11}_397728ab.iso" ;; - "da" | "da-"* ) url="da-dk_${b11}_4df23c83.iso" ;; - "de" | "de-"* ) url="de-de_${b11}_9a27972d.iso" ;; - "el" | "el-"* ) url="el-gr_${b11}_c8957889.iso" ;; - "gb" | "en-gb" ) url="en-gb_${b11}_deb8a337.iso" ;; + "ar" | "ar-"* ) url="ar-sa_${b11}_e8f50c77.iso" ;; + "bg" | "bg-"* ) url="bg-bg_${b11}_4917d646.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${b11}_7423efd7.iso" ;; + "da" | "da-"* ) url="da-dk_${b11}_320e7939.iso" ;; + "de" | "de-"* ) url="de-de_${b11}_0a30ec34.iso" ;; + "el" | "el-"* ) url="el-gr_${b11}_8094f396.iso" ;; + "gb" | "en-gb" ) url="en-gb_${b11}_d2bfefb8.iso" ;; "en" | "en-"* ) - size=7035154432 - sum="651e02efa8efe5c3ed6f99f91a934604add93d0fa28a5e7e29898d47bc92eba5" - url="en-us_${b11}_5a07b6a4.iso" ;; - "mx" | "es-mx" ) url="es-mx_${b11}_2c5e4da9.iso" ;; - "es" | "es-"* ) url="es-es_${b11}_4fde1bd2.iso" ;; - "et" | "et-"* ) url="et-ee_${b11}_dbdba8e6.iso" ;; - "fi" | "fi-"* ) url="fi-fi_${b11}_84ef21ee.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_${b11}_2cfbb3d3.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${b11}_f922413d.iso" ;; - "he" | "he-"* ) url="he-il_${b11}_277cd23a.iso" ;; - "hr" | "hr-"* ) url="hr-hr_${b11}_65579a9d.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${b11}_3e8637f5.iso" ;; - "it" | "it-"* ) url="it-it_${b11}_da0f0ca1.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${b11}_86b39781.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${b11}_0a970f66.iso" ;; - "lt" | "lt-"* ) url="lt-lt_${b11}_8429ce4c.iso" ;; - "lv" | "lv-"* ) url="lv-lv_${b11}_8eb4a9a7.iso" ;; - "nb" | "nb-"* ) url="nb-no_${b11}_2ebae5cb.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${b11}_6dba664c.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${b11}_829bf56a.iso" ;; - "br" | "pt-br" ) url="pt-br_${b11}_cd555922.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${b11}_ad4cf2e0.iso" ;; - "ro" | "ro-"* ) url="ro-ro_${b11}_2340f750.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${b11}_4207eb9f.iso" ;; - "sk" | "sk-"* ) url="sk-sk_${b11}_a1ba40e5.iso" ;; - "sl" | "sl-"* ) url="sl-si_${b11}_282cc939.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_${b11}_b4915859.iso" ;; - "sv" | "sv-"* ) url="sv-se_${b11}_879e706a.iso" ;; - "th" | "th-"* ) url="th-th_${b11}_f51e12b1.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${b11}_b52351ad.iso" ;; - "uk" | "uk-"* ) url="uk-ua_${b11}_4a9948b3.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${b11}_75853f9b.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${b11}_8c3fbaa8.iso" ;; + size=7058937856 + sum="16366a1970d98b590295f5858eb2aae5577ef870a148de42bd3ed051e78010fb" + url="en-us_${b11}_4b6aa6b4.iso" ;; + "mx" | "es-mx" ) url="es-mx_${b11}_a3ff371e.iso" ;; + "es" | "es-"* ) url="es-es_${b11}_49584d0f.iso" ;; + "et" | "et-"* ) url="et-ee_${b11}_9418af12.iso" ;; + "fi" | "fi-"* ) url="fi-fi_${b11}_f99ef6d3.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_${b11}_3b3e23dc.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${b11}_e5a1eeb4.iso" ;; + "he" | "he-"* ) url="he-il_${b11}_52d76f40.iso" ;; + "hr" | "hr-"* ) url="hr-hr_${b11}_c93171de.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${b11}_0ac31337.iso" ;; + "it" | "it-"* ) url="it-it_${b11}_d1670509.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${b11}_6394f8d8.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${b11}_ad04a091.iso" ;; + "lt" | "lt-"* ) url="lt-lt_${b11}_75df52ae.iso" ;; + "lv" | "lv-"* ) url="lv-lv_${b11}_f498cffc.iso" ;; + "nb" | "nb-"* ) url="nb-no_${b11}_a4cdddfc.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${b11}_03c01555.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${b11}_d5274f4d.iso" ;; + "br" | "pt-br" ) url="pt-br_${b11}_662860be.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${b11}_ec70d402.iso" ;; + "ro" | "ro-"* ) url="ro-ro_${b11}_d76af266.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${b11}_689ea9dc.iso" ;; + "sk" | "sk-"* ) url="sk-sk_${b11}_358e8bce.iso" ;; + "sl" | "sl-"* ) url="sl-si_${b11}_69a9feb3.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_${b11}_23247970.iso" ;; + "sv" | "sv-"* ) url="sv-se_${b11}_2b228b50.iso" ;; + "th" | "th-"* ) url="th-th_${b11}_6914e97f.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${b11}_20dd43f1.iso" ;; + "uk" | "uk-"* ) url="uk-ua_${b11}_ed5be63e.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${b11}_beaade88.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${b11}_6ca91c94.iso" ;; esac ;; "win11x64-iot" | "win11x64-enterprise-iot-eval" ) @@ -1071,8 +1071,8 @@ getLink3() { "el" | "el-"* ) url="el-gr_${c10}.iso" ;; "gb" | "en-gb" ) url="en-gb_${c10}.iso" ;; "en" | "en-"* ) - size=7151144960 - sum="2eda4701d3e4061eccfdf0ad264b69392e67e2a29fef9eb7d7a57150b08e87e0" + size=4950300672 + sum="bbe2caba5ae2562166ed1ed0d7b54678c7cb9a3fe25dcb1e27c8f6993a95b498" url="en-us_${c10}.iso" ;; "mx" | "es-mx" ) url="es-mx_${c10}.iso" ;; "es" | "es-"* ) url="es-es_${c10}.iso" ;; @@ -1108,47 +1108,47 @@ getLink3() { ;; "win10x64-enterprise" | "win10x64-enterprise-eval" ) case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_${b10}_c297cc0d.iso" ;; - "bg" | "bg-"* ) url="bg-bg_${b10}_30c9ad0e.iso" ;; - "cs" | "cs-"* ) url="cs-cz_${b10}_0a65fb0a.iso" ;; - "da" | "da-"* ) url="da-dk_${b10}_57521eab.iso" ;; - "de" | "de-"* ) url="de-de_${b10}_9beb944c.iso" ;; - "el" | "el-"* ) url="el-gr_${b10}_4f7921a5.iso" ;; - "gb" | "en-gb" ) url="en-gb_${b10}_77325f32.iso" ;; + "ar" | "ar-"* ) url="ar-sa_${b10}_92a8794f.iso" ;; + "bg" | "bg-"* ) url="bg-bg_${b10}_5c7ee697.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${b10}_c8ad70aa.iso" ;; + "da" | "da-"* ) url="da-dk_${b10}_5a51835f.iso" ;; + "de" | "de-"* ) url="de-de_${b10}_e24c9809.iso" ;; + "el" | "el-"* ) url="el-gr_${b10}_a340838b.iso" ;; + "gb" | "en-gb" ) url="en-gb_${b10}_e758d63e.iso" ;; "en" | "en-"* ) - size=6978310144 - sum="7847abd6f39abd02dc8089c4177d354f9eb66fa0ee2fe8ae20e596e675d1ab67" - url="en-us_${b10}_c004521a.iso" ;; - "mx" | "es-mx" ) url="es-mx_${b10}_56d48916.iso" ;; - "es" | "es-"* ) url="es-es_${b10}_4e057a75.iso" ;; - "et" | "et-"* ) url="et-ee_${b10}_8e8c70da.iso" ;; - "fi" | "fi-"* ) url="fi-fi_${b10}_023ba9da.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_${b10}_e4b0fd01.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${b10}_8a45f12e.iso" ;; - "he" | "he-"* ) url="he-il_${b10}_8ce094aa.iso" ;; - "hr" | "hr-"* ) url="hr-hr_${b10}_668d9ec4.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${b10}_7f70b22c.iso" ;; - "it" | "it-"* ) url="it-it_${b10}_3c49c82b.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${b10}_383799d9.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${b10}_f0249763.iso" ;; - "lt" | "lt-"* ) url="lt-lt_${b10}_a13593c6.iso" ;; - "lv" | "lv-"* ) url="lv-lv_${b10}_4a00695c.iso" ;; - "nb" | "nb-"* ) url="nb-no_${b10}_c949d1f1.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${b10}_bb1f8a40.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${b10}_26b503cc.iso" ;; - "br" | "pt-br" ) url="pt-br_${b10}_10757645.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${b10}_07f873cd.iso" ;; - "ro" | "ro-"* ) url="ro-ro_${b10}_e2c973f8.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${b10}_e86552ca.iso" ;; - "sk" | "sk-"* ) url="sk-sk_${b10}_03d84a11.iso" ;; - "sl" | "sl-"* ) url="sl-si_${b10}_ad745ec0.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_${b10}_36a086b8.iso" ;; - "sv" | "sv-"* ) url="sv-se_${b10}_756d5d5b.iso" ;; - "th" | "th-"* ) url="th-th_${b10}_cf4bb364.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${b10}_3ceed34b.iso" ;; - "uk" | "uk-"* ) url="uk-ua_${b10}_e6a5235d.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${b10}_fac0f45b.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${b10}_53d015e8.iso" ;; + size=6976530432 + sum="290cdbfe5f9b9a76dad12981e5f27eba353c535ffd8c83fdc4691a925f93f487" + url="en-us_${b10}_633dcd07.iso" ;; + "mx" | "es-mx" ) url="es-mx_${b10}_0c82aba5.iso" ;; + "es" | "es-"* ) url="es-es_${b10}_d12d0e1a.iso" ;; + "et" | "et-"* ) url="et-ee_${b10}_021c20ff.iso" ;; + "fi" | "fi-"* ) url="fi-fi_${b10}_8fcefb87.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_${b10}_b0588c68.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${b10}_8766236b.iso" ;; + "he" | "he-"* ) url="he-il_${b10}_e34ccebf.iso" ;; + "hr" | "hr-"* ) url="hr-hr_${b10}_ea8c7c60.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${b10}_8381df72.iso" ;; + "it" | "it-"* ) url="it-it_${b10}_1e265790.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${b10}_6334dde3.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${b10}_092c4fe2.iso" ;; + "lt" | "lt-"* ) url="lt-lt_${b10}_5425bdce.iso" ;; + "lv" | "lv-"* ) url="lv-lv_${b10}_5426a93f.iso" ;; + "nb" | "nb-"* ) url="nb-no_${b10}_67cd70cf.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${b10}_43418e31.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${b10}_7d9fc23a.iso" ;; + "br" | "pt-br" ) url="pt-br_${b10}_159a147c.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${b10}_003df1d7.iso" ;; + "ro" | "ro-"* ) url="ro-ro_${b10}_068fb76e.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${b10}_71cdb226.iso" ;; + "sk" | "sk-"* ) url="sk-sk_${b10}_22793411.iso" ;; + "sl" | "sl-"* ) url="sl-si_${b10}_91ae3317.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_${b10}_4f8045aa.iso" ;; + "sv" | "sv-"* ) url="sv-se_${b10}_fe117cac.iso" ;; + "th" | "th-"* ) url="th-th_${b10}_15986f75.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${b10}_71319f58.iso" ;; + "uk" | "uk-"* ) url="uk-ua_${b10}_0555f2a3.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${b10}_ebffe3cd.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${b10}_2dce9717.iso" ;; esac ;; "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) @@ -1276,8 +1276,8 @@ getLink3() { "cs" | "cs-"* ) url="cs-cz_${s22}.iso" ;; "de" | "de-"* ) url="de-de_${s22}.iso" ;; "en" | "en-"* ) - size=5933062144 - sum="5b6c4fab1027ed15cbd4179b8a41b184304ba362fa0053b3bad6ac070ee74281" + size=5966127104 + sum="0b70ea0e3969ad63dfe7e819d76d37ea37582e9f29e0f8d70b38e6b978406ee9" url="en-us_${s22}.iso" ;; "es" | "es-"* ) url="es-es_${s22}.iso" ;; "fr" | "fr-"* ) url="fr-fr_${s22}.iso" ;; @@ -1321,83 +1321,6 @@ getLink3() { "zh" | "zh-"* ) url="zh-cn_windows_server_2019_x64_dvd_19d65722.iso" ;; esac ;; - "win2016" | "win2016-eval" ) - case "${culture,,}" in - "cs" | "cs-"* ) url="cs_windows_server_2016_vl_x64_dvd_11636699.iso" ;; - "de" | "de-"* ) url="de_windows_server_2016_vl_x64_dvd_11636696.iso" ;; - "en" | "en-"* ) - size=6003804160 - sum="47919ce8b4993f531ca1fa3f85941f4a72b47ebaa4d3a321fecf83ca9d17e6b8" - url="en_windows_server_2016_vl_x64_dvd_11636701.iso" ;; - "es" | "es-"* ) url="es_windows_server_2016_vl_x64_dvd_11636712.iso" ;; - "fr" | "fr-"* ) url="fr_windows_server_2016_vl_x64_dvd_11636729.iso" ;; - "hu" | "hu-"* ) url="hu_windows_server_2016_vl_x64_dvd_11636720.iso" ;; - "it" | "it-"* ) url="it_windows_server_2016_vl_x64_dvd_11636710.iso" ;; - "ja" | "ja-"* ) url="ja_windows_server_2016_vl_x64_dvd_11645964.iso" ;; - "ko" | "ko-"* ) url="ko_windows_server_2016_vl_x64_dvd_11636709.iso" ;; - "nl" | "nl-"* ) url="nl_windows_server_2016_vl_x64_dvd_11636731.iso" ;; - "pl" | "pl-"* ) url="pl_windows_server_2016_vl_x64_dvd_11636719.iso" ;; - "br" | "pt-br" ) url="pt_windows_server_2016_vl_x64_dvd_11636697.iso" ;; - "pt" | "pt-"* ) url="pp_windows_server_2016_vl_x64_dvd_11637454.iso" ;; - "ru" | "ru-"* ) url="ru_windows_server_2016_vl_x64_dvd_11636694.iso" ;; - "sv" | "sv-"* ) url="sv_windows_server_2016_vl_x64_dvd_11636706.iso" ;; - "tr" | "tr-"* ) url="tr_windows_server_2016_vl_x64_dvd_11636725.iso" ;; - "zh-hk" | "zh-tw" ) url="ct_windows_server_2016_vl_x64_dvd_11636717.iso" ;; - "zh" | "zh-"* ) url="cn_windows_server_2016_vl_x64_dvd_11636695.iso" ;; - esac - ;; - "win2012r2" | "win2012r2-eval" ) - case "${culture,,}" in - "cs" | "cs-"* ) url="cs_windows_server_2012_r2_vl_with_update_x64_dvd_6052752.iso" ;; - "de" | "de-"* ) url="de_windows_server_2012_r2_vl_with_update_x64_dvd_6052780.iso" ;; - "en" | "en-"* ) - size=5400115200 - sum="0e883ce28eb5c6f58a3a3007be978d43edb1035a4585506c1c4504c9e143408d" - url="en_windows_server_2012_r2_vl_with_update_x64_dvd_6052766.iso" ;; - "es" | "es-"* ) url="es_windows_server_2012_r2_vl_with_update_x64_dvd_6052831.iso" ;; - "fr" | "fr-"* ) url="fr_windows_server_2012_r2_vl_with_update_x64_dvd_6052772.iso" ;; - "hu" | "hu-"* ) url="hu_windows_server_2012_r2_vl_with_update_x64_dvd_6052786.iso" ;; - "it" | "it-"* ) url="it_windows_server_2012_r2_vl_with_update_x64_dvd_6052792.iso" ;; - "ja" | "ja-"* ) url="ja_windows_server_2012_r2_vl_with_update_x64_dvd_6052800.iso" ;; - "ko" | "ko-"* ) url="ko_windows_server_2012_r2_vl_with_update_x64_dvd_6052806.iso" ;; - "nl" | "nl-"* ) url="nl_windows_server_2012_r2_vl_with_update_x64_dvd_6052760.iso" ;; - "pl" | "pl-"* ) url="pl_windows_server_2012_r2_vl_with_update_x64_dvd_6052815.iso" ;; - "br" | "pt-br" ) url="pt_windows_server_2012_r2_vl_with_update_x64_dvd_6052819.iso" ;; - "pt" | "pt-"* ) url="pp_windows_server_2012_r2_vl_with_update_x64_dvd_6052823.iso" ;; - "ru" | "ru-"* ) url="ru_windows_server_2012_r2_vl_with_update_x64_dvd_6052827.iso" ;; - "sv" | "sv-"* ) url="sv_windows_server_2012_r2_vl_with_update_x64_dvd_6052835.iso" ;; - "tr" | "tr-"* ) url="tr_windows_server_2012_r2_vl_with_update_x64_dvd_6052838.iso" ;; - "zh-hk" ) url="hk_windows_server_2012_r2_vl_with_update_x64_dvd_6052739.iso" ;; - "zh-tw" ) url="tw_windows_server_2012_r2_vl_with_update_x64_dvd_6052746.iso" ;; - "zh" | "zh-"* ) url="cn_windows_server_2012_r2_vl_with_update_x64_dvd_6052729.iso" ;; - esac - ;; - "win2008r2" | "win2008r2-eval" ) - case "${culture,,}" in - "cs" | "cs-"* ) url="cs_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617402.iso" ;; - "de" | "de-"* ) url="de_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617404.iso" ;; - "en" | "en-"* ) - size=3166720000 - sum="9b0cd5b11cc2e92badb74450f0cac03006d3c63a2ada36cb1eb95c1bf4b2608f" - url="en_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617403.iso" ;; - "es" | "es-"* ) url="es_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617410.iso" ;; - "fr" | "fr-"* ) url="fr_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617392.iso" ;; - "hu" | "hu-"* ) url="hu_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617415.iso" ;; - "it" | "it-"* ) url="it_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_619596.iso" ;; - "ja" | "ja-"* ) url="ja_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_631466.iso" ;; - "ko" | "ko-"* ) url="ko_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617409.iso" ;; - "nl" | "nl-"* ) url="nl_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617395.iso" ;; - "pl" | "pl-"* ) url="pl_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617397.iso" ;; - "br" | "pt-br" ) url="pt_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617394.iso" ;; - "pt" | "pt-"* ) url="pp_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617411.iso" ;; - "ru" | "ru-"* ) url="ru_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617421.iso" ;; - "sv" | "sv-"* ) url="sv_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617400.iso" ;; - "tr" | "tr-"* ) url="tr_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617416.iso" ;; - "zh-hk" ) url="hk_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617386.iso" ;; - "zh-tw" ) url="tw_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617405.iso" ;; - "zh" | "zh-"* ) url="cn_windows_server_2008_r2_with_sp1_vl_build_x64_dvd_617396.iso" ;; - esac - ;; "win7x64" | "win7x64-enterprise" ) case "${culture,,}" in "ar" | "ar-"* ) url="ar_windows_7_enterprise_with_sp1_x64_dvd_u_677643.iso" ;; diff --git a/src/mido.sh b/src/mido.sh index 8773263..19b1efa 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -548,7 +548,7 @@ downloadFile() { if (( rc == 0 )) && [ -f "$iso" ]; then total=$(stat -c%s "$iso") if [ "$total" -lt 100000000 ]; then - error "Invalid download link: $url (is only $total bytes?). Please report this issue." && return 1 + error "Invalid download link: $url (is only $total bytes?). Please report this at $SUPPORT/issues." && return 1 fi ! verifyFile "$iso" "$size" "$total" "$sum" && return 1 html "Download finished successfully..." && return 0 From a1e4ed160a7ba13ef3ef6e09b53c96bf33dfb995 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 14 Sep 2024 23:13:14 +0200 Subject: [PATCH 041/290] feat: Support Windows Server 2025 (#740) --- Dockerfile | 4 ++-- readme.md | 2 ++ src/install.sh | 5 ----- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index dc0e068..54b0b90 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:6.00 / / +COPY --from=qemux/qemu-docker:6.01 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" @@ -28,7 +28,7 @@ COPY --chmod=755 ./src /run/ COPY --chmod=755 ./assets /run/assets ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/v0.8/src/wsdd.py /usr/sbin/wsdd -ADD --chmod=664 https://github.com/qemus/virtiso/releases/download/v0.1.262-2/virtio-win-0.1.262.tar.xz /drivers.txz +ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.40-0/virtio-win-1.9.40.tar.xz /drivers.txz EXPOSE 8006 3389 VOLUME /storage diff --git a/readme.md b/readme.md index a3d7b49..7b7f1bd 100644 --- a/readme.md +++ b/readme.md @@ -98,11 +98,13 @@ kubectl apply -f kubernetes.yml | `vista` | Windows Vista Enterprise | 3.0 GB | | `winxp` | Windows XP Professional | 0.6 GB | |||| + | `2025` | Windows Server 2025 | 5.0 GB | | `2022` | Windows Server 2022 | 4.7 GB | | `2019` | Windows Server 2019 | 5.3 GB | | `2016` | Windows Server 2016 | 6.5 GB | | `2012` | Windows Server 2012 | 4.3 GB | | `2008` | Windows Server 2008 | 3.0 GB | + | `2003` | Windows Server 2003 | 0.6 GB | |||| | `core11` | Tiny 11 Core | 2.1 GB | | `tiny11` | Tiny 11 | 3.8 GB | diff --git a/src/install.sh b/src/install.sh index ac051ff..e9ce4da 100644 --- a/src/install.sh +++ b/src/install.sh @@ -705,11 +705,6 @@ addDriver() { "winvista"* ) [[ "${driver,,}" == "viorng" ]] && return 0 ;; - "win2025"* | "win11x64-iot"* | "win11x64-ltsc"* ) - [[ "${driver,,}" == "smbus" ]] && return 0 - [[ "${driver,,}" == "pvpanic" ]] && return 0 - [[ "${driver,,}" == "viogpudo" ]] && return 0 - ;; esac local dest="$path/$target/$driver" From b2251a4cc048df66838cd998a1baeca9520ec349 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 17 Sep 2024 23:14:23 +0200 Subject: [PATCH 042/290] build: Update VirtIO drivers to v1.9.43 (#741) --- Dockerfile | 2 +- src/define.sh | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 54b0b90..86eeb97 100644 --- a/Dockerfile +++ b/Dockerfile @@ -28,7 +28,7 @@ COPY --chmod=755 ./src /run/ COPY --chmod=755 ./assets /run/assets ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/v0.8/src/wsdd.py /usr/sbin/wsdd -ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.40-0/virtio-win-1.9.40.tar.xz /drivers.txz +ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.43-0/virtio-win-1.9.43.tar.xz /drivers.txz EXPOSE 8006 3389 VOLUME /storage diff --git a/src/define.sh b/src/define.sh index efcb6b7..f612c81 100644 --- a/src/define.sh +++ b/src/define.sh @@ -729,14 +729,14 @@ getLink1() { ;; "win11x64-iot" | "win11x64-enterprise-iot-eval" ) [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 - size=4821989376 - sum="e8f1431c4e6289b3997c20eadbb2576670300bb6e1cf8948b5d7af179010a962" + size=4501397504 + sum="aaa4bd3254c1af5f9ce07f50db68fdead7a305878f2425c059ecd6b062a855b3" url="11/26100.1.240331-1435.ge_release_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" ;; "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 - size=4821989376 - sum="e8f1431c4e6289b3997c20eadbb2576670300bb6e1cf8948b5d7af179010a962" + size=4501397504 + sum="aaa4bd3254c1af5f9ce07f50db68fdead7a305878f2425c059ecd6b062a855b3" url="11/26100.1.240331-1435.ge_release_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" ;; "win10x64" | "win10x64-enterprise" | "win10x64-enterprise-eval" ) @@ -2333,6 +2333,9 @@ setMachine() { if ! prepare2k3 "$iso" "$dir" "$desc"; then error "Failed to prepare $desc ISO!" && return 1 fi ;; + "win2025"* | "win11x64-iot"* | "win11x64-ltsc"* ) + # Temporary: Use IDE CD to workaround install bug + MEDIA_TYPE="ide" ;; esac return 0 From c8f0d874534128c81e5b02cc5421ecfeeefe21e8 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 25 Sep 2024 15:58:12 +0200 Subject: [PATCH 043/290] fix: Missing x86 drivers for Windows XP (#755) --- readme.md | 4 - src/define.sh | 223 +++----------------------------------------------- 2 files changed, 12 insertions(+), 215 deletions(-) diff --git a/readme.md b/readme.md index 7b7f1bd..406984b 100644 --- a/readme.md +++ b/readme.md @@ -105,10 +105,6 @@ kubectl apply -f kubernetes.yml | `2012` | Windows Server 2012 | 4.3 GB | | `2008` | Windows Server 2008 | 3.0 GB | | `2003` | Windows Server 2003 | 0.6 GB | - |||| - | `core11` | Tiny 11 Core | 2.1 GB | - | `tiny11` | Tiny 11 | 3.8 GB | - | `tiny10` | Tiny 10 | 3.6 GB | > [!TIP] > To install ARM64 versions of Windows use [dockur/windows-arm](https://github.com/dockur/windows-arm/). diff --git a/src/define.sh b/src/define.sh index f612c81..bfdd535 100644 --- a/src/define.sh +++ b/src/define.sh @@ -950,105 +950,10 @@ getLink3() { local sum="" local size="" local host="https://drive.massgrave.dev" - local s22="windows_server_2022_updated_aug_2024_x64_dvd_17b2bb17" - local c11="windows_11_consumer_editions_version_23h2_updated_aug_2024_x64_dvd_d3e1c088" - local b11="windows_11_business_editions_version_23h2_updated_aug_2024_x64_dvd" - local c10="windows_10_consumer_editions_version_22h2_updated_aug_2024_x86_dvd_2454bb57" - local b10="windows_10_business_editions_version_22h2_updated_aug_2024_x64_dvd" culture=$(getLanguage "$lang" "culture") case "${id,,}" in - "win11x64" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_${c11}.iso" ;; - "bg" | "bg-"* ) url="bg-bg_${c11}.iso" ;; - "cs" | "cs-"* ) url="cs-cz_${c11}.iso" ;; - "da" | "da-"* ) url="da-dk_${c11}.iso" ;; - "de" | "de-"* ) url="de-de_${c11}.iso" ;; - "el" | "el-"* ) url="el-gr_${c11}.iso" ;; - "gb" | "en-gb" ) url="en-gb_${c11}.iso" ;; - "en" | "en-"* ) - size=7174344704 - sum="c37962a65405106323ccd9c8b26a148959413a8b4cae22be315338f283a25e60" - url="en-us_${c11}.iso" ;; - "mx" | "es-mx" ) url="es-mx_${c11}.iso" ;; - "es" | "es-"* ) url="es-es_${c11}.iso" ;; - "et" | "et-"* ) url="et-ee_${c11}.iso" ;; - "fi" | "fi-"* ) url="fi-fi_${c11}.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_${c11}.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${c11}.iso" ;; - "he" | "he-"* ) url="he-il_${c11}.iso" ;; - "hr" | "hr-"* ) url="hr-hr_${c11}.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${c11}.iso" ;; - "it" | "it-"* ) url="it-it_${c11}.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${c11}.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${c11}.iso" ;; - "lt" | "lt-"* ) url="lt-lt_${c11}.iso" ;; - "lv" | "lv-"* ) url="lv-lv_${c11}.iso" ;; - "nb" | "nb-"* ) url="nb-no_${c11}.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${c11}.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${c11}.iso" ;; - "br" | "pt-br" ) url="pt-br_${c11}.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${c11}.iso" ;; - "ro" | "ro-"* ) url="ro-ro_${c11}.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${c11}.iso" ;; - "sk" | "sk-"* ) url="sk-sk_${c11}.iso" ;; - "sl" | "sl-"* ) url="sl-si_${c11}.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_${c11}.iso" ;; - "sv" | "sv-"* ) url="sv-se_${c11}.iso" ;; - "th" | "th-"* ) url="th-th_${c11}.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${c11}.iso" ;; - "uk" | "uk-"* ) url="uk-ua_${c11}.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${c11}.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${c11}.iso" ;; - esac - ;; - "win11x64-enterprise" | "win11x64-enterprise-eval" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_${b11}_e8f50c77.iso" ;; - "bg" | "bg-"* ) url="bg-bg_${b11}_4917d646.iso" ;; - "cs" | "cs-"* ) url="cs-cz_${b11}_7423efd7.iso" ;; - "da" | "da-"* ) url="da-dk_${b11}_320e7939.iso" ;; - "de" | "de-"* ) url="de-de_${b11}_0a30ec34.iso" ;; - "el" | "el-"* ) url="el-gr_${b11}_8094f396.iso" ;; - "gb" | "en-gb" ) url="en-gb_${b11}_d2bfefb8.iso" ;; - "en" | "en-"* ) - size=7058937856 - sum="16366a1970d98b590295f5858eb2aae5577ef870a148de42bd3ed051e78010fb" - url="en-us_${b11}_4b6aa6b4.iso" ;; - "mx" | "es-mx" ) url="es-mx_${b11}_a3ff371e.iso" ;; - "es" | "es-"* ) url="es-es_${b11}_49584d0f.iso" ;; - "et" | "et-"* ) url="et-ee_${b11}_9418af12.iso" ;; - "fi" | "fi-"* ) url="fi-fi_${b11}_f99ef6d3.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_${b11}_3b3e23dc.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${b11}_e5a1eeb4.iso" ;; - "he" | "he-"* ) url="he-il_${b11}_52d76f40.iso" ;; - "hr" | "hr-"* ) url="hr-hr_${b11}_c93171de.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${b11}_0ac31337.iso" ;; - "it" | "it-"* ) url="it-it_${b11}_d1670509.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${b11}_6394f8d8.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${b11}_ad04a091.iso" ;; - "lt" | "lt-"* ) url="lt-lt_${b11}_75df52ae.iso" ;; - "lv" | "lv-"* ) url="lv-lv_${b11}_f498cffc.iso" ;; - "nb" | "nb-"* ) url="nb-no_${b11}_a4cdddfc.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${b11}_03c01555.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${b11}_d5274f4d.iso" ;; - "br" | "pt-br" ) url="pt-br_${b11}_662860be.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${b11}_ec70d402.iso" ;; - "ro" | "ro-"* ) url="ro-ro_${b11}_d76af266.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${b11}_689ea9dc.iso" ;; - "sk" | "sk-"* ) url="sk-sk_${b11}_358e8bce.iso" ;; - "sl" | "sl-"* ) url="sl-si_${b11}_69a9feb3.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_${b11}_23247970.iso" ;; - "sv" | "sv-"* ) url="sv-se_${b11}_2b228b50.iso" ;; - "th" | "th-"* ) url="th-th_${b11}_6914e97f.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${b11}_20dd43f1.iso" ;; - "uk" | "uk-"* ) url="uk-ua_${b11}_ed5be63e.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${b11}_beaade88.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${b11}_6ca91c94.iso" ;; - esac - ;; "win11x64-iot" | "win11x64-enterprise-iot-eval" ) [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 size=4821989376 @@ -1061,96 +966,6 @@ getLink3() { sum="e8f1431c4e6289b3997c20eadbb2576670300bb6e1cf8948b5d7af179010a962" url="26100.1.240331-1435.ge_release_CLIENTENTERPRISE_OEM_x64FRE_en-us.iso" ;; - "win10x64" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_${c10}.iso" ;; - "bg" | "bg-"* ) url="bg-bg_${c10}.iso" ;; - "cs" | "cs-"* ) url="cs-cz_${c10}.iso" ;; - "da" | "da-"* ) url="da-dk_${c10}.iso" ;; - "de" | "de-"* ) url="de-de_${c10}.iso" ;; - "el" | "el-"* ) url="el-gr_${c10}.iso" ;; - "gb" | "en-gb" ) url="en-gb_${c10}.iso" ;; - "en" | "en-"* ) - size=4950300672 - sum="bbe2caba5ae2562166ed1ed0d7b54678c7cb9a3fe25dcb1e27c8f6993a95b498" - url="en-us_${c10}.iso" ;; - "mx" | "es-mx" ) url="es-mx_${c10}.iso" ;; - "es" | "es-"* ) url="es-es_${c10}.iso" ;; - "et" | "et-"* ) url="et-ee_${c10}.iso" ;; - "fi" | "fi-"* ) url="fi-fi_${c10}.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_${c10}.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${c10}.iso" ;; - "he" | "he-"* ) url="he-il_${c10}.iso" ;; - "hr" | "hr-"* ) url="hr-hr_${c10}.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${c10}.iso" ;; - "it" | "it-"* ) url="it-it_${c10}.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${c10}.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${c10}.iso" ;; - "lt" | "lt-"* ) url="lt-lt_${c10}.iso" ;; - "lv" | "lv-"* ) url="lv-lv_${c10}.iso" ;; - "nb" | "nb-"* ) url="nb-no_${c10}.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${c10}.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${c10}.iso" ;; - "br" | "pt-br" ) url="pt-br_${c10}.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${c10}.iso" ;; - "ro" | "ro-"* ) url="ro-ro_${c10}.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${c10}.iso" ;; - "sk" | "sk-"* ) url="sk-sk_${c10}.iso" ;; - "sl" | "sl-"* ) url="sl-si_${c10}.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_${c10}.iso" ;; - "sv" | "sv-"* ) url="sv-se_${c10}.iso" ;; - "th" | "th-"* ) url="th-th_${c10}.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${c10}.iso" ;; - "uk" | "uk-"* ) url="uk-ua_${c10}.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${c10}.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${c10}.iso" ;; - esac - ;; - "win10x64-enterprise" | "win10x64-enterprise-eval" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_${b10}_92a8794f.iso" ;; - "bg" | "bg-"* ) url="bg-bg_${b10}_5c7ee697.iso" ;; - "cs" | "cs-"* ) url="cs-cz_${b10}_c8ad70aa.iso" ;; - "da" | "da-"* ) url="da-dk_${b10}_5a51835f.iso" ;; - "de" | "de-"* ) url="de-de_${b10}_e24c9809.iso" ;; - "el" | "el-"* ) url="el-gr_${b10}_a340838b.iso" ;; - "gb" | "en-gb" ) url="en-gb_${b10}_e758d63e.iso" ;; - "en" | "en-"* ) - size=6976530432 - sum="290cdbfe5f9b9a76dad12981e5f27eba353c535ffd8c83fdc4691a925f93f487" - url="en-us_${b10}_633dcd07.iso" ;; - "mx" | "es-mx" ) url="es-mx_${b10}_0c82aba5.iso" ;; - "es" | "es-"* ) url="es-es_${b10}_d12d0e1a.iso" ;; - "et" | "et-"* ) url="et-ee_${b10}_021c20ff.iso" ;; - "fi" | "fi-"* ) url="fi-fi_${b10}_8fcefb87.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_${b10}_b0588c68.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${b10}_8766236b.iso" ;; - "he" | "he-"* ) url="he-il_${b10}_e34ccebf.iso" ;; - "hr" | "hr-"* ) url="hr-hr_${b10}_ea8c7c60.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${b10}_8381df72.iso" ;; - "it" | "it-"* ) url="it-it_${b10}_1e265790.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${b10}_6334dde3.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${b10}_092c4fe2.iso" ;; - "lt" | "lt-"* ) url="lt-lt_${b10}_5425bdce.iso" ;; - "lv" | "lv-"* ) url="lv-lv_${b10}_5426a93f.iso" ;; - "nb" | "nb-"* ) url="nb-no_${b10}_67cd70cf.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${b10}_43418e31.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${b10}_7d9fc23a.iso" ;; - "br" | "pt-br" ) url="pt-br_${b10}_159a147c.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${b10}_003df1d7.iso" ;; - "ro" | "ro-"* ) url="ro-ro_${b10}_068fb76e.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${b10}_71cdb226.iso" ;; - "sk" | "sk-"* ) url="sk-sk_${b10}_22793411.iso" ;; - "sl" | "sl-"* ) url="sl-si_${b10}_91ae3317.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_${b10}_4f8045aa.iso" ;; - "sv" | "sv-"* ) url="sv-se_${b10}_fe117cac.iso" ;; - "th" | "th-"* ) url="th-th_${b10}_15986f75.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${b10}_71319f58.iso" ;; - "uk" | "uk-"* ) url="uk-ua_${b10}_0555f2a3.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${b10}_ebffe3cd.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${b10}_2dce9717.iso" ;; - esac - ;; "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) case "${culture,,}" in "ar" | "ar-"* ) url="ar-sa_windows_10_enterprise_ltsc_2021_x64_dvd_60bc2a7a.iso" ;; @@ -1271,31 +1086,6 @@ getLink3() { "zh" | "zh-"* ) url="zh-cn_windows_server_2025_preview_x64_dvd_a12bb0bf.iso" ;; esac ;; - "win2022" | "win2022-eval" ) - case "${culture,,}" in - "cs" | "cs-"* ) url="cs-cz_${s22}.iso" ;; - "de" | "de-"* ) url="de-de_${s22}.iso" ;; - "en" | "en-"* ) - size=5966127104 - sum="0b70ea0e3969ad63dfe7e819d76d37ea37582e9f29e0f8d70b38e6b978406ee9" - url="en-us_${s22}.iso" ;; - "es" | "es-"* ) url="es-es_${s22}.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${s22}.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${s22}.iso" ;; - "it" | "it-"* ) url="it-it_${s22}.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${s22}.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${s22}.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${s22}.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${s22}.iso" ;; - "br" | "pt-br" ) url="pt-br_${s22}.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${s22}.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${s22}.iso" ;; - "sv" | "sv-"* ) url="sv-se_${s22}.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${s22}.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${s22}.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${s22}.iso" ;; - esac - ;; "win2019" | "win2019-eval" ) case "${culture,,}" in "cs" | "cs-"* ) url="cs-cz_windows_server_2019_x64_dvd_3781c31c.iso" ;; @@ -1895,6 +1685,10 @@ prepareInstall() { local target [[ "${arch,,}" == "x86" ]] && target="$dir/I386" || target="$dir/AMD64" + if [ ! -f "$drivers/viostor/$driver/$arch/viostor.sys" ]; then + error "Failed to locate required storage drivers!" && return 1 + fi + cp "$drivers/viostor/$driver/$arch/viostor.sys" "$target" mkdir -p "$dir/\$OEM\$/\$1/Drivers/viostor" @@ -1902,6 +1696,10 @@ prepareInstall() { cp "$drivers/viostor/$driver/$arch/viostor.inf" "$dir/\$OEM\$/\$1/Drivers/viostor" cp "$drivers/viostor/$driver/$arch/viostor.sys" "$dir/\$OEM\$/\$1/Drivers/viostor" + if [ ! -f "$drivers/NetKVM/$driver/$arch/netkvm.sys" ]; then + error "Failed to locate required network drivers!" && return 1 + fi + mkdir -p "$dir/\$OEM\$/\$1/Drivers/NetKVM" cp "$drivers/NetKVM/$driver/$arch/netkvm.cat" "$dir/\$OEM\$/\$1/Drivers/NetKVM" cp "$drivers/NetKVM/$driver/$arch/netkvm.inf" "$dir/\$OEM\$/\$1/Drivers/NetKVM" @@ -1919,8 +1717,11 @@ prepareInstall() { sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00021AF4=\"viostor\"/' "$target/TXTSETUP.SIF" sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$target/TXTSETUP.SIF" - mkdir -p "$dir/\$OEM\$/\$1/Drivers/sata" + if [ ! -d "$drivers/sata/xp/$arch" ]; then + error "Failed to locate required SATA drivers!" && return 1 + fi + mkdir -p "$dir/\$OEM\$/\$1/Drivers/sata" cp -a "$drivers/sata/xp/$arch/." "$dir/\$OEM\$/\$1/Drivers/sata" cp -a "$drivers/sata/xp/$arch/." "$target" From 34d6fa73f50d5732e258877ba5026d56a58f1520 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 14:51:16 +0200 Subject: [PATCH 044/290] chore(deps): update qemux/qemu-docker docker tag to v6.02 (#759) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 86eeb97..bb734dc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:6.01 / / +COPY --from=qemux/qemu-docker:6.02 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" From bfc24167e3a72726be5bcb11c27a6594686e52a0 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 1 Oct 2024 01:04:19 +0200 Subject: [PATCH 045/290] fix: Update Windows 11 LTSC download mirrors (#768) --- src/define.sh | 26 +++++++++++++------------- src/mido.sh | 1 + 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/define.sh b/src/define.sh index bfdd535..37da591 100644 --- a/src/define.sh +++ b/src/define.sh @@ -386,7 +386,7 @@ printVersion() { if [ -z "$desc" ]; then desc="Windows" - [[ "${PLATFORM,,}" != "x64" ]] && desc="$desc for ${PLATFORM}" + [[ "${PLATFORM,,}" != "x64" ]] && desc+=" for ${PLATFORM}" fi echo "$desc" @@ -729,15 +729,15 @@ getLink1() { ;; "win11x64-iot" | "win11x64-enterprise-iot-eval" ) [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 - size=4501397504 - sum="aaa4bd3254c1af5f9ce07f50db68fdead7a305878f2425c059ecd6b062a855b3" - url="11/26100.1.240331-1435.ge_release_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" + size=5144817664 + sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" + url="11/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" ;; "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 - size=4501397504 - sum="aaa4bd3254c1af5f9ce07f50db68fdead7a305878f2425c059ecd6b062a855b3" - url="11/26100.1.240331-1435.ge_release_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" + size=5144817664 + sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" + url="11/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" ;; "win10x64" | "win10x64-enterprise" | "win10x64-enterprise-eval" ) size=5623582720 @@ -956,15 +956,15 @@ getLink3() { case "${id,,}" in "win11x64-iot" | "win11x64-enterprise-iot-eval" ) [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 - size=4821989376 - sum="e8f1431c4e6289b3997c20eadbb2576670300bb6e1cf8948b5d7af179010a962" - url="26100.1.240331-1435.ge_release_CLIENTENTERPRISE_OEM_x64FRE_en-us.iso" + size=5144817664 + sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" + url="X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" ;; "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 - size=4821989376 - sum="e8f1431c4e6289b3997c20eadbb2576670300bb6e1cf8948b5d7af179010a962" - url="26100.1.240331-1435.ge_release_CLIENTENTERPRISE_OEM_x64FRE_en-us.iso" + size=5144817664 + sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" + url="X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" ;; "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) case "${culture,,}" in diff --git a/src/mido.sh b/src/mido.sh index 19b1efa..454e83f 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -318,6 +318,7 @@ getWindows() { case "${version,,}" in "win11${PLATFORM,,}-enterprise-iot-eval" ) ;; + "win11${PLATFORM,,}-enterprise-ltsc-eval" ) ;; * ) if [[ "${PLATFORM,,}" != "x64" ]]; then error "No download for the ${PLATFORM^^} platform available for $edition!" From 73e725321824fa2a36c18102261e0b34b6280782 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 1 Oct 2024 20:33:25 +0200 Subject: [PATCH 046/290] feat: Add Windows 11 LTSC support (#770) --- assets/win11x64-iot.xml | 3 +++ assets/win11x64-ltsc.xml | 3 +++ src/define.sh | 7 ++----- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml index cf49f4e..eeef008 100644 --- a/assets/win11x64-iot.xml +++ b/assets/win11x64-iot.xml @@ -86,6 +86,9 @@ <AcceptEula>true</AcceptEula> <FullName>Docker</FullName> <Organization>Windows for Docker</Organization> + <ProductKey> + <Key /> + </ProductKey> </UserData> <EnableFirewall>false</EnableFirewall> <Diagnostics> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml index 16ec029..c4c35db 100644 --- a/assets/win11x64-ltsc.xml +++ b/assets/win11x64-ltsc.xml @@ -86,6 +86,9 @@ <AcceptEula>true</AcceptEula> <FullName>Docker</FullName> <Organization>Windows for Docker</Organization> + <ProductKey> + <Key /> + </ProductKey> </UserData> <EnableFirewall>false</EnableFirewall> <Diagnostics> diff --git a/src/define.sh b/src/define.sh index 37da591..b38fc28 100644 --- a/src/define.sh +++ b/src/define.sh @@ -115,7 +115,7 @@ parseVersion() { ;; "ltsc11" | "11ltsc" | "win11-ltsc" | "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) VERSION="win11x64-enterprise-ltsc-eval" - [ -z "$DETECTED" ] && DETECTED="win11x64-iot" + [ -z "$DETECTED" ] && DETECTED="win11x64-ltsc" ;; "ltsc10" | "10ltsc" | "win10-ltsc" | "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) VERSION="win10x64-enterprise-ltsc-eval" @@ -420,7 +420,7 @@ printEdition() { edition="Education" ;; *"-iot" | *"-iot-eval" ) - edition="IoT" + edition="LTSC" ;; *"-ltsc" | *"-ltsc-eval" ) edition="LTSC" @@ -2134,9 +2134,6 @@ setMachine() { if ! prepare2k3 "$iso" "$dir" "$desc"; then error "Failed to prepare $desc ISO!" && return 1 fi ;; - "win2025"* | "win11x64-iot"* | "win11x64-ltsc"* ) - # Temporary: Use IDE CD to workaround install bug - MEDIA_TYPE="ide" ;; esac return 0 From b5bef25c1a817b125f94df928623f0a3b63a8be5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 20:42:25 +0200 Subject: [PATCH 047/290] chore(deps): update qemux/qemu-docker docker tag to v6.03 (#771) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index bb734dc..be8ec62 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:6.02 / / +COPY --from=qemux/qemu-docker:6.03 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" From 717dbf01c4acd14c145cebaa95905a414a6edbbd Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 2 Oct 2024 09:24:11 +0200 Subject: [PATCH 048/290] docs: Disk pass-through (#773) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 406984b..ff684f0 100644 --- a/readme.md +++ b/readme.md @@ -320,7 +320,7 @@ kubectl apply -f kubernetes.yml - /dev/sdc:/disk2 ``` - Use `/disk1` if you want it to become your main drive, and use `/disk2` and higher to add them as secondary drives. + Use `/disk1` if you want it to become your main drive (which will be formatted during installation), and use `/disk2` and higher to add them as secondary drives (which will stay untouched). ### How do I pass-through a USB device? From 27236d7352575ec6e04bb277ed1f7d04047d6b69 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 2 Oct 2024 10:31:16 +0200 Subject: [PATCH 049/290] feat: Add Windows 11 LTSC (#774) --- readme.md | 4 +++- src/define.sh | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index ff684f0..0e57a8d 100644 --- a/readme.md +++ b/readme.md @@ -86,8 +86,10 @@ kubectl apply -f kubernetes.yml | **Value** | **Version** | **Size** | |---|---|---| - | `win11` | Windows 11 Pro | 6.4 GB | + | `win11` | Windows 11 Pro | 5.4 GB | + | `ltsc11` | Windows 11 LTSC | 4.2 GB | | `win11e` | Windows 11 Enterprise | 5.8 GB | + |||| | `win10` | Windows 10 Pro | 5.7 GB | | `ltsc10` | Windows 10 LTSC | 4.6 GB | | `win10e` | Windows 10 Enterprise | 5.2 GB | diff --git a/src/define.sh b/src/define.sh index b38fc28..c08867e 100644 --- a/src/define.sh +++ b/src/define.sh @@ -637,8 +637,8 @@ getMido() { case "${id,,}" in "win11x64" ) - size=6812706816 - sum="36de5ecb7a0daa58dce68c03b9465a543ed0f5498aa8ae60ab45fb7c8c4ae402" + size=5819484160 + sum="b56b911bf18a2ceaeb3904d87e7c770bdf92d3099599d61ac2497b91bf190b11" ;; "win11x64-enterprise-eval" ) size=6209064960 From efe2a5b725c0cdc97e35c5f0ac89b09664cd89f5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 5 Oct 2024 14:06:07 +0200 Subject: [PATCH 050/290] chore(deps): update qemux/qemu-docker docker tag to v6.04 (#776) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index be8ec62..b28efc8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:6.03 / / +COPY --from=qemux/qemu-docker:6.04 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" From 427ba244ce29bbee3971bf51f665d0237e1c3bda Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 5 Oct 2024 15:42:18 +0200 Subject: [PATCH 051/290] fix: Do not store display device (#777) --- src/install.sh | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/install.sh b/src/install.sh index e9ce4da..a1c290a 100644 --- a/src/install.sh +++ b/src/install.sh @@ -156,10 +156,6 @@ finishInstall() { fi fi - if [ -n "${VGA:-}" ] && [[ "${VGA:-}" != "virtio" ]] && [[ "${VGA:-}" != "ramfb" ]]; then - echo "$VGA" > "$STORAGE/windows.vga" - fi - if [ -n "${DISK_TYPE:-}" ] && [[ "${DISK_TYPE:-}" != "scsi" ]]; then echo "$DISK_TYPE" > "$STORAGE/windows.type" fi @@ -980,12 +976,6 @@ bootWindows() { rm -rf "$TMP" - if [ -s "$STORAGE/windows.vga" ] && [ -f "$STORAGE/windows.vga" ]; then - [ -z "${VGA:-}" ] && VGA=$(<"$STORAGE/windows.vga") - else - [ -z "${VGA:-}" ] && [[ "${PLATFORM,,}" == "arm64" ]] && VGA="virtio-gpu" - fi - if [ -s "$STORAGE/windows.type" ] && [ -f "$STORAGE/windows.type" ]; then [ -z "${DISK_TYPE:-}" ] && DISK_TYPE=$(<"$STORAGE/windows.type") fi From f3a1ac08f8782c5643d48adad5413603cbbf80cd Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 8 Oct 2024 14:04:03 +0200 Subject: [PATCH 052/290] fix: Disable Hyper-V in Windows Legacy mode (#781) --- src/define.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/src/define.sh b/src/define.sh index c08867e..065ff3e 100644 --- a/src/define.sh +++ b/src/define.sh @@ -2111,7 +2111,6 @@ setMachine() { case "${id,,}" in "win9"* | "win2k"* | "winxp"* | "win2003"* ) - HV="N" BOOT_MODE="windows_legacy" ;; "winvista"* | "win7"* | "win2008"* ) BOOT_MODE="windows_legacy" ;; From 3d3945ee4e90c8083b2c8adfce875eb97aa1af86 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 8 Oct 2024 19:35:54 +0200 Subject: [PATCH 053/290] chore(deps): update qemux/qemu-docker docker tag to v6.05 (#783) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index b28efc8..74540dc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch -COPY --from=qemux/qemu-docker:6.04 / / +COPY --from=qemux/qemu-docker:6.05 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" From 89834cf6e611215b5e55bad6322e41e0e43179c5 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 10 Oct 2024 10:54:10 +0200 Subject: [PATCH 054/290] docs: Frequently asked questions (#785) --- readme.md | 49 +++++++++++++++++++++++++------------------------ 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/readme.md b/readme.md index 0e57a8d..c1c88c2 100644 --- a/readme.md +++ b/readme.md @@ -111,30 +111,6 @@ kubectl apply -f kubernetes.yml > [!TIP] > To install ARM64 versions of Windows use [dockur/windows-arm](https://github.com/dockur/windows-arm/). -### How do I select the Windows language? - - By default, the English version of Windows will be downloaded. But you can add the `LANGUAGE` environment variable to your compose file, in order to specify an alternative language: - - ```yaml - environment: - LANGUAGE: "French" - ``` - - You can choose between: 🇦🇪 Arabic, 🇧🇬 Bulgarian, 🇨🇳 Chinese, 🇭🇷 Croatian, 🇨🇿 Czech, 🇩🇰 Danish, 🇳🇱 Dutch, 🇬🇧 English, 🇪🇪 Estionian, 🇫🇮 Finnish, 🇫🇷 French, 🇩🇪 German, 🇬🇷 Greek, 🇮🇱 Hebrew, 🇭🇺 Hungarian, 🇮🇹 Italian, 🇯🇵 Japanese, 🇰🇷 Korean, 🇱🇻 Latvian, 🇱🇹 Lithuanian, 🇳🇴 Norwegian, 🇵🇱 Polish, 🇵🇹 Portuguese, 🇷🇴 Romanian, 🇷🇺 Russian, 🇷🇸 Serbian, 🇸🇰 Slovak, 🇸🇮 Slovenian, 🇪🇸 Spanish, 🇸🇪 Swedish, 🇹🇭 Thai, 🇹🇷 Turkish and 🇺🇦 Ukrainian. - -### How do I select the keyboard layout? - - If you want to use a keyboard layout or locale that is not the default for your selected language, you can add the `KEYBOARD` and `REGION` variables with a culture code, like this: - - ```yaml - environment: - REGION: "en-US" - KEYBOARD: "en-US" - ``` - -> [!NOTE] -> Changing these values will have no effect after the installation has been performed already. Use the control panel inside Windows in that case. - ### How do I change the storage location? To change the storage location, include the following bind mount in your compose file: @@ -236,6 +212,31 @@ kubectl apply -f kubernetes.yml PASSWORD: "gates" ``` +### How do I select the Windows language? + + By default, the English version of Windows will be downloaded. But you can add the `LANGUAGE` environment variable to your compose file, in order to specify an alternative language: + + ```yaml + environment: + LANGUAGE: "French" + ``` + + You can choose between: 🇦🇪 Arabic, 🇧🇬 Bulgarian, 🇨🇳 Chinese, 🇭🇷 Croatian, 🇨🇿 Czech, 🇩🇰 Danish, 🇳🇱 Dutch, 🇬🇧 English, 🇪🇪 Estionian, 🇫🇮 Finnish, 🇫🇷 French, 🇩🇪 German, 🇬🇷 Greek, 🇮🇱 Hebrew, 🇭🇺 Hungarian, 🇮🇹 Italian, 🇯🇵 Japanese, 🇰🇷 Korean, 🇱🇻 Latvian, 🇱🇹 Lithuanian, 🇳🇴 Norwegian, 🇵🇱 Polish, 🇵🇹 Portuguese, 🇷🇴 Romanian, 🇷🇺 Russian, 🇷🇸 Serbian, 🇸🇰 Slovak, 🇸🇮 Slovenian, 🇪🇸 Spanish, 🇸🇪 Swedish, 🇹🇭 Thai, 🇹🇷 Turkish and 🇺🇦 Ukrainian. + +### How do I select the keyboard layout? + + If you want to use a keyboard layout or locale that is not the default for your selected language, you can add the `KEYBOARD` and `REGION` variables with a culture code, like this: + + ```yaml + environment: + REGION: "en-US" + KEYBOARD: "en-US" + ``` + +> [!NOTE] +> Changing these values will have no effect after the installation has been performed already. Use the control panel inside Windows in that case. +> + ### How do I connect using RDP? The web-viewer is mainly meant to be used during installation, as its picture quality is low, and it has no audio or clipboard for example. From 42d4e075d8f78e8b7d8c829700f0dc658d400c11 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 10 Oct 2024 21:15:18 +0200 Subject: [PATCH 055/290] feat: Disable SMB signing requirement (#787) --- assets/win11x64-enterprise-eval.xml | 43 +++++++++++++++------------- assets/win11x64-enterprise.xml | 44 ++++++++++++++++------------- assets/win11x64-iot.xml | 43 +++++++++++++++------------- assets/win11x64-ltsc.xml | 43 +++++++++++++++------------- assets/win11x64.xml | 43 +++++++++++++++------------- assets/win2025-eval.xml | 41 +++++++++++++++------------ assets/win2025.xml | 41 +++++++++++++++------------ 7 files changed, 167 insertions(+), 131 deletions(-) diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index c0045d3..555d1f4 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -343,101 +343,106 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable SMB signing requirement</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> <Description>Allow RDP login with blank password</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>3</Order> + <Order>4</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> <Description>Enable option for passwordless sign-in</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>4</Order> + <Order>5</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>5</Order> + <Order>6</Order> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>6</Order> + <Order>7</Order> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>7</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index 9800436..88983f0 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -346,101 +346,106 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable SMB signing requirement</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> <Description>Allow RDP login with blank password</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>3</Order> + <Order>4</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> <Description>Enable option for passwordless sign-in</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>4</Order> + <Order>5</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>5</Order> + <Order>6</Order> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>6</Order> + <Order>7</Order> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>7</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -448,3 +453,4 @@ </component> </settings> </unattend> + diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml index eeef008..79fc392 100644 --- a/assets/win11x64-iot.xml +++ b/assets/win11x64-iot.xml @@ -352,101 +352,106 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable SMB signing requirement</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> <Description>Allow RDP login with blank password</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>3</Order> + <Order>4</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> <Description>Enable option for passwordless sign-in</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>4</Order> + <Order>5</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>5</Order> + <Order>6</Order> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>6</Order> + <Order>7</Order> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>7</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml index c4c35db..584ff9e 100644 --- a/assets/win11x64-ltsc.xml +++ b/assets/win11x64-ltsc.xml @@ -352,101 +352,106 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable SMB signing requirement</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> <Description>Allow RDP login with blank password</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>3</Order> + <Order>4</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> <Description>Enable option for passwordless sign-in</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>4</Order> + <Order>5</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>5</Order> + <Order>6</Order> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>6</Order> + <Order>7</Order> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>7</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index 4877868..71ecdf9 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -346,101 +346,106 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable SMB signing requirement</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> <Description>Allow RDP login with blank password</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>3</Order> + <Order>4</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> <Description>Enable option for passwordless sign-in</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>4</Order> + <Order>5</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>5</Order> + <Order>6</Order> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>6</Order> + <Order>7</Order> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>7</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml index 1ee2b54..70aa09c 100644 --- a/assets/win2025-eval.xml +++ b/assets/win2025-eval.xml @@ -242,96 +242,101 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable SMB signing requirement</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> <Description>Allow RDP login with blank password</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>3</Order> + <Order>4</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> <Description>Enable option for passwordless sign-in</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>4</Order> + <Order>5</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>5</Order> + <Order>6</Order> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>6</Order> + <Order>7</Order> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>7</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2025.xml b/assets/win2025.xml index c0801b0..66871a5 100644 --- a/assets/win2025.xml +++ b/assets/win2025.xml @@ -245,96 +245,101 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable SMB signing requirement</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> <Description>Allow RDP login with blank password</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>3</Order> + <Order>4</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> <Description>Enable option for passwordless sign-in</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>4</Order> + <Order>5</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>5</Order> + <Order>6</Order> <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>6</Order> + <Order>7</Order> <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> <Description>Disable monitor blanking</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>7</Order> + <Order>8</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> <Description>Disable first-run experience in Edge</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>8</Order> + <Order>9</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>9</Order> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> From a2208ace94ff0158f79fcbd89ff5dc713deb916f Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 10 Oct 2024 23:15:46 +0200 Subject: [PATCH 056/290] fix: Workaround VirtIO display driver bug (#788) --- assets/win11x64-enterprise-eval.xml | 5 +++++ assets/win11x64-enterprise.xml | 5 +++++ assets/win11x64-iot.xml | 5 +++++ assets/win11x64-ltsc.xml | 5 +++++ assets/win11x64.xml | 5 +++++ assets/win2025-eval.xml | 5 +++++ assets/win2025.xml | 5 +++++ src/install.sh | 4 ++++ 8 files changed, 39 insertions(+) diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index 555d1f4..3072a69 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -443,6 +443,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</CommandLine> + <Description>Install VirtIO display driver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index 88983f0..ffb0d72 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -446,6 +446,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</CommandLine> + <Description>Install VirtIO display driver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml index 79fc392..96d29e1 100644 --- a/assets/win11x64-iot.xml +++ b/assets/win11x64-iot.xml @@ -452,6 +452,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</CommandLine> + <Description>Install VirtIO display driver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml index 584ff9e..8a680e5 100644 --- a/assets/win11x64-ltsc.xml +++ b/assets/win11x64-ltsc.xml @@ -452,6 +452,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</CommandLine> + <Description>Install VirtIO display driver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index 71ecdf9..ca65c1a 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -446,6 +446,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</CommandLine> + <Description>Install VirtIO display driver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml index 70aa09c..fc44ff1 100644 --- a/assets/win2025-eval.xml +++ b/assets/win2025-eval.xml @@ -337,6 +337,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> + <CommandLine>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</CommandLine> + <Description>Install VirtIO display driver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2025.xml b/assets/win2025.xml index 66871a5..2c53caf 100644 --- a/assets/win2025.xml +++ b/assets/win2025.xml @@ -340,6 +340,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> + <CommandLine>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</CommandLine> + <Description>Install VirtIO display driver</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/src/install.sh b/src/install.sh index a1c290a..cf9cac1 100644 --- a/src/install.sh +++ b/src/install.sh @@ -701,6 +701,9 @@ addDriver() { "winvista"* ) [[ "${driver,,}" == "viorng" ]] && return 0 ;; + "win11x64"* | "win2025"* ) + [[ "${driver,,}" == "viogpudo" ]] && return 0 + ;; esac local dest="$path/$target/$driver" @@ -737,6 +740,7 @@ addDrivers() { addDriver "$version" "$drivers" "$target" "smbus" addDriver "$version" "$drivers" "$target" "qxldod" addDriver "$version" "$drivers" "$target" "viorng" + addDriver "$version" "$drivers" "$target" "viomem" addDriver "$version" "$drivers" "$target" "viostor" addDriver "$version" "$drivers" "$target" "NetKVM" addDriver "$version" "$drivers" "$target" "Balloon" From 5bd88a5cc8be9b86f7a4910e8d7ee2da402017e8 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 10 Oct 2024 23:53:41 +0200 Subject: [PATCH 057/290] fix: Workaround VirtIO display driver bug (#790) --- src/install.sh | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/install.sh b/src/install.sh index cf9cac1..7f87fd1 100644 --- a/src/install.sh +++ b/src/install.sh @@ -701,9 +701,6 @@ addDriver() { "winvista"* ) [[ "${driver,,}" == "viorng" ]] && return 0 ;; - "win11x64"* | "win2025"* ) - [[ "${driver,,}" == "viogpudo" ]] && return 0 - ;; esac local dest="$path/$target/$driver" @@ -714,9 +711,10 @@ addDriver() { addDrivers() { - local file="$1" - local index="$2" - local version="$3" + local src="$1" + local file="$2" + local index="$3" + local version="$4" local msg="Adding drivers to image..." info "$msg" && html "$msg" @@ -751,6 +749,16 @@ addDrivers() { addDriver "$version" "$drivers" "$target" "vioserial" addDriver "$version" "$drivers" "$target" "qemupciserial" + case "${version,,}" in + "win11x64"* | "win2025"* ) + # Workaround Virtio GPU driver bug + local dst="$src/\$OEM\$/\$\$/Drivers" + mkdir -p "$dst" + ! cp -a "$dest/." "$dst" && return 1 + rm -rf "$dest/viogpudo" + ;; + esac + if ! wimlib-imagex update "$file" "$index" --command "add $dest /$target" >/dev/null; then return 1 fi @@ -772,10 +780,10 @@ addFolder() { local msg="Adding OEM folder to image..." info "$msg" && html "$msg" - local dest="$src/\$OEM\$/\$1/" + local dest="$src/\$OEM\$/\$1/OEM" mkdir -p "$dest" - ! cp -r "$folder" "$dest" && return 1 + ! cp -a "$folder/." "$dest" && return 1 local file file=$(find "$dest" -maxdepth 1 -type f -iname install.bat | head -n 1) @@ -824,7 +832,7 @@ updateImage() { index="2" fi - if ! addDrivers "$wim" "$index" "$DETECTED"; then + if ! addDrivers "$src" "$wim" "$index" "$DETECTED"; then error "Failed to add drivers to image!" && return 1 fi From d06591f2a1458bfea22c406be5c90f57c1701df4 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 11 Oct 2024 01:00:07 +0200 Subject: [PATCH 058/290] feat: Remove empty Windows.old folder (#791) --- assets/win11x64-enterprise-eval.xml | 5 +++++ assets/win11x64-enterprise.xml | 5 +++++ assets/win11x64-iot.xml | 5 +++++ assets/win11x64-ltsc.xml | 5 +++++ assets/win11x64.xml | 5 +++++ assets/win2025-eval.xml | 5 +++++ assets/win2025.xml | 5 +++++ 7 files changed, 35 insertions(+) diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index 3072a69..72dc300 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -448,6 +448,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>rd /q c:\Windows.old 2>nul</CommandLine> + <Description>Remove empty Windows.old folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index ffb0d72..56fa786 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -451,6 +451,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>rd /q c:\Windows.old 2>nul</CommandLine> + <Description>Remove empty Windows.old folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml index 96d29e1..68f74f6 100644 --- a/assets/win11x64-iot.xml +++ b/assets/win11x64-iot.xml @@ -457,6 +457,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>rd /q c:\Windows.old 2>nul</CommandLine> + <Description>Remove empty Windows.old folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml index 8a680e5..1024334 100644 --- a/assets/win11x64-ltsc.xml +++ b/assets/win11x64-ltsc.xml @@ -457,6 +457,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>rd /q c:\Windows.old 2>nul</CommandLine> + <Description>Remove empty Windows.old folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index ca65c1a..61aad2e 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -451,6 +451,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>rd /q c:\Windows.old 2>nul</CommandLine> + <Description>Remove empty Windows.old folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml index fc44ff1..73801c5 100644 --- a/assets/win2025-eval.xml +++ b/assets/win2025-eval.xml @@ -342,6 +342,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>rd /q c:\Windows.old 2>nul</CommandLine> + <Description>Remove empty Windows.old folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2025.xml b/assets/win2025.xml index 2c53caf..a641959 100644 --- a/assets/win2025.xml +++ b/assets/win2025.xml @@ -345,6 +345,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>rd /q c:\Windows.old 2>nul</CommandLine> + <Description>Remove empty Windows.old folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> From 94a84b0c2d5b692e03b032fcf1a0854bbcfbff79 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 11 Oct 2024 11:33:50 +0200 Subject: [PATCH 059/290] feat: Remove empty Windows.old folder (#793) --- assets/win11x64-enterprise-eval.xml | 2 +- assets/win11x64-enterprise.xml | 2 +- assets/win11x64-iot.xml | 2 +- assets/win11x64-ltsc.xml | 2 +- assets/win11x64.xml | 2 +- assets/win2025-eval.xml | 2 +- assets/win2025.xml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index 72dc300..b8c3cbf 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -448,7 +448,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> - <CommandLine>rd /q c:\Windows.old 2>nul</CommandLine> + <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index 56fa786..fc8562a 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -451,7 +451,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> - <CommandLine>rd /q c:\Windows.old 2>nul</CommandLine> + <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml index 68f74f6..89aa0d6 100644 --- a/assets/win11x64-iot.xml +++ b/assets/win11x64-iot.xml @@ -457,7 +457,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> - <CommandLine>rd /q c:\Windows.old 2>nul</CommandLine> + <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml index 1024334..545ea88 100644 --- a/assets/win11x64-ltsc.xml +++ b/assets/win11x64-ltsc.xml @@ -457,7 +457,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> - <CommandLine>rd /q c:\Windows.old 2>nul</CommandLine> + <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index 61aad2e..3130bb4 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -451,7 +451,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> - <CommandLine>rd /q c:\Windows.old 2>nul</CommandLine> + <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml index 73801c5..9d90c77 100644 --- a/assets/win2025-eval.xml +++ b/assets/win2025-eval.xml @@ -342,7 +342,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>rd /q c:\Windows.old 2>nul</CommandLine> + <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win2025.xml b/assets/win2025.xml index a641959..7e543a2 100644 --- a/assets/win2025.xml +++ b/assets/win2025.xml @@ -345,7 +345,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>rd /q c:\Windows.old 2>nul</CommandLine> + <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> From 5f4c0938ac5020b60c719beb385d996b38a7af20 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 12 Oct 2024 14:26:04 +0200 Subject: [PATCH 060/290] feat: Extract temporary files to RAM (#796) --- src/define.sh | 7 ++++--- src/install.sh | 46 +++++++++++++++++++++++----------------------- 2 files changed, 27 insertions(+), 26 deletions(-) diff --git a/src/define.sh b/src/define.sh index 065ff3e..cd214df 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1665,7 +1665,10 @@ prepareInstall() { local arch="$4" local key="$5" local driver="$6" - local drivers="$TMP/drivers" + local drivers="/run/shm/drivers" + + rm -rf "$drivers" + mkdir -p "$drivers" ETFS="[BOOT]/Boot-NoEmul.img" @@ -1676,8 +1679,6 @@ prepareInstall() { local msg="Adding drivers to image..." info "$msg" && html "$msg" - mkdir -p "$drivers" - if ! tar -xf /drivers.txz -C "$drivers" --warning=no-timestamp; then error "Failed to extract drivers!" && return 1 fi diff --git a/src/install.sh b/src/install.sh index 7f87fd1..32f2f68 100644 --- a/src/install.sh +++ b/src/install.sh @@ -561,7 +561,7 @@ detectImage() { if [[ "${LANGUAGE,,}" != "en" ]] && [[ "${LANGUAGE,,}" != "en-"* ]]; then language=$(getLanguage "$LANGUAGE" "desc") - desc=+" ($language)" + desc+=" ($language)" fi info "Detected: $desc" @@ -712,18 +712,20 @@ addDriver() { addDrivers() { local src="$1" - local file="$2" - local index="$3" - local version="$4" + local tmp="$2" + local file="$3" + local index="$4" + local version="$5" + local drivers="$tmp/drivers" + + rm -rf "$drivers" + mkdir -p "$drivers" local msg="Adding drivers to image..." info "$msg" && html "$msg" - local drivers="$TMP/drivers" - mkdir -p "$drivers" - if ! tar -xf /drivers.txz -C "$drivers" --warning=no-timestamp; then - error "Failed to extract driver!" && return 1 + error "Failed to extract drivers from archive!" && return 1 fi local target="\$WinPEDriver\$" @@ -738,8 +740,8 @@ addDrivers() { addDriver "$version" "$drivers" "$target" "smbus" addDriver "$version" "$drivers" "$target" "qxldod" addDriver "$version" "$drivers" "$target" "viorng" - addDriver "$version" "$drivers" "$target" "viomem" addDriver "$version" "$drivers" "$target" "viostor" + addDriver "$version" "$drivers" "$target" "viomem" addDriver "$version" "$drivers" "$target" "NetKVM" addDriver "$version" "$drivers" "$target" "Balloon" addDriver "$version" "$drivers" "$target" "vioscsi" @@ -797,6 +799,7 @@ updateImage() { local dir="$1" local asset="$2" local language="$3" + local tmp="/run/shm/img" local file="autounattend.xml" local org="${file//.xml/.org}" local dat="${file//.xml/.dat}" @@ -812,6 +815,9 @@ updateImage() { fi fi + rm -rf "$tmp" + mkdir -p "$tmp" + src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1) if [ ! -d "$src" ]; then @@ -832,7 +838,7 @@ updateImage() { index="2" fi - if ! addDrivers "$src" "$wim" "$index" "$DETECTED"; then + if ! addDrivers "$src" "$tmp" "$wim" "$index" "$DETECTED"; then error "Failed to add drivers to image!" && return 1 fi @@ -840,17 +846,14 @@ updateImage() { error "Failed to add OEM folder to image!" && return 1 fi - if wimlib-imagex extract "$wim" "$index" "/$file" "--dest-dir=$TMP" >/dev/null 2>&1; then - if ! wimlib-imagex extract "$wim" "$index" "/$dat" "--dest-dir=$TMP" >/dev/null 2>&1; then - if ! wimlib-imagex extract "$wim" "$index" "/$org" "--dest-dir=$TMP" >/dev/null 2>&1; then + if wimlib-imagex extract "$wim" "$index" "/$file" "--dest-dir=$tmp" >/dev/null 2>&1; then + if ! wimlib-imagex extract "$wim" "$index" "/$dat" "--dest-dir=$tmp" >/dev/null 2>&1; then + if ! wimlib-imagex extract "$wim" "$index" "/$org" "--dest-dir=$tmp" >/dev/null 2>&1; then if ! wimlib-imagex update "$wim" "$index" --command "rename /$file /$org" > /dev/null; then warn "failed to backup original answer file ($file)." fi fi fi - rm -f "$TMP/$dat" - rm -f "$TMP/$org" - rm -f "$TMP/$file" fi if [[ "$MANUAL" != [Yy1]* ]]; then @@ -858,7 +861,7 @@ updateImage() { xml=$(basename "$asset") info "Adding $xml for automatic installation..." - local answer="$TMP/$xml" + local answer="$tmp/$xml" cp "$asset" "$answer" updateXML "$answer" "$language" @@ -869,22 +872,18 @@ updateImage() { wimlib-imagex update "$wim" "$index" --command "add $answer /$dat" > /dev/null || true fi - rm -f "$answer" - fi if [[ "$MANUAL" == [Yy1]* ]]; then wimlib-imagex update "$wim" "$index" --command "delete --force /$file" > /dev/null || true - if wimlib-imagex extract "$wim" "$index" "/$org" "--dest-dir=$TMP" >/dev/null 2>&1; then - if ! wimlib-imagex update "$wim" "$index" --command "add $TMP/$org /$file" > /dev/null; then + if wimlib-imagex extract "$wim" "$index" "/$org" "--dest-dir=$tmp" >/dev/null 2>&1; then + if ! wimlib-imagex update "$wim" "$index" --command "add $tmp/$org /$file" > /dev/null; then warn "failed to restore original answer file ($org)." fi fi - rm -f "$TMP/$org" - fi local find="$file" @@ -899,6 +898,7 @@ updateImage() { fi fi + rm -rf "$tmp" return 0 } From 0dabce04a6fc78347dfc130557f7a579d74bfeb1 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 12 Oct 2024 15:52:51 +0200 Subject: [PATCH 061/290] docs: Features (#797) --- readme.md | 1 - 1 file changed, 1 deletion(-) diff --git a/readme.md b/readme.md index c1c88c2..24a262c 100644 --- a/readme.md +++ b/readme.md @@ -16,7 +16,6 @@ Windows inside a Docker container. ## Features ✨ - - Multi-language - ISO downloader - KVM acceleration - Web-based viewer From 9db3651654544558ded41db510b14861d29a04f2 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 12 Oct 2024 16:54:35 +0200 Subject: [PATCH 062/290] feat: Select LTSC edition based on key (#798) --- assets/win11x64-iot.xml | 8 +------- assets/win11x64-ltsc.xml | 8 +------- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml index 89aa0d6..0de7bb4 100644 --- a/assets/win11x64-iot.xml +++ b/assets/win11x64-iot.xml @@ -61,12 +61,6 @@ </DiskConfiguration> <ImageInstall> <OSImage> - <InstallFrom> - <MetaData wcm:action="add"> - <Key>/image/index</Key> - <Value>2</Value> - </MetaData> - </InstallFrom> <InstallTo> <DiskID>0</DiskID> <PartitionID>3</PartitionID> @@ -87,7 +81,7 @@ <FullName>Docker</FullName> <Organization>Windows for Docker</Organization> <ProductKey> - <Key /> + <Key>CGK42-GYN6Y-VD22B-BX98W-J8JXD</Key> </ProductKey> </UserData> <EnableFirewall>false</EnableFirewall> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml index 545ea88..8e42eb6 100644 --- a/assets/win11x64-ltsc.xml +++ b/assets/win11x64-ltsc.xml @@ -61,12 +61,6 @@ </DiskConfiguration> <ImageInstall> <OSImage> - <InstallFrom> - <MetaData wcm:action="add"> - <Key>/image/index</Key> - <Value>1</Value> - </MetaData> - </InstallFrom> <InstallTo> <DiskID>0</DiskID> <PartitionID>3</PartitionID> @@ -87,7 +81,7 @@ <FullName>Docker</FullName> <Organization>Windows for Docker</Organization> <ProductKey> - <Key /> + <Key>M7XTQ-FN8P6-TTKYV-9D4CC-J462D</Key> </ProductKey> </UserData> <EnableFirewall>false</EnableFirewall> From edb300dfec9cce9caf44415cb4d4e68f4579b994 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 12 Oct 2024 18:09:13 +0200 Subject: [PATCH 063/290] feat: Additional download mirrors (#799) --- src/mido.sh | 44 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/src/mido.sh b/src/mido.sh index 454e83f..0c6b58e 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -309,7 +309,7 @@ getWindows() { info "$msg" && html "$msg" case "${version,,}" in - "win2008r2" | "win81${PLATFORM,,}-enterprise-eval" | "win11${PLATFORM,,}-enterprise-iot-eval" ) + "win2008r2" | "win81${PLATFORM,,}-enterprise"* | "win11${PLATFORM,,}-enterprise-iot-eval" ) if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then error "No download in the $language language available for $edition!" MIDO_URL="" && return 1 @@ -336,15 +336,47 @@ getWindows() { "win2025-eval" | "win2022-eval" | "win2019-eval" | "win2016-eval" | "win2012r2-eval" ) download_windows_eval "$version" "$lang" "$edition" && return 0 ;; - "win81${PLATFORM,,}-enterprise-eval" ) - MIDO_URL="https://download.microsoft.com/download/B/9/9/B999286E-0A47-406D-8B3D-5B5AD7373A4A/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_ENTERPRISE_EVAL_EN-US-IR3_CENA_X64FREE_EN-US_DV9.ISO" && return 0 - ;; - "win2008r2" ) - MIDO_URL="https://download.microsoft.com/download/4/1/D/41DEA7E0-B30D-4012-A1E3-F24DC03BA1BB/7601.17514.101119-1850_x64fre_server_eval_en-us-GRMSXEVAL_EN_DVD.iso" && return 0 + "win81${PLATFORM,,}-enterprise"* | "win2008r2" ) ;; * ) error "Invalid VERSION specified, value \"$version\" is not recognized!" ;; esac + if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then + MIDO_URL="" + return 1 + fi + + case "${version,,}" in + "win81${PLATFORM,,}-enterprise"* ) + MIDO_URL="https://download.microsoft.com/download/B/9/9/B999286E-0A47-406D-8B3D-5B5AD7373A4A/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_ENTERPRISE_EVAL_EN-US-IR3_CENA_X64FREE_EN-US_DV9.ISO" + return 0 + ;; + "win2025-eval" ) + MIDO_URL="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_SERVER_EVAL_x64FRE_en-us.iso" + return 0 + ;; + "win2022-eval" ) + MIDO_URL="https://software-static.download.prss.microsoft.com/sg/download/888969d5-f34g-4e03-ac9d-1f9786c66749/SERVER_EVAL_x64FRE_en-us.iso" + return 0 + ;; + "win2019-eval" ) + MIDO_URL="https://software-download.microsoft.com/download/pr/17763.737.190906-2324.rs5_release_svc_refresh_SERVER_EVAL_x64FRE_en-us_1.iso" + return 0 + ;; + "win2016-eval" ) + MIDO_URL="https://software-download.microsoft.com/download/pr/Windows_Server_2016_Datacenter_EVAL_en-us_14393_refresh.ISO" + return 0 + ;; + "win2012r2-eval" ) + MIDO_URL="https://download.microsoft.com/download/6/2/A/62A76ABB-9990-4EFC-A4FE-C7D698DAEB96/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_SERVER_EVAL_EN-US-IR3_SSS_X64FREE_EN-US_DV9.ISO" + return 0 + ;; + "win2008r2" ) + MIDO_URL="https://download.microsoft.com/download/4/1/D/41DEA7E0-B30D-4012-A1E3-F24DC03BA1BB/7601.17514.101119-1850_x64fre_server_eval_en-us-GRMSXEVAL_EN_DVD.iso" + return 0 + ;; + esac + MIDO_URL="" return 1 } From ff55f843bd75082c6fff613a43027226baf3a2fe Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 12 Oct 2024 19:02:03 +0200 Subject: [PATCH 064/290] feat: Additional download mirrors (#801) --- src/mido.sh | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/mido.sh b/src/mido.sh index 0c6b58e..079f9f2 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -309,7 +309,7 @@ getWindows() { info "$msg" && html "$msg" case "${version,,}" in - "win2008r2" | "win81${PLATFORM,,}-enterprise"* | "win11${PLATFORM,,}-enterprise-iot-eval" ) + "win2008r2" | "win81${PLATFORM,,}-enterprise"* | "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* ) if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then error "No download in the $language language available for $edition!" MIDO_URL="" && return 1 @@ -317,8 +317,8 @@ getWindows() { esac case "${version,,}" in - "win11${PLATFORM,,}-enterprise-iot-eval" ) ;; - "win11${PLATFORM,,}-enterprise-ltsc-eval" ) ;; + "win11${PLATFORM,,}-enterprise-iot"* ) ;; + "win11${PLATFORM,,}-enterprise-ltsc"* ) ;; * ) if [[ "${PLATFORM,,}" != "x64" ]]; then error "No download for the ${PLATFORM^^} platform available for $edition!" @@ -341,6 +341,11 @@ getWindows() { * ) error "Invalid VERSION specified, value \"$version\" is not recognized!" ;; esac + if [[ "${PLATFORM,,}" != "x64" ]]; then + MIDO_URL="" + return 1 + fi + if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then MIDO_URL="" return 1 @@ -351,6 +356,10 @@ getWindows() { MIDO_URL="https://download.microsoft.com/download/B/9/9/B999286E-0A47-406D-8B3D-5B5AD7373A4A/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_ENTERPRISE_EVAL_EN-US-IR3_CENA_X64FREE_EN-US_DV9.ISO" return 0 ;; + "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* ) + MIDO_URL="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_CLIENT_IOT_LTSC_EVAL_x64FRE_en-us.iso" + return 0 + ;; "win2025-eval" ) MIDO_URL="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_SERVER_EVAL_x64FRE_en-us.iso" return 0 From 3cab3d1c7bd7de8d7347b61c884e970a51b6d661 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 13 Oct 2024 11:28:21 +0200 Subject: [PATCH 065/290] feat: Extract drivers to temporary folder (#803) --- src/define.sh | 64 +++++++++++++++++++++++++++----------------------- src/install.sh | 32 ++++--------------------- 2 files changed, 38 insertions(+), 58 deletions(-) diff --git a/src/define.sh b/src/define.sh index cd214df..1b4bd77 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1637,6 +1637,31 @@ validVersion() { return 1 } +addFolder() { + + local src="$1" + local folder="/oem" + + [ ! -d "$folder" ] && folder="/OEM" + [ ! -d "$folder" ] && folder="$STORAGE/oem" + [ ! -d "$folder" ] && folder="$STORAGE/OEM" + [ ! -d "$folder" ] && return 0 + + local msg="Adding OEM folder to image..." + info "$msg" && html "$msg" + + local dest="$src/\$OEM\$/\$1/OEM" + mkdir -p "$dest" + + ! cp -Lr "$folder/." "$dest" && return 1 + + local file + file=$(find "$dest" -maxdepth 1 -type f -iname install.bat | head -n 1) + [ -f "$file" ] && unix2dos -q "$file" + + return 0 +} + migrateFiles() { local base="$1" @@ -1665,7 +1690,7 @@ prepareInstall() { local arch="$4" local key="$5" local driver="$6" - local drivers="/run/shm/drivers" + local drivers="/tmp/drivers" rm -rf "$drivers" mkdir -p "$drivers" @@ -1723,8 +1748,8 @@ prepareInstall() { fi mkdir -p "$dir/\$OEM\$/\$1/Drivers/sata" - cp -a "$drivers/sata/xp/$arch/." "$dir/\$OEM\$/\$1/Drivers/sata" - cp -a "$drivers/sata/xp/$arch/." "$target" + cp -Lr "$drivers/sata/xp/$arch/." "$dir/\$OEM\$/\$1/Drivers/sata" + cp -Lr "$drivers/sata/xp/$arch/." "$target" sed -i '/^\[SCSI.Load\]/s/$/\niaStor=iaStor.sys,4/' "$target/TXTSETUP.SIF" sed -i '/^\[FileFlags\]/s/$/\niaStor.sys = 16/' "$target/TXTSETUP.SIF" @@ -1749,23 +1774,14 @@ prepareInstall() { warn "this version of $desc requires a volume license key (VLK), it will ask for one during installation." fi - local oem="" - local folder="/oem" - - [ ! -d "$folder" ] && folder="/OEM" - [ ! -d "$folder" ] && folder="$STORAGE/oem" - [ ! -d "$folder" ] && folder="$STORAGE/OEM" - - if [ -d "$folder" ]; then - - file=$(find "$folder" -maxdepth 1 -type f -iname install.bat | head -n 1) - - if [ -f "$file" ]; then - unix2dos -q "$file" - oem="\"Script\"=\"cmd /C start \\\"Install\\\" \\\"cmd /C C:\\\\OEM\\\\install.bat\\\"\"" - fi + if ! addFolder "$dir"; then + error "Failed to add OEM folder to image!" && return 1 fi + local oem="" + local install="$dir/\$OEM\$/\$1/OEM/install.bat" + [ -f "$install" ] && oem="\"Script\"=\"cmd /C start \\\"Install\\\" \\\"cmd /C C:\\\\OEM\\\\install.bat\\\"\"" + [ -z "$YRES" ] && YRES="720" [ -z "$XRES" ] && XRES="1280" @@ -1958,18 +1974,6 @@ prepareInstall() { echo "" } | unix2dos > "$dir/\$OEM\$/cmdlines.txt" - [ ! -d "$folder" ] && return 0 - - msg="Adding OEM folder to image..." - info "$msg" && html "$msg" - - local dest="$dir/\$OEM\$/\$1/" - mkdir -p "$dest" - - if ! cp -r "$folder" "$dest"; then - error "Failed to copy OEM folder!" && return 1 - fi - return 0 } diff --git a/src/install.sh b/src/install.sh index 32f2f68..f6cad16 100644 --- a/src/install.sh +++ b/src/install.sh @@ -704,8 +704,9 @@ addDriver() { esac local dest="$path/$target/$driver" - mv "$path/$driver/$folder" "$dest" + mkdir -p "$dest" + cp -Lr "$path/$driver/$folder/." "$dest" return 0 } @@ -756,7 +757,7 @@ addDrivers() { # Workaround Virtio GPU driver bug local dst="$src/\$OEM\$/\$\$/Drivers" mkdir -p "$dst" - ! cp -a "$dest/." "$dst" && return 1 + ! cp -Lr "$dest/." "$dst" && return 1 rm -rf "$dest/viogpudo" ;; esac @@ -769,37 +770,12 @@ addDrivers() { return 0 } -addFolder() { - - local src="$1" - local folder="/oem" - - [ ! -d "$folder" ] && folder="/OEM" - [ ! -d "$folder" ] && folder="$STORAGE/oem" - [ ! -d "$folder" ] && folder="$STORAGE/OEM" - [ ! -d "$folder" ] && return 0 - - local msg="Adding OEM folder to image..." - info "$msg" && html "$msg" - - local dest="$src/\$OEM\$/\$1/OEM" - mkdir -p "$dest" - - ! cp -a "$folder/." "$dest" && return 1 - - local file - file=$(find "$dest" -maxdepth 1 -type f -iname install.bat | head -n 1) - [ -f "$file" ] && unix2dos -q "$file" - - return 0 -} - updateImage() { local dir="$1" local asset="$2" local language="$3" - local tmp="/run/shm/img" + local tmp="/tmp/install" local file="autounattend.xml" local org="${file//.xml/.org}" local dat="${file//.xml/.dat}" From 16c3a047c2ca6e5bfbff0f135a49003276ad645c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 13 Oct 2024 12:00:31 +0200 Subject: [PATCH 066/290] fix: Shared folder mount (#804) --- readme.md | 2 +- src/samba.sh | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/readme.md b/readme.md index 24a262c..2e98468 100644 --- a/readme.md +++ b/readme.md @@ -139,7 +139,7 @@ kubectl apply -f kubernetes.yml ```yaml volumes: - - /home/user/example:/shared + - /home/user/example:/data ``` The example folder `/home/user/example` will be available as ` \\host.lan\Data`. diff --git a/src/samba.sh b/src/samba.sh index 71f9bcf..6a65095 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -14,7 +14,15 @@ if [[ "$DHCP" == [Yy1]* ]]; then interface="$VM_NET_DEV" fi -share="/shared" +share="/data" + +if [ ! -d "$share" ] && [ -d "$STORAGE/data" ]; then + share="$STORAGE/data" +fi + +if [ ! -d "$share" ] && [ -d "/shared" ]; then + share="/shared" +fi if [ ! -d "$share" ] && [ -d "$STORAGE/shared" ]; then share="$STORAGE/shared" @@ -36,11 +44,11 @@ if [ -z "$(ls -A "$share")" ]; then echo "To change its location, include the following bind mount in your compose file:" echo "" echo " volumes:" - echo " - \"/home/user/example:/shared\"" + echo " - \"/home/user/example:/data\"" echo "" echo "Or in your run command:" echo "" - echo " -v \"/home/user/example:/shared\"" + echo " -v \"/home/user/example:/data\"" echo "" echo "Replace the example path /home/user/example with the desired shared folder." echo "" From a659c1c9da635a5f594fbb2450be3edb834a2b21 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 13 Oct 2024 21:14:38 +0200 Subject: [PATCH 067/290] feat: Use bsdtar to extract driver archive (#805) --- Dockerfile | 3 ++- src/define.sh | 2 +- src/install.sh | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 74540dc..a8e4197 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,7 +19,8 @@ RUN set -eu && \ dos2unix \ cabextract \ genisoimage \ - libxml2-utils && \ + libxml2-utils \ + libarchive-tools && \ apt-get clean && \ echo "$VERSION_ARG" > /run/version && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* diff --git a/src/define.sh b/src/define.sh index 1b4bd77..2fc1b1d 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1704,7 +1704,7 @@ prepareInstall() { local msg="Adding drivers to image..." info "$msg" && html "$msg" - if ! tar -xf /drivers.txz -C "$drivers" --warning=no-timestamp; then + if ! bsdtar -xf /drivers.txz -C "$drivers"; then error "Failed to extract drivers!" && return 1 fi diff --git a/src/install.sh b/src/install.sh index f6cad16..b0c58ff 100644 --- a/src/install.sh +++ b/src/install.sh @@ -725,7 +725,7 @@ addDrivers() { local msg="Adding drivers to image..." info "$msg" && html "$msg" - if ! tar -xf /drivers.txz -C "$drivers" --warning=no-timestamp; then + if ! bsdtar -xf /drivers.txz -C "$drivers"; then error "Failed to extract drivers from archive!" && return 1 fi From 955f8a08a0584a514583535ce5fc50f7f718902a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 14 Oct 2024 01:03:52 +0200 Subject: [PATCH 068/290] fix: Dereference symbolic links (#806) --- src/define.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/define.sh b/src/define.sh index 2fc1b1d..7a1c705 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1715,21 +1715,21 @@ prepareInstall() { error "Failed to locate required storage drivers!" && return 1 fi - cp "$drivers/viostor/$driver/$arch/viostor.sys" "$target" + cp -L "$drivers/viostor/$driver/$arch/viostor.sys" "$target" mkdir -p "$dir/\$OEM\$/\$1/Drivers/viostor" - cp "$drivers/viostor/$driver/$arch/viostor.cat" "$dir/\$OEM\$/\$1/Drivers/viostor" - cp "$drivers/viostor/$driver/$arch/viostor.inf" "$dir/\$OEM\$/\$1/Drivers/viostor" - cp "$drivers/viostor/$driver/$arch/viostor.sys" "$dir/\$OEM\$/\$1/Drivers/viostor" + cp -L "$drivers/viostor/$driver/$arch/viostor.cat" "$dir/\$OEM\$/\$1/Drivers/viostor" + cp -L "$drivers/viostor/$driver/$arch/viostor.inf" "$dir/\$OEM\$/\$1/Drivers/viostor" + cp -L "$drivers/viostor/$driver/$arch/viostor.sys" "$dir/\$OEM\$/\$1/Drivers/viostor" if [ ! -f "$drivers/NetKVM/$driver/$arch/netkvm.sys" ]; then error "Failed to locate required network drivers!" && return 1 fi mkdir -p "$dir/\$OEM\$/\$1/Drivers/NetKVM" - cp "$drivers/NetKVM/$driver/$arch/netkvm.cat" "$dir/\$OEM\$/\$1/Drivers/NetKVM" - cp "$drivers/NetKVM/$driver/$arch/netkvm.inf" "$dir/\$OEM\$/\$1/Drivers/NetKVM" - cp "$drivers/NetKVM/$driver/$arch/netkvm.sys" "$dir/\$OEM\$/\$1/Drivers/NetKVM" + cp -L "$drivers/NetKVM/$driver/$arch/netkvm.cat" "$dir/\$OEM\$/\$1/Drivers/NetKVM" + cp -L "$drivers/NetKVM/$driver/$arch/netkvm.inf" "$dir/\$OEM\$/\$1/Drivers/NetKVM" + cp -L "$drivers/NetKVM/$driver/$arch/netkvm.sys" "$dir/\$OEM\$/\$1/Drivers/NetKVM" if [ ! -f "$target/TXTSETUP.SIF" ]; then error "The file TXTSETUP.SIF could not be found!" && return 1 From b347232ac88c3af7352bfbc4d28f6b6877d9af64 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 14 Oct 2024 03:26:19 +0200 Subject: [PATCH 069/290] feat: Check returnvalues for drivers (#807) --- src/define.sh | 29 ++++++++++++++--------------- src/install.sh | 42 +++++++++++++++++++++--------------------- 2 files changed, 35 insertions(+), 36 deletions(-) diff --git a/src/define.sh b/src/define.sh index 7a1c705..501b8c8 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1651,9 +1651,8 @@ addFolder() { info "$msg" && html "$msg" local dest="$src/\$OEM\$/\$1/OEM" - mkdir -p "$dest" - - ! cp -Lr "$folder/." "$dest" && return 1 + mkdir -p "$dest" || return 1 + cp -Lr "$folder/." "$dest" || return 1 local file file=$(find "$dest" -maxdepth 1 -type f -iname install.bat | head -n 1) @@ -1715,21 +1714,21 @@ prepareInstall() { error "Failed to locate required storage drivers!" && return 1 fi - cp -L "$drivers/viostor/$driver/$arch/viostor.sys" "$target" + cp -L "$drivers/viostor/$driver/$arch/viostor.sys" "$target" || return 1 - mkdir -p "$dir/\$OEM\$/\$1/Drivers/viostor" - cp -L "$drivers/viostor/$driver/$arch/viostor.cat" "$dir/\$OEM\$/\$1/Drivers/viostor" - cp -L "$drivers/viostor/$driver/$arch/viostor.inf" "$dir/\$OEM\$/\$1/Drivers/viostor" - cp -L "$drivers/viostor/$driver/$arch/viostor.sys" "$dir/\$OEM\$/\$1/Drivers/viostor" + mkdir -p "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1 + cp -L "$drivers/viostor/$driver/$arch/viostor.cat" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1 + cp -L "$drivers/viostor/$driver/$arch/viostor.inf" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1 + cp -L "$drivers/viostor/$driver/$arch/viostor.sys" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1 if [ ! -f "$drivers/NetKVM/$driver/$arch/netkvm.sys" ]; then error "Failed to locate required network drivers!" && return 1 fi - mkdir -p "$dir/\$OEM\$/\$1/Drivers/NetKVM" - cp -L "$drivers/NetKVM/$driver/$arch/netkvm.cat" "$dir/\$OEM\$/\$1/Drivers/NetKVM" - cp -L "$drivers/NetKVM/$driver/$arch/netkvm.inf" "$dir/\$OEM\$/\$1/Drivers/NetKVM" - cp -L "$drivers/NetKVM/$driver/$arch/netkvm.sys" "$dir/\$OEM\$/\$1/Drivers/NetKVM" + mkdir -p "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1 + cp -L "$drivers/NetKVM/$driver/$arch/netkvm.cat" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1 + cp -L "$drivers/NetKVM/$driver/$arch/netkvm.inf" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1 + cp -L "$drivers/NetKVM/$driver/$arch/netkvm.sys" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1 if [ ! -f "$target/TXTSETUP.SIF" ]; then error "The file TXTSETUP.SIF could not be found!" && return 1 @@ -1747,9 +1746,9 @@ prepareInstall() { error "Failed to locate required SATA drivers!" && return 1 fi - mkdir -p "$dir/\$OEM\$/\$1/Drivers/sata" - cp -Lr "$drivers/sata/xp/$arch/." "$dir/\$OEM\$/\$1/Drivers/sata" - cp -Lr "$drivers/sata/xp/$arch/." "$target" + mkdir -p "$dir/\$OEM\$/\$1/Drivers/sata" || return 1 + cp -Lr "$drivers/sata/xp/$arch/." "$dir/\$OEM\$/\$1/Drivers/sata" || return 1 + cp -Lr "$drivers/sata/xp/$arch/." "$target" || return 1 sed -i '/^\[SCSI.Load\]/s/$/\niaStor=iaStor.sys,4/' "$target/TXTSETUP.SIF" sed -i '/^\[FileFlags\]/s/$/\niaStor.sys = 16/' "$target/TXTSETUP.SIF" diff --git a/src/install.sh b/src/install.sh index b0c58ff..4d7f6da 100644 --- a/src/install.sh +++ b/src/install.sh @@ -704,9 +704,9 @@ addDriver() { esac local dest="$path/$target/$driver" - mkdir -p "$dest" + mkdir -p "$dest" || return 1 + cp -Lr "$path/$driver/$folder/." "$dest" || return 1 - cp -Lr "$path/$driver/$folder/." "$dest" return 0 } @@ -731,33 +731,33 @@ addDrivers() { local target="\$WinPEDriver\$" local dest="$drivers/$target" - mkdir -p "$dest" + mkdir -p "$dest" || return 1 wimlib-imagex update "$file" "$index" --command "delete --force --recursive /$target" >/dev/null || true - addDriver "$version" "$drivers" "$target" "qxl" - addDriver "$version" "$drivers" "$target" "viofs" - addDriver "$version" "$drivers" "$target" "sriov" - addDriver "$version" "$drivers" "$target" "smbus" - addDriver "$version" "$drivers" "$target" "qxldod" - addDriver "$version" "$drivers" "$target" "viorng" - addDriver "$version" "$drivers" "$target" "viostor" - addDriver "$version" "$drivers" "$target" "viomem" - addDriver "$version" "$drivers" "$target" "NetKVM" - addDriver "$version" "$drivers" "$target" "Balloon" - addDriver "$version" "$drivers" "$target" "vioscsi" - addDriver "$version" "$drivers" "$target" "pvpanic" - addDriver "$version" "$drivers" "$target" "vioinput" - addDriver "$version" "$drivers" "$target" "viogpudo" - addDriver "$version" "$drivers" "$target" "vioserial" - addDriver "$version" "$drivers" "$target" "qemupciserial" + addDriver "$version" "$drivers" "$target" "qxl" || return 1 + addDriver "$version" "$drivers" "$target" "viofs" || return 1 + addDriver "$version" "$drivers" "$target" "sriov" || return 1 + addDriver "$version" "$drivers" "$target" "smbus" || return 1 + addDriver "$version" "$drivers" "$target" "qxldod" || return 1 + addDriver "$version" "$drivers" "$target" "viorng" || return 1 + addDriver "$version" "$drivers" "$target" "viostor" || return 1 + addDriver "$version" "$drivers" "$target" "viomem" || return 1 + addDriver "$version" "$drivers" "$target" "NetKVM" || return 1 + addDriver "$version" "$drivers" "$target" "Balloon" || return 1 + addDriver "$version" "$drivers" "$target" "vioscsi" || return 1 + addDriver "$version" "$drivers" "$target" "pvpanic" || return 1 + addDriver "$version" "$drivers" "$target" "vioinput" || return 1 + addDriver "$version" "$drivers" "$target" "viogpudo" || return 1 + addDriver "$version" "$drivers" "$target" "vioserial" || return 1 + addDriver "$version" "$drivers" "$target" "qemupciserial" || return 1 case "${version,,}" in "win11x64"* | "win2025"* ) # Workaround Virtio GPU driver bug local dst="$src/\$OEM\$/\$\$/Drivers" - mkdir -p "$dst" - ! cp -Lr "$dest/." "$dst" && return 1 + mkdir -p "$dst" || return 1 + cp -Lr "$dest/." "$dst" || return 1 rm -rf "$dest/viogpudo" ;; esac From 69b450299c684a80e16e345bcad356849a5c5f2c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 14 Oct 2024 15:23:59 +0200 Subject: [PATCH 070/290] fix: Continue without drivers (#809) --- src/define.sh | 6 +++--- src/install.sh | 27 ++++++++++++++------------- src/mido.sh | 2 +- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/define.sh b/src/define.sh index 501b8c8..e496be5 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1677,7 +1677,7 @@ migrateFiles() { [[ "${version,,}" == "win7x64" ]] && file="en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" [ ! -f "$STORAGE/$file" ] && return 0 - ! mv -f "$STORAGE/$file" "$base" && return 1 + mv -f "$STORAGE/$file" "$base" || return 1 return 0 } @@ -1996,7 +1996,7 @@ prepare2k3() { key="P4WJG-WK3W7-3HM8W-RWHCK-8JTRY" fi - ! prepareInstall "$iso" "$dir" "$desc" "$arch" "$key" "$driver" && return 1 + prepareInstall "$iso" "$dir" "$desc" "$arch" "$key" "$driver" || return 1 return 0 } @@ -2021,7 +2021,7 @@ prepareXP() { key="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G" fi - ! prepareInstall "$iso" "$dir" "$desc" "$arch" "$key" "$driver" && return 1 + prepareInstall "$iso" "$dir" "$desc" "$arch" "$key" "$driver" || return 1 return 0 } diff --git a/src/install.sh b/src/install.sh index 4d7f6da..3170833 100644 --- a/src/install.sh +++ b/src/install.sh @@ -541,7 +541,7 @@ detectImage() { fi info=$(wimlib-imagex info -xml "$wim" | tr -d '\000') - ! checkPlatform "$info" && exit 67 + checkPlatform "$info" || exit 67 DETECTED=$(detectVersion "$info") @@ -588,7 +588,7 @@ prepareImage() { desc=$(printVersion "$DETECTED" "$DETECTED") - ! setMachine "$DETECTED" "$iso" "$dir" "$desc" && return 1 + setMachine "$DETECTED" "$iso" "$dir" "$desc" || return 1 skipVersion "$DETECTED" && return 0 if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then @@ -815,11 +815,11 @@ updateImage() { fi if ! addDrivers "$src" "$tmp" "$wim" "$index" "$DETECTED"; then - error "Failed to add drivers to image!" && return 1 + error "Failed to add drivers to image!" fi if ! addFolder "$src"; then - error "Failed to add OEM folder to image!" && return 1 + error "Failed to add OEM folder to image!" fi if wimlib-imagex extract "$wim" "$index" "/$file" "--dest-dir=$tmp" >/dev/null 2>&1; then @@ -884,7 +884,8 @@ removeImage() { [ ! -f "$iso" ] && return 0 [ -n "$CUSTOM" ] && return 0 - ! rm -f "$iso" 2> /dev/null && warn "failed to remove $iso !" + + rm -f "$iso" 2> /dev/null || warn "failed to remove $iso !" return 0 } @@ -927,20 +928,20 @@ buildImage() { if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then - ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -V "${LABEL::30}" \ - -udf -boot-info-table -eltorito-alt-boot -eltorito-boot "$EFISYS" -no-emul-boot -allow-limited-size -quiet "$dir" 2> "$log" && failed="y" + genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -V "${LABEL::30}" \ + -udf -boot-info-table -eltorito-alt-boot -eltorito-boot "$EFISYS" -no-emul-boot -allow-limited-size -quiet "$dir" 2> "$log" || failed="y" else case "${DETECTED,,}" in "win2k"* | "winxp"* | "win2003"* ) - ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -boot-load-seg 1984 -boot-load-size 4 -c "$cat" -iso-level 2 -J -l -D -N -joliet-long \ - -relaxed-filenames -V "${LABEL::30}" -quiet "$dir" 2> "$log" && failed="y" ;; + genisoimage -o "$out" -b "$ETFS" -no-emul-boot -boot-load-seg 1984 -boot-load-size 4 -c "$cat" -iso-level 2 -J -l -D -N -joliet-long \ + -relaxed-filenames -V "${LABEL::30}" -quiet "$dir" 2> "$log" || failed="y" ;; "win9"* ) - ! genisoimage -o "$out" -b "$ETFS" -J -r -V "${LABEL::30}" -quiet "$dir" 2> "$log" && failed="y" ;; + genisoimage -o "$out" -b "$ETFS" -J -r -V "${LABEL::30}" -quiet "$dir" 2> "$log" || failed="y" ;; * ) - ! genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 2 -J -l -D -N -joliet-long -relaxed-filenames -V "${LABEL::30}" \ - -udf -allow-limited-size -quiet "$dir" 2> "$log" && failed="y" ;; + genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 2 -J -l -D -N -joliet-long -relaxed-filenames -V "${LABEL::30}" \ + -udf -allow-limited-size -quiet "$dir" 2> "$log" || failed="y" ;; esac fi @@ -956,7 +957,7 @@ buildImage() { [ -s "$log" ] && error="$(<"$log")" [[ "$error" != "$hide" ]] && echo "$error" - ! mv -f "$out" "$BOOT" && return 1 + mv -f "$out" "$BOOT" || return 1 return 0 } diff --git a/src/mido.sh b/src/mido.sh index 079f9f2..ef8015e 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -592,7 +592,7 @@ downloadFile() { if [ "$total" -lt 100000000 ]; then error "Invalid download link: $url (is only $total bytes?). Please report this at $SUPPORT/issues." && return 1 fi - ! verifyFile "$iso" "$size" "$total" "$sum" && return 1 + verifyFile "$iso" "$size" "$total" "$sum" || return 1 html "Download finished successfully..." && return 0 fi From 815a3f3c6637e617a0b121510cf43267c9586f4c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 14 Oct 2024 16:40:15 +0200 Subject: [PATCH 071/290] feat: Support multiple shared folders (#810) --- src/samba.sh | 92 ++++++++++++++++++++++++++++------------------------ 1 file changed, 49 insertions(+), 43 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index 6a65095..498194f 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -14,47 +14,52 @@ if [[ "$DHCP" == [Yy1]* ]]; then interface="$VM_NET_DEV" fi -share="/data" +addShare() { + local dir="$1" + local name="$2" + local comment="$3" -if [ ! -d "$share" ] && [ -d "$STORAGE/data" ]; then - share="$STORAGE/data" -fi + mkdir -p "$dir" || return 1 -if [ ! -d "$share" ] && [ -d "/shared" ]; then - share="/shared" -fi + if [ -z "$(ls -A "$dir")" ]; then -if [ ! -d "$share" ] && [ -d "$STORAGE/shared" ]; then - share="$STORAGE/shared" -fi + chmod 777 "$dir" -mkdir -p "$share" + { echo "--------------------------------------------------------" + echo " $APP for Docker v$(</run/version)..." + echo " For support visit $SUPPORT" + echo "--------------------------------------------------------" + echo "" + echo "Using this folder you can share files with the host machine." + echo "" + echo "To change its location, include the following bind mount in your compose file:" + echo "" + echo " volumes:" + echo " - \"/home/example:/${name,,}\"" + echo "" + echo "Or in your run command:" + echo "" + echo " -v \"/home/example:/${name,,}\"" + echo "" + echo "Replace the example path /home/example with the desired shared folder." + echo "" + } | unix2dos > "$dir/readme.txt" -if [ -z "$(ls -A "$share")" ]; then + fi - chmod 777 "$share" + { echo "" + echo "[$name]" + echo " path = $dir" + echo " comment = $comment" + echo " writable = yes" + echo " guest ok = yes" + echo " guest only = yes" + echo " force user = root" + echo " force group = root" + } >> "/etc/samba/smb.conf" - { echo "--------------------------------------------------------" - echo " $APP for Docker v$(</run/version)..." - echo " For support visit $SUPPORT" - echo "--------------------------------------------------------" - echo "" - echo "Using this folder you can share files with the host machine." - echo "" - echo "To change its location, include the following bind mount in your compose file:" - echo "" - echo " volumes:" - echo " - \"/home/user/example:/data\"" - echo "" - echo "Or in your run command:" - echo "" - echo " -v \"/home/user/example:/data\"" - echo "" - echo "Replace the example path /home/user/example with the desired shared folder." - echo "" - } | unix2dos > "$share/readme.txt" - -fi + return 0 +} { echo "[global]" echo " server string = Dockur" @@ -72,17 +77,18 @@ fi echo " printing = bsd" echo " printcap name = /dev/null" echo " disable spoolss = yes" - echo "" - echo "[Data]" - echo " path = $share" - echo " comment = Shared" - echo " writable = yes" - echo " guest ok = yes" - echo " guest only = yes" - echo " force user = root" - echo " force group = root" } > "/etc/samba/smb.conf" +share="/data" +[ ! -d "$share" ] && [ -d "$STORAGE/data" ] && share="$STORAGE/data" +[ ! -d "$share" ] && [ -d "/shared" ] && share="/shared" +[ ! -d "$share" ] && [ -d "$STORAGE/shared" ] && share="$STORAGE/shared" + +addShare "$share" "Data" "Shared" || error "Failed to create shared folder!" + +[ -d "/data2" ] && addShare "/data2" "Data2" "Shared" +[ -d "/data3" ] && addShare "/data3" "Data3" "Shared" + if ! smbd; then error "Samba daemon failed to start!" smbd -i --debug-stdout || true From 01c61dd32d924903f8df8f51e7d82adae97dfcb6 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 14 Oct 2024 18:56:43 +0200 Subject: [PATCH 072/290] build: Remove ARM64 platform (#811) --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index eb6174a..f6e2cf1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -74,7 +74,7 @@ jobs: context: . push: true provenance: false - platforms: linux/amd64,linux/arm64 + platforms: linux/amd64 tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} annotations: ${{ steps.meta.outputs.annotations }} From 760fe9a31f10f3ef831c9cdfc874fd7d0ee7d725 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 15 Oct 2024 00:45:28 +0200 Subject: [PATCH 073/290] feat: Include ARM64 version in image (#812) --- .github/workflows/build.yml | 4 ++-- Dockerfile | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f6e2cf1..8731ab4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -50,7 +50,7 @@ jobs: labels: | org.opencontainers.image.title=${{ vars.NAME }} env: - DOCKER_METADATA_ANNOTATIONS_LEVELS: manifest,index + DOCKER_METADATA_ANNOTATIONS_LEVELS: manifest,index - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 @@ -74,7 +74,7 @@ jobs: context: . push: true provenance: false - platforms: linux/amd64 + platforms: linux/amd64,linux/arm64 tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} annotations: ${{ steps.meta.outputs.annotations }} diff --git a/Dockerfile b/Dockerfile index a8e4197..22a73af 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM scratch +FROM scratch AS build-amd64 COPY --from=qemux/qemu-docker:6.05 / / ARG VERSION_ARG="0.0" @@ -31,6 +31,9 @@ COPY --chmod=755 ./assets /run/assets ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/v0.8/src/wsdd.py /usr/sbin/wsdd ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.43-0/virtio-win-1.9.43.tar.xz /drivers.txz +FROM dockurr/windows-arm:2.20 AS build-arm64 +FROM build-${TARGETARCH} + EXPOSE 8006 3389 VOLUME /storage From 80c5ba2231eadfa39a51ada9b1e7bb3e95e41d18 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 15 Oct 2024 00:49:05 +0200 Subject: [PATCH 074/290] build: Docker lint exception (#813) --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 2c1ce5a..b132f31 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -21,5 +21,5 @@ jobs: uses: hadolint/hadolint-action@v3.1.0 with: dockerfile: Dockerfile - ignore: DL3008 + ignore: DL3006,DL3008 failure-threshold: warning From bc614fd233768137c118dfcfa74fb121fb48c7d1 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 20 Oct 2024 16:20:12 +0200 Subject: [PATCH 075/290] feat: Use q35 machine type for Windows XP (#823) --- Dockerfile | 2 +- src/define.sh | 34 ++++++++++++++++------------------ src/install.sh | 11 +++++++++++ src/samba.sh | 12 ++---------- 4 files changed, 30 insertions(+), 29 deletions(-) diff --git a/Dockerfile b/Dockerfile index 22a73af..61b4567 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM scratch AS build-amd64 -COPY --from=qemux/qemu-docker:6.05 / / +COPY --from=qemux/qemu-docker:6.06 / / ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" diff --git a/src/define.sh b/src/define.sh index e496be5..271f38c 100644 --- a/src/define.sh +++ b/src/define.sh @@ -2106,39 +2106,37 @@ setMachine() { local dir="$3" local desc="$4" - case "${id,,}" in - "win9"* | "win2k"* ) - MACHINE="pc-i440fx-2.4" ;; - "winxp"* | "win2003"* | "winvistax86"* | "win7x86"* ) - MACHINE="pc-q35-2.10" ;; - esac - - case "${id,,}" in - "win9"* | "win2k"* | "winxp"* | "win2003"* ) - BOOT_MODE="windows_legacy" ;; - "winvista"* | "win7"* | "win2008"* ) - BOOT_MODE="windows_legacy" ;; - esac - case "${id,,}" in "win9"* ) - DISK_TYPE="auto" ETFS="[BOOT]/Boot-1.44M.img" ;; "win2k"* ) - DISK_TYPE="auto" ETFS="[BOOT]/Boot-NoEmul.img" ;; "winxp"* ) - DISK_TYPE="blk" if ! prepareXP "$iso" "$dir" "$desc"; then error "Failed to prepare $desc ISO!" && return 1 fi ;; "win2003"* ) - DISK_TYPE="blk" if ! prepare2k3 "$iso" "$dir" "$desc"; then error "Failed to prepare $desc ISO!" && return 1 fi ;; esac + case "${id,,}" in + "win9"* | "win2k"* ) + USB="None" + DISK_TYPE="auto" + MACHINE="pc-i440fx-2.4" + BOOT_MODE="windows_legacy" ;; + "winxp"* | "win2003"* ) + USB="None" + DISK_TYPE="blk" + BOOT_MODE="windows_legacy" + # Prevent bluescreen if 64 bit PCI hole size is >2G. + ARGS="-global q35-pcihost.x-pci-hole64-fix=false" ;; + "winvista"* | "win7"* | "win2008"* ) + BOOT_MODE="windows_legacy" ;; + esac + return 0 } diff --git a/src/install.sh b/src/install.sh index 3170833..b03f55a 100644 --- a/src/install.sh +++ b/src/install.sh @@ -120,6 +120,7 @@ finishInstall() { rm -f "$STORAGE/windows.old" rm -f "$STORAGE/windows.vga" + rm -f "$STORAGE/windows.args" rm -f "$STORAGE/windows.base" rm -f "$STORAGE/windows.boot" rm -f "$STORAGE/windows.mode" @@ -156,6 +157,11 @@ finishInstall() { fi fi + if [ -n "${ARGS:-}" ]; then + ARGUMENTS="$ARGS ${ARGUMENTS:-}" + echo "$ARGS" > "$STORAGE/windows.args" + fi + if [ -n "${DISK_TYPE:-}" ] && [[ "${DISK_TYPE:-}" != "scsi" ]]; then echo "$DISK_TYPE" > "$STORAGE/windows.type" fi @@ -965,6 +971,11 @@ bootWindows() { rm -rf "$TMP" + if [ -f "$STORAGE/windows.args" ]; then + ARGS=$(<"$STORAGE/windows.args") + ARGUMENTS="$ARGS ${ARGUMENTS:-}" + fi + if [ -s "$STORAGE/windows.type" ] && [ -f "$STORAGE/windows.type" ]; then [ -z "${DISK_TYPE:-}" ] && DISK_TYPE=$(<"$STORAGE/windows.type") fi diff --git a/src/samba.sh b/src/samba.sh index 498194f..3137d05 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -94,16 +94,8 @@ if ! smbd; then smbd -i --debug-stdout || true fi -legacy="" - -if [ -f "$STORAGE/windows.old" ]; then - MT=$(<"$STORAGE/windows.old") - [[ "${MT,,}" == "pc-q35-2"* ]] && legacy="y" - [[ "${MT,,}" == "pc-i440fx-2"* ]] && legacy="y" -fi - -if [ -n "$legacy" ]; then - # Enable NetBIOS on Windows XP and lower +if [[ "${BOOT_MODE:-}" == "windows_legacy" ]]; then + # Enable NetBIOS on Windows 7 and lower if ! nmbd; then error "NetBIOS daemon failed to start!" nmbd -i --debug-stdout || true From 80dead14461b0fb0e4b373ba2234164bba0c0e3a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 20 Oct 2024 16:39:42 +0200 Subject: [PATCH 076/290] fix: Enable USB for legacy machines (#824) --- src/define.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/define.sh b/src/define.sh index 271f38c..9006934 100644 --- a/src/define.sh +++ b/src/define.sh @@ -2123,12 +2123,10 @@ setMachine() { case "${id,,}" in "win9"* | "win2k"* ) - USB="None" DISK_TYPE="auto" MACHINE="pc-i440fx-2.4" BOOT_MODE="windows_legacy" ;; "winxp"* | "win2003"* ) - USB="None" DISK_TYPE="blk" BOOT_MODE="windows_legacy" # Prevent bluescreen if 64 bit PCI hole size is >2G. From b39507c5a4bf349ccaf8c098156c1ec10d20de13 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 24 Oct 2024 12:17:09 +0200 Subject: [PATCH 077/290] feat: Additional aliasses (#833) --- src/define.sh | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/define.sh b/src/define.sh index 9006934..c62aecb 100644 --- a/src/define.sh +++ b/src/define.sh @@ -26,19 +26,35 @@ parseVersion() { [ -z "$VERSION" ] && VERSION="win11" case "${VERSION,,}" in - "11" | "11p" | "win11" | "win11p" | "windows11" | "windows 11" ) + "11" | "11p" | "win11" | "pro11" | "win11p" | "windows11" | "windows 11" ) VERSION="win11x64" ;; "11e" | "win11e" | "windows11e" | "windows 11e" ) VERSION="win11x64-enterprise-eval" ;; - "10" | "10p" | "win10" | "win10p" | "windows10" | "windows 10" ) + "iot11" | "11i" | "11iot" | "win11i" | "win11-iot" | "win11x64-iot" | "win11x64-enterprise-iot-eval" ) + VERSION="win11x64-enterprise-iot-eval" + [ -z "$DETECTED" ] && DETECTED="win11x64-iot" + ;; + "ltsc11" | "11l" | "11ltsc" | "win11l" | "win11-ltsc" | "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) + VERSION="win11x64-enterprise-ltsc-eval" + [ -z "$DETECTED" ] && DETECTED="win11x64-ltsc" + ;; + "10" | "10p" | "win10" | "pro10" | "win10p" | "windows10" | "windows 10" ) VERSION="win10x64" ;; "10e" | "win10e" | "windows10e" | "windows 10e" ) VERSION="win10x64-enterprise-eval" ;; - "8" | "8p" | "81" | "81p" | "8.1" | "win8" | "win8p" | "win81" | "win81p" | "windows 8" ) + "iot10" | "10i" | "10iot" | "win10i" | "win10-iot" | "win10x64-iot" | "win10x64-enterprise-iot-eval" ) + VERSION="win10x64-enterprise-iot-eval" + [ -z "$DETECTED" ] && DETECTED="win10x64-iot" + ;; + "ltsc10" | "10l" | "10ltsc" | "win10l" | "win10-ltsc" | "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) + VERSION="win10x64-enterprise-ltsc-eval" + [ -z "$DETECTED" ] && DETECTED="win10x64-ltsc" + ;; + "8" | "8p" | "81" | "81p" | "pro8" | "8.1" | "win8" | "win8p" | "win81" | "win81p" | "windows 8" ) VERSION="win81x64" ;; "8e" | "81e" | "8.1e" | "win8e" | "win81e" | "windows 8e" ) @@ -105,22 +121,6 @@ parseVersion() { VERSION="tiny10" [ -z "$DETECTED" ] && DETECTED="win10x64-ltsc" ;; - "iot11" | "11iot" | "win11-iot" | "win11x64-iot" | "win11x64-enterprise-iot-eval" ) - VERSION="win11x64-enterprise-iot-eval" - [ -z "$DETECTED" ] && DETECTED="win11x64-iot" - ;; - "iot10" | "10iot" | "win10-iot" | "win10x64-iot" | "win10x64-enterprise-iot-eval" ) - VERSION="win10x64-enterprise-iot-eval" - [ -z "$DETECTED" ] && DETECTED="win10x64-iot" - ;; - "ltsc11" | "11ltsc" | "win11-ltsc" | "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) - VERSION="win11x64-enterprise-ltsc-eval" - [ -z "$DETECTED" ] && DETECTED="win11x64-ltsc" - ;; - "ltsc10" | "10ltsc" | "win10-ltsc" | "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) - VERSION="win10x64-enterprise-ltsc-eval" - [ -z "$DETECTED" ] && DETECTED="win10x64-ltsc" - ;; esac return 0 From 86a766381e2bee9bbd62168aa73256d5d4461f54 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 24 Oct 2024 17:49:02 +0200 Subject: [PATCH 078/290] feat: Support 32-bit Windows versions (#834) --- src/define.sh | 63 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 26 deletions(-) diff --git a/src/define.sh b/src/define.sh index c62aecb..806ad62 100644 --- a/src/define.sh +++ b/src/define.sh @@ -32,11 +32,11 @@ parseVersion() { "11e" | "win11e" | "windows11e" | "windows 11e" ) VERSION="win11x64-enterprise-eval" ;; - "iot11" | "11i" | "11iot" | "win11i" | "win11-iot" | "win11x64-iot" | "win11x64-enterprise-iot-eval" ) + "11i" | "11iot" | "iot11" | "win11i" | "win11-iot" | "win11x64-iot" | "win11x64-enterprise-iot-eval" ) VERSION="win11x64-enterprise-iot-eval" [ -z "$DETECTED" ] && DETECTED="win11x64-iot" ;; - "ltsc11" | "11l" | "11ltsc" | "win11l" | "win11-ltsc" | "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) + "11l" | "11ltsc" | "ltsc11" | "win11l" | "win11-ltsc" | "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) VERSION="win11x64-enterprise-ltsc-eval" [ -z "$DETECTED" ] && DETECTED="win11x64-ltsc" ;; @@ -46,11 +46,11 @@ parseVersion() { "10e" | "win10e" | "windows10e" | "windows 10e" ) VERSION="win10x64-enterprise-eval" ;; - "iot10" | "10i" | "10iot" | "win10i" | "win10-iot" | "win10x64-iot" | "win10x64-enterprise-iot-eval" ) + "10i" | "10iot" | "iot10" | "win10i" | "win10-iot" | "win10x64-iot" | "win10x64-enterprise-iot-eval" ) VERSION="win10x64-enterprise-iot-eval" [ -z "$DETECTED" ] && DETECTED="win10x64-iot" ;; - "ltsc10" | "10l" | "10ltsc" | "win10l" | "win10-ltsc" | "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) + "10l" | "10ltsc" | "ltsc10" | "win10l" | "win10-ltsc" | "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) VERSION="win10x64-enterprise-ltsc-eval" [ -z "$DETECTED" ] && DETECTED="win10x64-ltsc" ;; @@ -71,21 +71,21 @@ parseVersion() { VERSION="win7x86" [ -z "$DETECTED" ] && DETECTED="win7x86-enterprise" ;; - "vista" | "winvista" | "windowsvista" | "windows vista" ) + "vista" | "6" | "winvista" | "windowsvista" | "windows vista" ) VERSION="winvistax64" [ -z "$DETECTED" ] && DETECTED="winvistax64-enterprise" ;; - "vistu" | "winvistu" | "windowsvistu" | "windows vistu" ) + "vistu" | "6u" | "winvistu" | "windowsvistu" | "windows vistu" ) VERSION="winvistax64-ultimate" ;; - "vistax86" | "winvistax86" | "windowsvistax86" | "winvistax86-enterprise" ) + "vistax86" | "6x86" | "winvistax86" | "windowsvistax86" | "winvistax86-enterprise" ) VERSION="winvistax86" [ -z "$DETECTED" ] && DETECTED="winvistax86-enterprise" ;; - "xp" | "xp32" | "xpx86" | "winxp" | "winxp86" | "windowsxp" | "windows xp" ) + "xp" | "xp32" | "xpx86" | "5" | "5x86" | "winxp" | "winxp86" | "windowsxp" | "windows xp" ) VERSION="winxpx86" ;; - "xp64" | "xpx64" | "winxp64" | "winxpx64" | "windowsxp64" | "windowsxpx64" ) + "xp64" | "xpx64" | "5x64" | "winxp64" | "winxpx64" | "windowsxp64" | "windowsxpx64" ) VERSION="winxpx64" ;; "25" | "2025" | "win25" | "win2025" | "windows2025" | "windows 2025" ) @@ -473,6 +473,9 @@ fromFile() { ;; esac + local add="" + [[ "$arch" != "x64" ]] && add="$arch" + case "${file// /_}" in "win7"* | "win_7"* | *"windows7"* | *"windows_7"* ) id="win7${arch}" @@ -502,25 +505,25 @@ fromFile() { id="tiny10" ;; *"server2025"* | *"server_2025"* ) - id="win2025" + id="win2025${add}" ;; *"server2022"* | *"server_2022"* ) - id="win2022" + id="win2022${add}" ;; *"server2019"* | *"server_2019"* ) - id="win2019" + id="win2019${add}" ;; *"server2016"* | *"server_2016"* ) - id="win2016" + id="win2016${add}" ;; *"server2012"* | *"server_2012"* ) - id="win2012r2" + id="win2012r2${add}" ;; *"server2008"* | *"server_2008"* ) - id="win2008r2" + id="win2008r2${add}" ;; *"server2003"* | *"server_2003"* ) - id="win2003r2" + id="win2003r2${add}" ;; esac @@ -538,18 +541,22 @@ fromName() { local name="$1" local arch="$2" + local add="" + [[ "$arch" != "x64" ]] && add="$arch" + case "${name,,}" in - *"server 2025"* ) id="win2025" ;; - *"server 2022"* ) id="win2022" ;; - *"server 2019"* ) id="win2019" ;; - *"server 2016"* ) id="win2016" ;; - *"server 2012"* ) id="win2012r2" ;; - *"server 2008"* ) id="win2008r2" ;; *"windows 7"* ) id="win7${arch}" ;; *"windows 8"* ) id="win81${arch}" ;; *"windows 10"* ) id="win10${arch}" ;; *"windows 11"* ) id="win11${arch}" ;; *"windows vista"* ) id="winvista${arch}" ;; + *"server 2025"* ) id="win2025${add}" ;; + *"server 2022"* ) id="win2022${add}" ;; + *"server 2019"* ) id="win2019${add}" ;; + *"server 2016"* ) id="win2016${add}" ;; + *"server 2012"* ) id="win2012r2${add}" ;; + *"server 2008"* ) id="win2008r2${add}" ;; + *"server 2003"* ) id="win2003r2${add}" ;; esac echo "$id" @@ -589,7 +596,7 @@ getVersion() { *" enterprise"* ) id="$id-enterprise" ;; esac ;; - "win2025"* | "win2022"* | "win2019"* | "win2016"* | "win2012"* | "win2008"* ) + "win2025"* | "win2022"* | "win2019"* | "win2016"* | "win2012"* | "win2008"* | "win2003"* ) case "${name,,}" in *" evaluation"* ) id="$id-eval" ;; esac @@ -2128,13 +2135,17 @@ setMachine() { BOOT_MODE="windows_legacy" ;; "winxp"* | "win2003"* ) DISK_TYPE="blk" - BOOT_MODE="windows_legacy" - # Prevent bluescreen if 64 bit PCI hole size is >2G. - ARGS="-global q35-pcihost.x-pci-hole64-fix=false" ;; + BOOT_MODE="windows_legacy" ;; "winvista"* | "win7"* | "win2008"* ) BOOT_MODE="windows_legacy" ;; esac + case "${id,,}" in + "winxp"* | "win2003"* | "winvistax86"* | "win7x86"* | "win2008r2x86"* ) + # Prevent bluescreen if 64 bit PCI hole size is >2G. + ARGS="-global q35-pcihost.x-pci-hole64-fix=false" ;; + esac + return 0 } From f1f6c640b9f4a78e7fdc5ce5a61de840d3114d95 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 10 Nov 2024 00:01:12 +0100 Subject: [PATCH 079/290] docs: Version alias (#859) --- Dockerfile | 2 +- compose.yml | 2 +- kubernetes.yml | 4 +++- readme.md | 42 +++++++++++++++++++++--------------------- 4 files changed, 26 insertions(+), 24 deletions(-) diff --git a/Dockerfile b/Dockerfile index 61b4567..decadd1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -37,9 +37,9 @@ FROM build-${TARGETARCH} EXPOSE 8006 3389 VOLUME /storage +ENV VERSION="11" ENV RAM_SIZE="4G" ENV CPU_CORES="2" ENV DISK_SIZE="64G" -ENV VERSION="win11" ENTRYPOINT ["/usr/bin/tini", "-s", "/run/entry.sh"] diff --git a/compose.yml b/compose.yml index b97eaf1..9d0134b 100644 --- a/compose.yml +++ b/compose.yml @@ -3,7 +3,7 @@ services: image: dockurr/windows container_name: windows environment: - VERSION: "win11" + VERSION: "11" devices: - /dev/kvm cap_add: diff --git a/kubernetes.yml b/kubernetes.yml index 2fb5888..efa668d 100644 --- a/kubernetes.yml +++ b/kubernetes.yml @@ -30,8 +30,10 @@ spec: securityContext: privileged: true env: + - name: VERSION + value: "11" - name: RAM_SIZE - value: 4G + value: "4G" - name: CPU_CORES value: "2" - name: DISK_SIZE diff --git a/readme.md b/readme.md index 2e98468..ef87dff 100644 --- a/readme.md +++ b/readme.md @@ -34,7 +34,7 @@ services: image: dockurr/windows container_name: windows environment: - VERSION: "win11" + VERSION: "11" devices: - /dev/kvm cap_add: @@ -78,34 +78,34 @@ kubectl apply -f kubernetes.yml ```yaml environment: - VERSION: "win11" + VERSION: "11" ``` Select from the values below: - | **Value** | **Version** | **Size** | + | **Value** | **Version** | **Size** | |---|---|---| - | `win11` | Windows 11 Pro | 5.4 GB | - | `ltsc11` | Windows 11 LTSC | 4.2 GB | - | `win11e` | Windows 11 Enterprise | 5.8 GB | + | `11` | Windows 11 Pro | 5.4 GB | + | `11l` | Windows 11 LTSC | 4.2 GB | + | `11e` | Windows 11 Enterprise | 5.8 GB | |||| - | `win10` | Windows 10 Pro | 5.7 GB | - | `ltsc10` | Windows 10 LTSC | 4.6 GB | - | `win10e` | Windows 10 Enterprise | 5.2 GB | + | `10` | Windows 10 Pro | 5.7 GB | + | `10l` | Windows 10 LTSC | 4.6 GB | + | `10e` | Windows 10 Enterprise | 5.2 GB | |||| - | `win8` | Windows 8.1 Pro | 4.0 GB | - | `win8e` | Windows 8.1 Enterprise | 3.7 GB | - | `win7` | Windows 7 Enterprise | 3.0 GB | - | `vista` | Windows Vista Enterprise | 3.0 GB | - | `winxp` | Windows XP Professional | 0.6 GB | + | `8` | Windows 8.1 Pro | 4.0 GB | + | `8e` | Windows 8.1 Enterprise | 3.7 GB | + | `7e` | Windows 7 Enterprise | 3.0 GB | + | `ve` | Windows Vista Enterprise | 3.0 GB | + | `xp` | Windows XP Professional | 0.6 GB | |||| - | `2025` | Windows Server 2025 | 5.0 GB | - | `2022` | Windows Server 2022 | 4.7 GB | - | `2019` | Windows Server 2019 | 5.3 GB | - | `2016` | Windows Server 2016 | 6.5 GB | - | `2012` | Windows Server 2012 | 4.3 GB | - | `2008` | Windows Server 2008 | 3.0 GB | - | `2003` | Windows Server 2003 | 0.6 GB | + | `2025` | Windows Server 2025 | 5.0 GB | + | `2022` | Windows Server 2022 | 4.7 GB | + | `2019` | Windows Server 2019 | 5.3 GB | + | `2016` | Windows Server 2016 | 6.5 GB | + | `2012` | Windows Server 2012 | 4.3 GB | + | `2008` | Windows Server 2008 | 3.0 GB | + | `2003` | Windows Server 2003 | 0.6 GB | > [!TIP] > To install ARM64 versions of Windows use [dockur/windows-arm](https://github.com/dockur/windows-arm/). From 2cdb57a6790be2f9749a4873c7d9372926150125 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 10 Nov 2024 00:17:00 +0100 Subject: [PATCH 080/290] feat: Update download links (#860) --- src/define.sh | 59 ++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 49 insertions(+), 10 deletions(-) diff --git a/src/define.sh b/src/define.sh index 806ad62..0eff317 100644 --- a/src/define.sh +++ b/src/define.sh @@ -71,14 +71,14 @@ parseVersion() { VERSION="win7x86" [ -z "$DETECTED" ] && DETECTED="win7x86-enterprise" ;; - "vista" | "6" | "winvista" | "windowsvista" | "windows vista" ) + "vista" | "ve" | "6" | "winvista" | "windowsvista" | "windows vista" ) VERSION="winvistax64" [ -z "$DETECTED" ] && DETECTED="winvistax64-enterprise" ;; - "vistu" | "6u" | "winvistu" | "windowsvistu" | "windows vistu" ) + "vistu" | "vu" | "6u" | "winvistu" | "windowsvistu" | "windows vistu" ) VERSION="winvistax64-ultimate" ;; - "vistax86" | "6x86" | "winvistax86" | "windowsvistax86" | "winvistax86-enterprise" ) + "vistax86" | "vex86" | "6x86" | "winvistax86" | "windowsvistax86" | "winvistax86-enterprise" ) VERSION="winvistax86" [ -z "$DETECTED" ] && DETECTED="winvistax86-enterprise" ;; @@ -961,17 +961,56 @@ getLink3() { culture=$(getLanguage "$lang" "culture") case "${id,,}" in + "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) + case "${culture,,}" in + "ar" | "ar-"* ) url="ar-sa_windows_11_enterprise_ltsc_2024_x64_dvd_8012f159.iso" ;; + "bg" | "bg-"* ) url="bg-bg_windows_11_enterprise_ltsc_2024_x64_dvd_2778f4e8.iso" ;; + "cs" | "cs-"* ) url="cs-cz_windows_11_enterprise_ltsc_2024_x64_dvd_d4ef05f2.iso" ;; + "da" | "da-"* ) url="da-dk_windows_11_enterprise_ltsc_2024_x64_dvd_c231c267.iso" ;; + "de" | "de-"* ) url="de-de_windows_11_enterprise_ltsc_2024_x64_dvd_4f136f69.iso" ;; + "el" | "el-"* ) url="el-gr_windows_11_enterprise_ltsc_2024_x64_dvd_54eaabb2.iso" ;; + "gb" | "en-gb" ) url="en-gb_windows_11_enterprise_ltsc_2024_x64_dvd_e2137661.iso" ;; + "en" | "en-"* ) + size=5125844992 + sum="157d8365a517c40afeb3106fdd74d0836e1025debbc343f2080e1a8687607f51" + url="en-us_windows_11_enterprise_ltsc_2024_x64_dvd_965cfb00.iso" ;; + "mx" | "es-mx" ) url="es-mx_windows_11_enterprise_ltsc_2024_x64_dvd_3310c094.iso" ;; + "es" | "es-"* ) url="es-es_windows_11_enterprise_ltsc_2024_x64_dvd_77392d61.iso" ;; + "et" | "et-"* ) url="et-ee_windows_11_enterprise_ltsc_2024_x64_dvd_2dbd4bfe.iso" ;; + "fi" | "fi-"* ) url="fi-fi_windows_11_enterprise_ltsc_2024_x64_dvd_998f5df6.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_windows_11_enterprise_ltsc_2024_x64_dvd_78732953.iso" ;; + "fr" | "fr-"* ) url="fr-fr_windows_11_enterprise_ltsc_2024_x64_dvd_d66e386e.iso" ;; + "he" | "he-"* ) url="he-il_windows_11_enterprise_ltsc_2024_x64_dvd_fae050ec.iso" ;; + "hr" | "hr-"* ) url="hr-hr_windows_11_enterprise_ltsc_2024_x64_dvd_e3594411.iso" ;; + "hu" | "hu-"* ) url="hu-hu_windows_11_enterprise_ltsc_2024_x64_dvd_8fea6034.iso" ;; + "it" | "it-"* ) url="it-it_windows_11_enterprise_ltsc_2024_x64_dvd_1e8cabb6.iso" ;; + "ja" | "ja-"* ) url="ja-jp_windows_11_enterprise_ltsc_2024_x64_dvd_e59ad418.iso" ;; + "ko" | "ko-"* ) url="ko-kr_windows_11_enterprise_ltsc_2024_x64_dvd_b6b6eb18.iso" ;; + "lt" | "lt-"* ) url="lt-lt_windows_11_enterprise_ltsc_2024_x64_dvd_145479e9.iso" ;; + "lv" | "lv-"* ) url="lv-lv_windows_11_enterprise_ltsc_2024_x64_dvd_e0ebc53d.iso" ;; + "nb" | "nb-"* ) url="nb-no_windows_11_enterprise_ltsc_2024_x64_dvd_d41eeb48.iso" ;; + "nl" | "nl-"* ) url="nl-nl_windows_11_enterprise_ltsc_2024_x64_dvd_e3063aab.iso" ;; + "pl" | "pl-"* ) url="pl-pl_windows_11_enterprise_ltsc_2024_x64_dvd_e00807a1.iso" ;; + "br" | "pt-br" ) url="pt-br_windows_11_enterprise_ltsc_2024_x64_dvd_2bb6b75b.iso" ;; + "pt" | "pt-"* ) url="pt-pt_windows_11_enterprise_ltsc_2024_x64_dvd_2f34bd6b.iso" ;; + "ro" | "ro-"* ) url="ro-ro_windows_11_enterprise_ltsc_2024_x64_dvd_2eadb4df.iso" ;; + "ru" | "ru-"* ) url="ru-ru_windows_11_enterprise_ltsc_2024_x64_dvd_f9af5773.iso" ;; + "sk" | "sk-"* ) url="sk-sk_windows_11_enterprise_ltsc_2024_x64_dvd_03b916e7.iso" ;; + "sl" | "sl-"* ) url="sl-si_windows_11_enterprise_ltsc_2024_x64_dvd_310b3a76.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_windows_11_enterprise_ltsc_2024_x64_dvd_3dfa5da5.iso" ;; + "sv" | "sv-"* ) url="sv-se_windows_11_enterprise_ltsc_2024_x64_dvd_191cf991.iso" ;; + "th" | "th-"* ) url="th-th_windows_11_enterprise_ltsc_2024_x64_dvd_47ce2c8a.iso" ;; + "tr" | "tr-"* ) url="tr-tr_windows_11_enterprise_ltsc_2024_x64_dvd_27bdab81.iso" ;; + "uk" | "uk-"* ) url="uk-ua_windows_11_enterprise_ltsc_2024_x64_dvd_b3f00872.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_windows_11_enterprise_ltsc_2024_x64_dvd_6287d84d.iso" ;; + "zh" | "zh-"* ) url="zh-cn_windows_11_enterprise_ltsc_2024_x64_dvd_cff9cd2d.iso" ;; + esac + ;; "win11x64-iot" | "win11x64-enterprise-iot-eval" ) [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 size=5144817664 sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" - url="X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" - ;; - "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) - [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 - size=5144817664 - sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" - url="X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" + url="en-us_windows_11_iot_enterprise_ltsc_2024_x64_dvd_f6b14814.iso" ;; "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) case "${culture,,}" in From 243b3bb5d6883f0c30bd5693db4821cc7fd63834 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 10 Nov 2024 02:45:01 +0100 Subject: [PATCH 081/290] chore(deps): update dockurr/windows-arm docker tag to v2.21 (#861) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index decadd1..82863a7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -31,7 +31,7 @@ COPY --chmod=755 ./assets /run/assets ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/v0.8/src/wsdd.py /usr/sbin/wsdd ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.43-0/virtio-win-1.9.43.tar.xz /drivers.txz -FROM dockurr/windows-arm:2.20 AS build-arm64 +FROM dockurr/windows-arm:2.21 AS build-arm64 FROM build-${TARGETARCH} EXPOSE 8006 3389 From d92ac18210c0928d331d3b380b50de9ba5a1d44d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 10 Nov 2024 11:31:54 +0100 Subject: [PATCH 082/290] docs: Fix typo (#862) --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index ef87dff..3e8dcf5 100644 --- a/readme.md +++ b/readme.md @@ -135,7 +135,7 @@ kubectl apply -f kubernetes.yml ### How do I share files with the host? - Open 'File Explorer' and click on the 'Network' section, you will see a computer called `host.lan`. Double-click it and it will show a folder called `Data`, which can be binded to any folder on your host via the compose file: + Open 'File Explorer' and click on the 'Network' section, you will see a computer called `host.lan`. Double-click it and it will show a folder called `Data`, which can be bound to any folder on your host via the compose file: ```yaml volumes: @@ -220,7 +220,7 @@ kubectl apply -f kubernetes.yml LANGUAGE: "French" ``` - You can choose between: 🇦🇪 Arabic, 🇧🇬 Bulgarian, 🇨🇳 Chinese, 🇭🇷 Croatian, 🇨🇿 Czech, 🇩🇰 Danish, 🇳🇱 Dutch, 🇬🇧 English, 🇪🇪 Estionian, 🇫🇮 Finnish, 🇫🇷 French, 🇩🇪 German, 🇬🇷 Greek, 🇮🇱 Hebrew, 🇭🇺 Hungarian, 🇮🇹 Italian, 🇯🇵 Japanese, 🇰🇷 Korean, 🇱🇻 Latvian, 🇱🇹 Lithuanian, 🇳🇴 Norwegian, 🇵🇱 Polish, 🇵🇹 Portuguese, 🇷🇴 Romanian, 🇷🇺 Russian, 🇷🇸 Serbian, 🇸🇰 Slovak, 🇸🇮 Slovenian, 🇪🇸 Spanish, 🇸🇪 Swedish, 🇹🇭 Thai, 🇹🇷 Turkish and 🇺🇦 Ukrainian. + You can choose between: 🇦🇪 Arabic, 🇧🇬 Bulgarian, 🇨🇳 Chinese, 🇭🇷 Croatian, 🇨🇿 Czech, 🇩🇰 Danish, 🇳🇱 Dutch, 🇬🇧 English, 🇪🇪 Estonian, 🇫🇮 Finnish, 🇫🇷 French, 🇩🇪 German, 🇬🇷 Greek, 🇮🇱 Hebrew, 🇭🇺 Hungarian, 🇮🇹 Italian, 🇯🇵 Japanese, 🇰🇷 Korean, 🇱🇻 Latvian, 🇱🇹 Lithuanian, 🇳🇴 Norwegian, 🇵🇱 Polish, 🇵🇹 Portuguese, 🇷🇴 Romanian, 🇷🇺 Russian, 🇷🇸 Serbian, 🇸🇰 Slovak, 🇸🇮 Slovenian, 🇪🇸 Spanish, 🇸🇪 Swedish, 🇹🇭 Thai, 🇹🇷 Turkish and 🇺🇦 Ukrainian. ### How do I select the keyboard layout? From e292d18d322f58429ba31aa25605c9a77e3ca1b0 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 11 Nov 2024 14:13:47 +0100 Subject: [PATCH 083/290] docs: KVM troubleshooting (#865) --- readme.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/readme.md b/readme.md index 3e8dcf5..4ad3c42 100644 --- a/readme.md +++ b/readme.md @@ -340,24 +340,28 @@ kubectl apply -f kubernetes.yml ### How do I verify if my system supports KVM? - To verify that your system supports KVM, run the following commands: + Only Linux and Windows 11 support KVM virtualization, macOS and Windows 10 do not unfortunately. + + You can run the following commands in Linux to check your system: ```bash sudo apt install cpu-checker sudo kvm-ok ``` - If you receive an error from `kvm-ok` indicating that KVM acceleration can't be used, please check whether: + If you receive an error from `kvm-ok` indicating that KVM cannot be used, please check whether: - the virtualization extensions (`Intel VT-x` or `AMD SVM`) are enabled in your BIOS. - - you are running an operating system that supports them, like Linux or Windows 11 (macOS and Windows 10 do not unfortunately). - - you enabled "nested virtualization" if you are running the container inside a virtual machine. - you are not using a cloud provider, as most of them do not allow nested virtualization for their VPS's. - If you didn't receive any error from `kvm-ok` at all, but the container still complains that `/dev/kvm` is missing, it might help to add `privileged: true` to your compose file (or `--privileged` to your `run` command), to rule out any permission issue. + If you do not receive any error from `kvm-ok` but the container still complains about KVM, please check whether: + + - you are not using "Docker Desktop for Linux" as it does not support KVM, instead make use of Docker Engine directly. + + - it could help to add `privileged: true` to your compose file (or `sudo` to your `run` command), to rule out any permission issue. ### How do I run macOS in a container? From 7120584548b3d5fc99b0a8f645c67173d2518f05 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 11 Nov 2024 18:05:59 +0100 Subject: [PATCH 084/290] feat: Additional download mirrors (#870) --- Dockerfile | 2 +- src/define.sh | 597 +++++++++++++++++++++++++++++++++++++------------- src/mido.sh | 31 ++- 3 files changed, 477 insertions(+), 153 deletions(-) diff --git a/Dockerfile b/Dockerfile index 82863a7..e5abb6f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -31,7 +31,7 @@ COPY --chmod=755 ./assets /run/assets ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/v0.8/src/wsdd.py /usr/sbin/wsdd ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.43-0/virtio-win-1.9.43.tar.xz /drivers.txz -FROM dockurr/windows-arm:2.21 AS build-arm64 +FROM dockurr/windows-arm:2.22 AS build-arm64 FROM build-${TARGETARCH} EXPOSE 8006 3389 diff --git a/src/define.sh b/src/define.sh index 0eff317..a2706e3 100644 --- a/src/define.sh +++ b/src/define.sh @@ -957,53 +957,156 @@ getLink3() { local sum="" local size="" local host="https://drive.massgrave.dev" + local w19="windows_server_2019_x64_dvd" + local w25="windows_server_2025_x64_dvd" + local w16="windows_server_2016_vl_x64_dvd" + local w12="windows_server_2012_r2_vl_with_update_x64_dvd" + local w08="windows_server_2008_r2_with_sp1_vl_build_x64_dvd" + local w81="windows_8.1_enterprise_with_update_x64_dvd" + local l11="windows_11_enterprise_ltsc_2024_x64_dvd" + local l10="windows_10_enterprise_ltsc_2021_x64_dvd" + local c11="windows_11_consumer_editions_version_24h2_x64_dvd" + local b11="windows_11_business_editions_version_24h2_x64_dvd" + local w22="windows_server_2022_updated_oct_2024_x64_dvd_d1a47ecc" + local b10="windows_10_business_editions_version_22h2_updated_oct_2024_x64_dvd" + local c10="windows_10_consumer_editions_version_22h2_updated_oct_2024_x64_dvd_d0cfb2e9" culture=$(getLanguage "$lang" "culture") case "${id,,}" in + "win11x64" ) + case "${culture,,}" in + "ar" | "ar-"* ) url="ar-sa_${c11}_3c9a7ef3.iso" ;; + "bg" | "bg-"* ) url="bg-bg_${c11}_f8623745.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${c11}_ae72ca80.iso" ;; + "da" | "da-"* ) url="da-dk_${c11}_4f25c452.iso" ;; + "de" | "de-"* ) url="de-de_${c11}_bc4adebe.iso" ;; + "el" | "el-"* ) url="el-gr_${c11}_9e6ef9a0.iso" ;; + "gb" | "en-gb" ) url="en-gb_${c11}_4b3a8183.iso" ;; + "en" | "en-"* ) + size=5819484160 + sum="b56b911bf18a2ceaeb3904d87e7c770bdf92d3099599d61ac2497b91bf190b11" + url="en-us_${c11}_1d5fcad3.iso" ;; + "mx" | "es-mx" ) url="es-es_${c11}_3bc0e5c3.iso" ;; + "es" | "es-"* ) url="es-mx_${c11}_a28d9dab.iso" ;; + "et" | "et-"* ) url="et-ee_${c11}_48306c65.iso" ;; + "fi" | "fi-"* ) url="fi-fi_${c11}_21618747.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_${c11}_42755257.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${c11}_033875c5.iso" ;; + "he" | "he-"* ) url="he-il_${c11}_533bc3ac.iso" ;; + "hr" | "hr-"* ) url="hr-hr_${c11}_40c769ed.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${c11}_7d2259d6.iso" ;; + "it" | "it-"* ) url="it-it_${c11}_33e81ff0.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${c11}_fc6538fd.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${c11}_f09a396b.iso" ;; + "lt" | "lt-"* ) url="lt-lt_${c11}_22d54265.iso" ;; + "lv" | "lv-"* ) url="lv-lv_${c11}_5ff65441.iso" ;; + "nb" | "nb-"* ) url="nb-no_${c11}_5a5d625b.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${c11}_7959020a.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${c11}_c0dcd21b.iso" ;; + "br" | "pt-br" ) url="pt-br_${c11}_751fe150.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${c11}_e0df188a.iso" ;; + "ro" | "ro-"* ) url="ro-ro_${c11}_0821b265.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${c11}_784471d8.iso" ;; + "sk" | "sk-"* ) url="sk-sk_${c11}_fd13020e.iso" ;; + "sl" | "sl-"* ) url="sl-si_${c11}_9aa9f408.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_${c11}_febab1a9.iso" ;; + "sv" | "sv-"* ) url="sv-se_${c11}_fe34647f.iso" ;; + "th" | "th-"* ) url="th-th_${c11}_fc3e523e.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${c11}_443fefaf.iso" ;; + "uk" | "uk-"* ) url="uk-ua_${c11}_32966915.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${c11}_d0825b63.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${c11}_bfc0d79b.iso" ;; + esac + ;; + "win11x64-enterprise" | "win11x64-enterprise-eval" ) + case "${culture,,}" in + "ar" | "ar-"* ) url="ar-sa_${b11}_47dae48e.iso" ;; + "bg" | "bg-"* ) url="bg-bg_${b11}_4231caca.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${b11}_ca1661fd.iso" ;; + "da" | "da-"* ) url="da-dk_${b11}_ac0db9fc.iso" ;; + "de" | "de-"* ) url="de-de_${b11}_87a70226.iso" ;; + "el" | "el-"* ) url="el-gr_${b11}_946ba34d.iso" ;; + "gb" | "en-gb" ) url="en-gb_${b11}_27d8c2f1.iso" ;; + "en" | "en-"* ) + size=5722114048 + sum="d0dca325314322518ae967d58c3061bcae57ee9743a8a1cf374aad8637e5e8ac" + url="en-us_${b11}_59a1851e.iso" ;; + "mx" | "es-mx" ) url="es-es_${b11}_86632f8d.iso" ;; + "es" | "es-"* ) url="es-mx_${b11}_6ee25ce4.iso" ;; + "et" | "et-"* ) url="et-ee_${b11}_c26c1e3a.iso" ;; + "fi" | "fi-"* ) url="fi-fi_${b11}_59dd0bb5.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_${b11}_a02f0c99.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${b11}_c0a4510e.iso" ;; + "he" | "he-"* ) url="he-il_${b11}_c844d280.iso" ;; + "hr" | "hr-"* ) url="hr-hr_${b11}_6e4839cc.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${b11}_aed71101.iso" ;; + "it" | "it-"* ) url="it-it_${b11}_5552c3a1.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${b11}_7fdb7541.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${b11}_646bb9fc.iso" ;; + "lt" | "lt-"* ) url="lt-lt_${b11}_54d6d7e2.iso" ;; + "lv" | "lv-"* ) url="lv-lv_${b11}_acee0541.iso" ;; + "nb" | "nb-"* ) url="nb-no_${b11}_78f22960.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${b11}_0719b251.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${b11}_1a183794.iso" ;; + "br" | "pt-br" ) url="pt-br_${b11}_ecc90645.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${b11}_e7bf77a1.iso" ;; + "ro" | "ro-"* ) url="ro-ro_${b11}_9adc8d7b.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${b11}_f9b9b5d6.iso" ;; + "sk" | "sk-"* ) url="sk-sk_${b11}_1a91433b.iso" ;; + "sl" | "sl-"* ) url="sl-si_${b11}_0b79bd14.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_${b11}_8a4b35b5.iso" ;; + "sv" | "sv-"* ) url="sv-se_${b11}_55ad9818.iso" ;; + "th" | "th-"* ) url="th-th_${b11}_a2a350c3.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${b11}_f35a9f1b.iso" ;; + "uk" | "uk-"* ) url="uk-ua_${b11}_38ff1d1d.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${b11}_a9b30de5.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${b11}_5f9e5858.iso" ;; + esac + ;; "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_windows_11_enterprise_ltsc_2024_x64_dvd_8012f159.iso" ;; - "bg" | "bg-"* ) url="bg-bg_windows_11_enterprise_ltsc_2024_x64_dvd_2778f4e8.iso" ;; - "cs" | "cs-"* ) url="cs-cz_windows_11_enterprise_ltsc_2024_x64_dvd_d4ef05f2.iso" ;; - "da" | "da-"* ) url="da-dk_windows_11_enterprise_ltsc_2024_x64_dvd_c231c267.iso" ;; - "de" | "de-"* ) url="de-de_windows_11_enterprise_ltsc_2024_x64_dvd_4f136f69.iso" ;; - "el" | "el-"* ) url="el-gr_windows_11_enterprise_ltsc_2024_x64_dvd_54eaabb2.iso" ;; - "gb" | "en-gb" ) url="en-gb_windows_11_enterprise_ltsc_2024_x64_dvd_e2137661.iso" ;; + "ar" | "ar-"* ) url="ar-sa_${l11}_8012f159.iso" ;; + "bg" | "bg-"* ) url="bg-bg_${l11}_2778f4e8.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${l11}_d4ef05f2.iso" ;; + "da" | "da-"* ) url="da-dk_${l11}_c231c267.iso" ;; + "de" | "de-"* ) url="de-de_${l11}_4f136f69.iso" ;; + "el" | "el-"* ) url="el-gr_${l11}_54eaabb2.iso" ;; + "gb" | "en-gb" ) url="en-gb_${l11}_e2137661.iso" ;; "en" | "en-"* ) size=5125844992 sum="157d8365a517c40afeb3106fdd74d0836e1025debbc343f2080e1a8687607f51" - url="en-us_windows_11_enterprise_ltsc_2024_x64_dvd_965cfb00.iso" ;; - "mx" | "es-mx" ) url="es-mx_windows_11_enterprise_ltsc_2024_x64_dvd_3310c094.iso" ;; - "es" | "es-"* ) url="es-es_windows_11_enterprise_ltsc_2024_x64_dvd_77392d61.iso" ;; - "et" | "et-"* ) url="et-ee_windows_11_enterprise_ltsc_2024_x64_dvd_2dbd4bfe.iso" ;; - "fi" | "fi-"* ) url="fi-fi_windows_11_enterprise_ltsc_2024_x64_dvd_998f5df6.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_windows_11_enterprise_ltsc_2024_x64_dvd_78732953.iso" ;; - "fr" | "fr-"* ) url="fr-fr_windows_11_enterprise_ltsc_2024_x64_dvd_d66e386e.iso" ;; - "he" | "he-"* ) url="he-il_windows_11_enterprise_ltsc_2024_x64_dvd_fae050ec.iso" ;; - "hr" | "hr-"* ) url="hr-hr_windows_11_enterprise_ltsc_2024_x64_dvd_e3594411.iso" ;; - "hu" | "hu-"* ) url="hu-hu_windows_11_enterprise_ltsc_2024_x64_dvd_8fea6034.iso" ;; - "it" | "it-"* ) url="it-it_windows_11_enterprise_ltsc_2024_x64_dvd_1e8cabb6.iso" ;; - "ja" | "ja-"* ) url="ja-jp_windows_11_enterprise_ltsc_2024_x64_dvd_e59ad418.iso" ;; - "ko" | "ko-"* ) url="ko-kr_windows_11_enterprise_ltsc_2024_x64_dvd_b6b6eb18.iso" ;; - "lt" | "lt-"* ) url="lt-lt_windows_11_enterprise_ltsc_2024_x64_dvd_145479e9.iso" ;; - "lv" | "lv-"* ) url="lv-lv_windows_11_enterprise_ltsc_2024_x64_dvd_e0ebc53d.iso" ;; - "nb" | "nb-"* ) url="nb-no_windows_11_enterprise_ltsc_2024_x64_dvd_d41eeb48.iso" ;; - "nl" | "nl-"* ) url="nl-nl_windows_11_enterprise_ltsc_2024_x64_dvd_e3063aab.iso" ;; - "pl" | "pl-"* ) url="pl-pl_windows_11_enterprise_ltsc_2024_x64_dvd_e00807a1.iso" ;; - "br" | "pt-br" ) url="pt-br_windows_11_enterprise_ltsc_2024_x64_dvd_2bb6b75b.iso" ;; - "pt" | "pt-"* ) url="pt-pt_windows_11_enterprise_ltsc_2024_x64_dvd_2f34bd6b.iso" ;; - "ro" | "ro-"* ) url="ro-ro_windows_11_enterprise_ltsc_2024_x64_dvd_2eadb4df.iso" ;; - "ru" | "ru-"* ) url="ru-ru_windows_11_enterprise_ltsc_2024_x64_dvd_f9af5773.iso" ;; - "sk" | "sk-"* ) url="sk-sk_windows_11_enterprise_ltsc_2024_x64_dvd_03b916e7.iso" ;; - "sl" | "sl-"* ) url="sl-si_windows_11_enterprise_ltsc_2024_x64_dvd_310b3a76.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_windows_11_enterprise_ltsc_2024_x64_dvd_3dfa5da5.iso" ;; - "sv" | "sv-"* ) url="sv-se_windows_11_enterprise_ltsc_2024_x64_dvd_191cf991.iso" ;; - "th" | "th-"* ) url="th-th_windows_11_enterprise_ltsc_2024_x64_dvd_47ce2c8a.iso" ;; - "tr" | "tr-"* ) url="tr-tr_windows_11_enterprise_ltsc_2024_x64_dvd_27bdab81.iso" ;; - "uk" | "uk-"* ) url="uk-ua_windows_11_enterprise_ltsc_2024_x64_dvd_b3f00872.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_windows_11_enterprise_ltsc_2024_x64_dvd_6287d84d.iso" ;; - "zh" | "zh-"* ) url="zh-cn_windows_11_enterprise_ltsc_2024_x64_dvd_cff9cd2d.iso" ;; + url="en-us_${l11}_965cfb00.iso" ;; + "mx" | "es-mx" ) url="es-mx_${l11}_3310c094.iso" ;; + "es" | "es-"* ) url="es-es_${l11}_77392d61.iso" ;; + "et" | "et-"* ) url="et-ee_${l11}_2dbd4bfe.iso" ;; + "fi" | "fi-"* ) url="fi-fi_${l11}_998f5df6.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_${l11}_78732953.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${l11}_d66e386e.iso" ;; + "he" | "he-"* ) url="he-il_${l11}_fae050ec.iso" ;; + "hr" | "hr-"* ) url="hr-hr_${l11}_e3594411.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${l11}_8fea6034.iso" ;; + "it" | "it-"* ) url="it-it_${l11}_1e8cabb6.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${l11}_e59ad418.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${l11}_b6b6eb18.iso" ;; + "lt" | "lt-"* ) url="lt-lt_${l11}_145479e9.iso" ;; + "lv" | "lv-"* ) url="lv-lv_${l11}_e0ebc53d.iso" ;; + "nb" | "nb-"* ) url="nb-no_${l11}_d41eeb48.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${l11}_e3063aab.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${l11}_e00807a1.iso" ;; + "br" | "pt-br" ) url="pt-br_${l11}_2bb6b75b.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${l11}_2f34bd6b.iso" ;; + "ro" | "ro-"* ) url="ro-ro_${l11}_2eadb4df.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${l11}_f9af5773.iso" ;; + "sk" | "sk-"* ) url="sk-sk_${l11}_03b916e7.iso" ;; + "sl" | "sl-"* ) url="sl-si_${l11}_310b3a76.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_${l11}_3dfa5da5.iso" ;; + "sv" | "sv-"* ) url="sv-se_${l11}_191cf991.iso" ;; + "th" | "th-"* ) url="th-th_${l11}_47ce2c8a.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${l11}_27bdab81.iso" ;; + "uk" | "uk-"* ) url="uk-ua_${l11}_b3f00872.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${l11}_6287d84d.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${l11}_cff9cd2d.iso" ;; esac ;; "win11x64-iot" | "win11x64-enterprise-iot-eval" ) @@ -1012,49 +1115,139 @@ getLink3() { sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" url="en-us_windows_11_iot_enterprise_ltsc_2024_x64_dvd_f6b14814.iso" ;; + "win10x64" ) + case "${culture,,}" in + "ar" | "ar-"* ) url="ar-sa_${c10}.iso" ;; + "bg" | "bg-"* ) url="bg-bg_${c10}.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${c10}.iso" ;; + "da" | "da-"* ) url="da-dk_${c10}.iso" ;; + "de" | "de-"* ) url="de-de_${c10}.iso" ;; + "el" | "el-"* ) url="el-gr_${c10}.iso" ;; + "gb" | "en-gb" ) url="en-gb_${c10}.iso" ;; + "en" | "en-"* ) + size=7176140800 + sum="dda45d271061937657689b30944c792be97405fd5ca2110094049dc01a9201ec" + url="en-us_${c10}.iso" ;; + "mx" | "es-mx" ) url="es-mx_${c10}.iso" ;; + "es" | "es-"* ) url="es-es_${c10}.iso" ;; + "et" | "et-"* ) url="et-ee_${c10}.iso" ;; + "fi" | "fi-"* ) url="fi-fi_${c10}.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_${c10}.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${c10}.iso" ;; + "he" | "he-"* ) url="he-il_${c10}.iso" ;; + "hr" | "hr-"* ) url="hr-hr_${c10}.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${c10}.iso" ;; + "it" | "it-"* ) url="it-it_${c10}.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${c10}.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${c10}.iso" ;; + "lt" | "lt-"* ) url="lt-lt_${c10}.iso" ;; + "lv" | "lv-"* ) url="lv-lv_${c10}.iso" ;; + "nb" | "nb-"* ) url="nb-no_${c10}.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${c10}.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${c10}.iso" ;; + "br" | "pt-br" ) url="pt-br_${c10}.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${c10}.iso" ;; + "ro" | "ro-"* ) url="ro-ro_${c10}.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${c10}.iso" ;; + "sk" | "sk-"* ) url="sk-sk_${c10}.iso" ;; + "sl" | "sl-"* ) url="sl-si_${c10}.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_${c10}.iso" ;; + "sv" | "sv-"* ) url="sv-se_${c10}.iso" ;; + "th" | "th-"* ) url="th-th_${c10}.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${c10}.iso" ;; + "uk" | "uk-"* ) url="uk-ua_${c10}.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${c10}.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${c10}.iso" ;; + esac + ;; + "win10x64-enterprise" | "win10x64-enterprise-eval" ) + case "${culture,,}" in + "ar" | "ar-"* ) url="ar-sa_${b10}_72d26609.iso" ;; + "bg" | "bg-"* ) url="bg-bg_${b10}_916cba75.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${b10}_737b3dce.iso" ;; + "da" | "da-"* ) url="da-dk_${b10}_beb2874a.iso" ;; + "de" | "de-"* ) url="de-de_${b10}_e5656293.iso" ;; + "el" | "el-"* ) url="el-gr_${b10}_3dcced88.iso" ;; + "gb" | "en-gb" ) url="en-gb_${b10}_4b87ccc8.iso" ;; + "en" | "en-"* ) + size=6985318400 + sum="cd224fff371bbce4ab2120a3ace8ed30dc5c48c87f766ff699eed3327d0db83e" + url="en-us_${b10}_66a185c7.iso" ;; + "mx" | "es-mx" ) url="es-mx_${b10}_c71c3a9b.iso" ;; + "es" | "es-"* ) url="es-es_${b10}_6a893bdb.iso" ;; + "et" | "et-"* ) url="et-ee_${b10}_e73ca294.iso" ;; + "fi" | "fi-"* ) url="fi-fi_${b10}_b4138a1f.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_${b10}_fa1fcfd1.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${b10}_2582115c.iso" ;; + "he" | "he-"* ) url="he-il_${b10}_070da6e1.iso" ;; + "hr" | "hr-"* ) url="hr-hr_${b10}_7ab0b83d.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${b10}_9ae1341c.iso" ;; + "it" | "it-"* ) url="it-it_${b10}_ed9771c1.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${b10}_41fb6974.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${b10}_8ee84458.iso" ;; + "lt" | "lt-"* ) url="lt-lt_${b10}_dde00c8b.iso" ;; + "lv" | "lv-"* ) url="lv-lv_${b10}_3c6ec670.iso" ;; + "nb" | "nb-"* ) url="nb-no_${b10}_5c0830a7.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${b10}_98c1911c.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${b10}_21470c6f.iso" ;; + "br" | "pt-br" ) url="pt-br_${b10}_a8287ba4.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${b10}_927e183d.iso" ;; + "ro" | "ro-"* ) url="ro-ro_${b10}_05768a51.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${b10}_e0d31c6c.iso" ;; + "sk" | "sk-"* ) url="sk-sk_${b10}_a09d6210.iso" ;; + "sl" | "sl-"* ) url="sl-si_${b10}_b6e9be37.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_${b10}_d3114222.iso" ;; + "sv" | "sv-"* ) url="sv-se_${b10}_4fbbd5fa.iso" ;; + "th" | "th-"* ) url="th-th_${b10}_c820f914.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${b10}_62d51ca5.iso" ;; + "uk" | "uk-"* ) url="uk-ua_${b10}_3d50cf88.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${b10}_2fab2287.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${b10}_52bd0537.iso" ;; + esac + ;; "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_windows_10_enterprise_ltsc_2021_x64_dvd_60bc2a7a.iso" ;; - "bg" | "bg-"* ) url="bg-bg_windows_10_enterprise_ltsc_2021_x64_dvd_b0887275.iso" ;; - "cs" | "cs-"* ) url="cs-cz_windows_10_enterprise_ltsc_2021_x64_dvd_d624c653.iso" ;; - "da" | "da-"* ) url="da-dk_windows_10_enterprise_ltsc_2021_x64_dvd_6ec511bb.iso" ;; - "de" | "de-"* ) url="de-de_windows_10_enterprise_ltsc_2021_x64_dvd_71796d33.iso" ;; - "el" | "el-"* ) url="el-gr_windows_10_enterprise_ltsc_2021_x64_dvd_c83eab34.iso" ;; - "gb" | "en-gb" ) url="en-gb_windows_10_enterprise_ltsc_2021_x64_dvd_7fe51fe8.iso" ;; + "ar" | "ar-"* ) url="ar-sa_${l10}_60bc2a7a.iso" ;; + "bg" | "bg-"* ) url="bg-bg_${l10}_b0887275.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${l10}_d624c653.iso" ;; + "da" | "da-"* ) url="da-dk_${l10}_6ec511bb.iso" ;; + "de" | "de-"* ) url="de-de_${l10}_71796d33.iso" ;; + "el" | "el-"* ) url="el-gr_${l10}_c83eab34.iso" ;; + "gb" | "en-gb" ) url="en-gb_${l10}_7fe51fe8.iso" ;; "en" | "en-"* ) size=4899461120 sum="c90a6df8997bf49e56b9673982f3e80745058723a707aef8f22998ae6479597d" - url="en-us_windows_10_enterprise_ltsc_2021_x64_dvd_d289cf96.iso" ;; - "mx" | "es-mx" ) url="es-mx_windows_10_enterprise_ltsc_2021_x64_dvd_f6aaf384.iso" ;; - "es" | "es-"* ) url="es-es_windows_10_enterprise_ltsc_2021_x64_dvd_51d721ea.iso" ;; - "et" | "et-"* ) url="et-ee_windows_10_enterprise_ltsc_2021_x64_dvd_012a5c50.iso" ;; - "fi" | "fi-"* ) url="fi-fi_windows_10_enterprise_ltsc_2021_x64_dvd_551582d9.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_windows_10_enterprise_ltsc_2021_x64_dvd_2770e649.iso" ;; - "fr" | "fr-"* ) url="fr-fr_windows_10_enterprise_ltsc_2021_x64_dvd_bda01eb0.iso" ;; - "he" | "he-"* ) url="he-il_windows_10_enterprise_ltsc_2021_x64_dvd_3a55ecd6.iso" ;; - "hr" | "hr-"* ) url="hr-hr_windows_10_enterprise_ltsc_2021_x64_dvd_f5085b75.iso" ;; - "hu" | "hu-"* ) url="hu-hu_windows_10_enterprise_ltsc_2021_x64_dvd_d541ddb3.iso" ;; - "it" | "it-"* ) url="it-it_windows_10_enterprise_ltsc_2021_x64_dvd_0c1aa034.iso" ;; - "ja" | "ja-"* ) url="ja-jp_windows_10_enterprise_ltsc_2021_x64_dvd_ef58c6a1.iso" ;; - "ko" | "ko-"* ) url="ko-kr_windows_10_enterprise_ltsc_2021_x64_dvd_6d26f398.iso" ;; - "lt" | "lt-"* ) url="lt-lt_windows_10_enterprise_ltsc_2021_x64_dvd_9ffbbd5b.iso" ;; - "lv" | "lv-"* ) url="lv-lv_windows_10_enterprise_ltsc_2021_x64_dvd_6c89d2e0.iso" ;; - "nb" | "nb-"* ) url="nb-no_windows_10_enterprise_ltsc_2021_x64_dvd_c65c51a5.iso" ;; - "nl" | "nl-"* ) url="nl-nl_windows_10_enterprise_ltsc_2021_x64_dvd_88f53466.iso" ;; - "pl" | "pl-"* ) url="pl-pl_windows_10_enterprise_ltsc_2021_x64_dvd_eff40776.iso" ;; - "br" | "pt-br" ) url="pt-br_windows_10_enterprise_ltsc_2021_x64_dvd_f318268e.iso" ;; - "pt" | "pt-"* ) url="pt-pt_windows_10_enterprise_ltsc_2021_x64_dvd_f2e9b6a0.iso" ;; - "ro" | "ro-"* ) url="ro-ro_windows_10_enterprise_ltsc_2021_x64_dvd_ae2284d6.iso" ;; - "ru" | "ru-"* ) url="ru-ru_windows_10_enterprise_ltsc_2021_x64_dvd_5044a1e7.iso" ;; - "sk" | "sk-"* ) url="sk-sk_windows_10_enterprise_ltsc_2021_x64_dvd_d6c64c5f.iso" ;; - "sl" | "sl-"* ) url="sl-si_windows_10_enterprise_ltsc_2021_x64_dvd_ec090386.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_windows_10_enterprise_ltsc_2021_x64_dvd_2d2f8815.iso" ;; - "sv" | "sv-"* ) url="sv-se_windows_10_enterprise_ltsc_2021_x64_dvd_9a28bb6b.iso" ;; - "th" | "th-"* ) url="th-th_windows_10_enterprise_ltsc_2021_x64_dvd_b7ed34d6.iso" ;; - "tr" | "tr-"* ) url="tr-tr_windows_10_enterprise_ltsc_2021_x64_dvd_e55b1896.iso" ;; - "uk" | "uk-"* ) url="uk-ua_windows_10_enterprise_ltsc_2021_x64_dvd_816da3c3.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_windows_10_enterprise_ltsc_2021_x64_dvd_80dba877.iso" ;; - "zh" | "zh-"* ) url="zh-cn_windows_10_enterprise_ltsc_2021_x64_dvd_033b7312.iso" ;; + url="en-us_${l10}_d289cf96.iso" ;; + "mx" | "es-mx" ) url="es-mx_${l10}_f6aaf384.iso" ;; + "es" | "es-"* ) url="es-es_${l10}_51d721ea.iso" ;; + "et" | "et-"* ) url="et-ee_${l10}_012a5c50.iso" ;; + "fi" | "fi-"* ) url="fi-fi_${l10}_551582d9.iso" ;; + "ca" | "fr-ca" ) url="fr-ca_${l10}_2770e649.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${l10}_bda01eb0.iso" ;; + "he" | "he-"* ) url="he-il_${l10}_3a55ecd6.iso" ;; + "hr" | "hr-"* ) url="hr-hr_${l10}_f5085b75.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${l10}_d541ddb3.iso" ;; + "it" | "it-"* ) url="it-it_${l10}_0c1aa034.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${l10}_ef58c6a1.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${l10}_6d26f398.iso" ;; + "lt" | "lt-"* ) url="lt-lt_${l10}_9ffbbd5b.iso" ;; + "lv" | "lv-"* ) url="lv-lv_${l10}_6c89d2e0.iso" ;; + "nb" | "nb-"* ) url="nb-no_${l10}_c65c51a5.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${l10}_88f53466.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${l10}_eff40776.iso" ;; + "br" | "pt-br" ) url="pt-br_${l10}_f318268e.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${l10}_f2e9b6a0.iso" ;; + "ro" | "ro-"* ) url="ro-ro_${l10}_ae2284d6.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${l10}_5044a1e7.iso" ;; + "sk" | "sk-"* ) url="sk-sk_${l10}_d6c64c5f.iso" ;; + "sl" | "sl-"* ) url="sl-si_${l10}_ec090386.iso" ;; + "sr" | "sr-"* ) url="sr-latn-rs_${l10}_2d2f8815.iso" ;; + "sv" | "sv-"* ) url="sv-se_${l10}_9a28bb6b.iso" ;; + "th" | "th-"* ) url="th-th_${l10}_b7ed34d6.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${l10}_e55b1896.iso" ;; + "uk" | "uk-"* ) url="uk-ua_${l10}_816da3c3.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${l10}_80dba877.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${l10}_033b7312.iso" ;; esac ;; "win10x64-iot" | "win10x64-enterprise-iot-eval" ) @@ -1065,96 +1258,198 @@ getLink3() { ;; "win81x64-enterprise" | "win81x64-enterprise-eval" ) case "${culture,,}" in - "ar" | "ar-"* ) url="ar_windows_8.1_enterprise_with_update_x64_dvd_6050360.iso" ;; - "bg" | "bg-"* ) url="bg_windows_8.1_enterprise_with_update_x64_dvd_6050367.iso" ;; - "cs" | "cs-"* ) url="cs_windows_8.1_enterprise_with_update_x64_dvd_6050393.iso" ;; - "da" | "da-"* ) url="da_windows_8.1_enterprise_with_update_x64_dvd_6050394.iso" ;; - "de" | "de-"* ) url="de_windows_8.1_enterprise_with_update_x64_dvd_6050501.iso" ;; - "el" | "el-"* ) url="el_windows_8.1_enterprise_with_update_x64_dvd_6050503.iso" ;; - "gb" | "en-gb" ) url="en-gb_windows_8.1_enterprise_with_update_x64_dvd_6054383.iso" ;; + "ar" | "ar-"* ) url="ar_${w81}_6050360.iso" ;; + "bg" | "bg-"* ) url="bg_${w81}_6050367.iso" ;; + "cs" | "cs-"* ) url="cs_${w81}_6050393.iso" ;; + "da" | "da-"* ) url="da_${w81}_6050394.iso" ;; + "de" | "de-"* ) url="de_${w81}_6050501.iso" ;; + "el" | "el-"* ) url="el_${w81}_6050503.iso" ;; + "gb" | "en-gb" ) url="en-gb_${w81}_6054383.iso" ;; "en" | "en-"* ) size=4139163648 sum="c3c604c03677504e8905090a8ce5bb1dde76b6fd58e10f32e3a25bef21b2abe1" - url="en_windows_8.1_enterprise_with_update_x64_dvd_6054382.iso" ;; - "es" | "es-"* ) url="es_windows_8.1_enterprise_with_update_x64_dvd_6050578.iso" ;; - "et" | "et-"* ) url="et_windows_8.1_enterprise_with_update_x64_dvd_6054384.iso" ;; - "fi" | "fi-"* ) url="fi_windows_8.1_enterprise_with_update_x64_dvd_6050497.iso" ;; - "fr" | "fr-"* ) url="fr_windows_8.1_enterprise_with_update_x64_dvd_6050499.iso" ;; - "he" | "he-"* ) url="he_windows_8.1_enterprise_with_update_x64_dvd_6050504.iso" ;; - "hr" | "hr-"* ) url="hr_windows_8.1_enterprise_with_update_x64_dvd_6050391.iso" ;; - "hu" | "hu-"* ) url="hu_windows_8.1_enterprise_with_update_x64_dvd_6050505.iso" ;; - "it" | "it-"* ) url="it_windows_8.1_enterprise_with_update_x64_dvd_6050507.iso" ;; - "ja" | "ja-"* ) url="ja_windows_8.1_enterprise_with_update_x64_dvd_6050508.iso" ;; - "ko" | "ko-"* ) url="ko_windows_8.1_enterprise_with_update_x64_dvd_6050509.iso" ;; - "lt" | "lt-"* ) url="lt_windows_8.1_enterprise_with_update_x64_dvd_6050511.iso" ;; - "lv" | "lv-"* ) url="lv_windows_8.1_enterprise_with_update_x64_dvd_6050510.iso" ;; - "nb" | "nb-"* ) url="nb_windows_8.1_enterprise_with_update_x64_dvd_6050512.iso" ;; - "nl" | "nl-"* ) url="nl_windows_8.1_enterprise_with_update_x64_dvd_6054381.iso" ;; - "pl" | "pl-"* ) url="pl_windows_8.1_enterprise_with_update_x64_dvd_6050515.iso" ;; - "br" | "pt-br" ) url="pt_windows_8.1_enterprise_with_update_x64_dvd_6050521.iso" ;; - "pt" | "pt-"* ) url="pp_windows_8.1_enterprise_with_update_x64_dvd_6050526.iso" ;; - "ro" | "ro-"* ) url="ro_windows_8.1_enterprise_with_update_x64_dvd_6050534.iso" ;; - "ru" | "ru-"* ) url="ru_windows_8.1_enterprise_with_update_x64_dvd_6050542.iso" ;; - "sk" | "sk-"* ) url="sk_windows_8.1_enterprise_with_update_x64_dvd_6050562.iso" ;; - "sl" | "sl-"* ) url="sl_windows_8.1_enterprise_with_update_x64_dvd_6050570.iso" ;; - "sr" | "sr-"* ) url="sr-latn_windows_8.1_enterprise_with_update_x64_dvd_6050553.iso" ;; - "sv" | "sv-"* ) url="sv_windows_8.1_enterprise_with_update_x64_dvd_6050590.iso" ;; - "th" | "th-"* ) url="th_windows_8.1_enterprise_with_update_x64_dvd_6050602.iso" ;; - "tr" | "tr-"* ) url="tr_windows_8.1_enterprise_with_update_x64_dvd_6050609.iso" ;; - "uk" | "uk-"* ) url="uk_windows_8.1_enterprise_with_update_x64_dvd_6050618.iso" ;; - "zh-hk" ) url="hk_windows_8.1_enterprise_with_update_x64_dvd_6050380.iso" ;; - "zh-tw" ) url="tw_windows_8.1_enterprise_with_update_x64_dvd_6050387.iso" ;; - "zh" | "zh-"* ) url="cn_windows_8.1_enterprise_with_update_x64_dvd_6050374.iso" ;; + url="en_${w81}_6054382.iso" ;; + "es" | "es-"* ) url="es_${w81}_6050578.iso" ;; + "et" | "et-"* ) url="et_${w81}_6054384.iso" ;; + "fi" | "fi-"* ) url="fi_${w81}_6050497.iso" ;; + "fr" | "fr-"* ) url="fr_${w81}_6050499.iso" ;; + "he" | "he-"* ) url="he_${w81}_6050504.iso" ;; + "hr" | "hr-"* ) url="hr_${w81}_6050391.iso" ;; + "hu" | "hu-"* ) url="hu_${w81}_6050505.iso" ;; + "it" | "it-"* ) url="it_${w81}_6050507.iso" ;; + "ja" | "ja-"* ) url="ja_${w81}_6050508.iso" ;; + "ko" | "ko-"* ) url="ko_${w81}_6050509.iso" ;; + "lt" | "lt-"* ) url="lt_${w81}_6050511.iso" ;; + "lv" | "lv-"* ) url="lv_${w81}_6050510.iso" ;; + "nb" | "nb-"* ) url="nb_${w81}_6050512.iso" ;; + "nl" | "nl-"* ) url="nl_${w81}_6054381.iso" ;; + "pl" | "pl-"* ) url="pl_${w81}_6050515.iso" ;; + "br" | "pt-br" ) url="pt_${w81}_6050521.iso" ;; + "pt" | "pt-"* ) url="pp_${w81}_6050526.iso" ;; + "ro" | "ro-"* ) url="ro_${w81}_6050534.iso" ;; + "ru" | "ru-"* ) url="ru_${w81}_6050542.iso" ;; + "sk" | "sk-"* ) url="sk_${w81}_6050562.iso" ;; + "sl" | "sl-"* ) url="sl_${w81}_6050570.iso" ;; + "sr" | "sr-"* ) url="sr-latn_${w81}_6050553.iso" ;; + "sv" | "sv-"* ) url="sv_${w81}_6050590.iso" ;; + "th" | "th-"* ) url="th_${w81}_6050602.iso" ;; + "tr" | "tr-"* ) url="tr_${w81}_6050609.iso" ;; + "uk" | "uk-"* ) url="uk_${w81}_6050618.iso" ;; + "zh-hk" ) url="hk_${w81}_6050380.iso" ;; + "zh-tw" ) url="tw_${w81}_6050387.iso" ;; + "zh" | "zh-"* ) url="cn_${w81}_6050374.iso" ;; esac ;; "win2025" | "win2025-eval" ) case "${culture,,}" in - "cs" | "cs-"* ) url="cs-cz_windows_server_2025_preview_x64_dvd_8b1f5b49.iso" ;; - "de" | "de-"* ) url="de-de_windows_server_2025_preview_x64_dvd_1c3dfe1c.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${w25}_4f54e1b0.iso" ;; + "de" | "de-"* ) url="de-de_${w25}_5282a882.iso" ;; "en" | "en-"* ) - size=5307176960 - sum="2293897341febdcea599f5412300b470b5288c6fd2b89666a7b27d283e8d3cf3" - url="en-us_windows_server_2025_preview_x64_dvd_ce9eb1a5.iso" ;; - "es" | "es-"* ) url="es-es_windows_server_2025_preview_x64_dvd_b07cc858.iso" ;; - "fr" | "fr-"* ) url="fr-fr_windows_server_2025_preview_x64_dvd_036e8a78.iso" ;; - "hu" | "hu-"* ) url="hu-hu_windows_server_2025_preview_x64_dvd_2d5d77e5.iso" ;; - "it" | "it-"* ) url="it-it_windows_server_2025_preview_x64_dvd_eaccac73.iso" ;; - "ja" | "ja-"* ) url="ja-jp_windows_server_2025_preview_x64_dvd_62f802be.iso" ;; - "ko" | "ko-"* ) url="ko-kr_windows_server_2025_preview_x64_dvd_e2c3e8f0.iso" ;; - "nl" | "nl-"* ) url="nl-nl_windows_server_2025_preview_x64_dvd_314b4ed1.iso" ;; - "pl" | "pl-"* ) url="pl-pl_windows_server_2025_preview_x64_dvd_be4b099e.iso" ;; - "br" | "pt-br" ) url="pt-br_windows_server_2025_preview_x64_dvd_993c803a.iso" ;; - "pt" | "pt-"* ) url="pt-pt_windows_server_2025_preview_x64_dvd_869aa534.iso" ;; - "ru" | "ru-"* ) url="ru-ru_windows_server_2025_preview_x64_dvd_5ada1817.iso" ;; - "sv" | "sv-"* ) url="sv-se_windows_server_2025_preview_x64_dvd_5fafd4f7.iso" ;; - "tr" | "tr-"* ) url="tr-tr_windows_server_2025_preview_x64_dvd_3aab7fda.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_windows_server_2025_preview_x64_dvd_9b147dcd.iso" ;; - "zh" | "zh-"* ) url="zh-cn_windows_server_2025_preview_x64_dvd_a12bb0bf.iso" ;; + size=6013794304 + sum="854109e1f215a29fc3541188297a6ca97c8a8f0f8c4dd6236b78dfdf845bf75e" + url="en-us_${w25}_b7ec10f3.iso" ;; + "es" | "es-"* ) url="es-es_${w25}_c15f0ce2.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${w25}_bd6be507.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${w25}_e13eb8bf.iso" ;; + "it" | "it-"* ) url="it-it_${w25}_98437899.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${w25}_7a2e979b.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${w25}_85109737.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${w25}_5c3218f3.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${w25}_aa368cf8.iso" ;; + "br" | "pt-br" ) url="pt-br_${w25}_66107129.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${w25}_62bb3c31.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${w25}_2dfe1679.iso" ;; + "sv" | "sv-"* ) url="sv-se_${w25}_512bf117.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${w25}_a03fe256.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${w25}_6d2c01e3.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${w25}_1d93dd12.iso" ;; + esac + ;; + "win2022" | "win2022-eval" ) + case "${culture,,}" in + "cs" | "cs-"* ) url="cs-cz_${w22}.iso" ;; + "de" | "de-"* ) url="de-de_${w22}.iso" ;; + "en" | "en-"* ) + size=5973856256 + sum="61fa400b6e8f54e644529d024b18a578547147cdf815ea66c4b7961798717291" + url="en-us_${w22}.iso" ;; + "es" | "es-"* ) url="es-es_${w22}.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${w22}.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${w22}.iso" ;; + "it" | "it-"* ) url="it-it_${w22}.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${w22}.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${w22}.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${w22}.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${w22}.iso" ;; + "br" | "pt-br" ) url="pt-br_${w22}.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${w22}.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${w22}.iso" ;; + "sv" | "sv-"* ) url="sv-se_${w22}.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${w22}.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${w22}.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${w22}.iso" ;; esac ;; "win2019" | "win2019-eval" ) case "${culture,,}" in - "cs" | "cs-"* ) url="cs-cz_windows_server_2019_x64_dvd_3781c31c.iso" ;; - "de" | "de-"* ) url="de-de_windows_server_2019_x64_dvd_132f7aa4.iso" ;; + "cs" | "cs-"* ) url="cs-cz_${w19}_3781c31c.iso" ;; + "de" | "de-"* ) url="de-de_${w19}_132f7aa4.iso" ;; "en" | "en-"* ) size=5651695616 sum="ea247e5cf4df3e5829bfaaf45d899933a2a67b1c700a02ee8141287a8520261c" - url="en-us_windows_server_2019_x64_dvd_f9475476.iso" ;; - "es" | "es-"* ) url="es-es_windows_server_2019_x64_dvd_3ce0fd9e.iso" ;; - "fr" | "fr-"* ) url="fr-fr_windows_server_2019_x64_dvd_f6f6acf6.iso" ;; - "hu" | "hu-"* ) url="hu-hu_windows_server_2019_x64_dvd_1d834c46.iso" ;; - "it" | "it-"* ) url="it-it_windows_server_2019_x64_dvd_454267de.iso" ;; - "ja" | "ja-"* ) url="ja-jp_windows_server_2019_x64_dvd_3899c3a3.iso" ;; - "ko" | "ko-"* ) url="ko-kr_windows_server_2019_x64_dvd_84101c0a.iso" ;; - "nl" | "nl-"* ) url="nl-nl_windows_server_2019_x64_dvd_f69d914e.iso" ;; - "pl" | "pl-"* ) url="pl-pl_windows_server_2019_x64_dvd_a50263e1.iso" ;; - "br" | "pt-br" ) url="pt-br_windows_server_2019_x64_dvd_aee8c1c2.iso" ;; - "pt" | "pt-"* ) url="pt-pt_windows_server_2019_x64_dvd_464373e8.iso" ;; - "ru" | "ru-"* ) url="ru-ru_windows_server_2019_x64_dvd_e02b76ba.iso" ;; - "sv" | "sv-"* ) url="sv-se_windows_server_2019_x64_dvd_48c1aeff.iso" ;; - "tr" | "tr-"* ) url="tr-tr_windows_server_2019_x64_dvd_b51af600.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_windows_server_2019_x64_dvd_a4c80409.iso" ;; - "zh" | "zh-"* ) url="zh-cn_windows_server_2019_x64_dvd_19d65722.iso" ;; + url="en-us_${w19}_f9475476.iso" ;; + "es" | "es-"* ) url="es-es_${w19}_3ce0fd9e.iso" ;; + "fr" | "fr-"* ) url="fr-fr_${w19}_f6f6acf6.iso" ;; + "hu" | "hu-"* ) url="hu-hu_${w19}_1d834c46.iso" ;; + "it" | "it-"* ) url="it-it_${w19}_454267de.iso" ;; + "ja" | "ja-"* ) url="ja-jp_${w19}_3899c3a3.iso" ;; + "ko" | "ko-"* ) url="ko-kr_${w19}_84101c0a.iso" ;; + "nl" | "nl-"* ) url="nl-nl_${w19}_f69d914e.iso" ;; + "pl" | "pl-"* ) url="pl-pl_${w19}_a50263e1.iso" ;; + "br" | "pt-br" ) url="pt-br_${w19}_aee8c1c2.iso" ;; + "pt" | "pt-"* ) url="pt-pt_${w19}_464373e8.iso" ;; + "ru" | "ru-"* ) url="ru-ru_${w19}_e02b76ba.iso" ;; + "sv" | "sv-"* ) url="sv-se_${w19}_48c1aeff.iso" ;; + "tr" | "tr-"* ) url="tr-tr_${w19}_b51af600.iso" ;; + "zh-hk" | "zh-tw" ) url="zh-tw_${w19}_a4c80409.iso" ;; + "zh" | "zh-"* ) url="zh-cn_${w19}_19d65722.iso" ;; + esac + ;; + "win2016" | "win2016-eval" ) + case "${culture,,}" in + "cs" | "cs-"* ) url="cs_${w16}_11636699.iso" ;; + "de" | "de-"* ) url="de_${w16}_11636696.iso" ;; + "en" | "en-"* ) + size=6003804160 + sum="47919ce8b4993f531ca1fa3f85941f4a72b47ebaa4d3a321fecf83ca9d17e6b8" + url="en_${w16}_11636701.iso" ;; + "es" | "es-"* ) url="es_${w16}_11636712.iso" ;; + "fr" | "fr-"* ) url="fr_${w16}_11636729.iso" ;; + "hu" | "hu-"* ) url="hu_${w16}_11636720.iso" ;; + "it" | "it-"* ) url="it_${w16}_11636710.iso" ;; + "ja" | "ja-"* ) url="ja_${w16}_11645964.iso" ;; + "ko" | "ko-"* ) url="ko_${w16}_11636709.iso" ;; + "nl" | "nl-"* ) url="nl_${w16}_11636731.iso" ;; + "pl" | "pl-"* ) url="pl_${w16}_11636719.iso" ;; + "br" | "pt-br" ) url="pt_${w16}_11636697.iso" ;; + "pt" | "pt-"* ) url="pp_${w16}_11637454.iso" ;; + "ru" | "ru-"* ) url="ru_${w16}_11636694.iso" ;; + "sv" | "sv-"* ) url="sv_${w16}_11636706.iso" ;; + "tr" | "tr-"* ) url="tr_${w16}_11636725.iso" ;; + "zh-hk" | "zh-tw" ) url="ct_${w16}_11636717.iso" ;; + "zh" | "zh-"* ) url="cn_${w16}_11636695.iso" ;; + esac + ;; + "win2012r2" | "win2012r2-eval" ) + case "${culture,,}" in + "cs" | "cs-"* ) url="cs_${w12}_6052752.iso" ;; + "de" | "de-"* ) url="de_${w12}_6052780.iso" ;; + "en" | "en-"* ) + size=5400115200 + sum="0e883ce28eb5c6f58a3a3007be978d43edb1035a4585506c1c4504c9e143408d" + url="en_${w12}_6052766.iso" ;; + "es" | "es-"* ) url="es_${w12}_6052831.iso" ;; + "fr" | "fr-"* ) url="fr_${w12}_6052772.iso" ;; + "hu" | "hu-"* ) url="hu_${w12}_6052786.iso" ;; + "it" | "it-"* ) url="it_${w12}_6052792.iso" ;; + "ja" | "ja-"* ) url="ja_${w12}_6052800.iso" ;; + "ko" | "ko-"* ) url="ko_${w12}_6052806.iso" ;; + "nl" | "nl-"* ) url="nl_${w12}_6052760.iso" ;; + "pl" | "pl-"* ) url="pl_${w12}_6052815.iso" ;; + "br" | "pt-br" ) url="pt_${w12}_6052819.iso" ;; + "pt" | "pt-"* ) url="pp_${w12}_6052823.iso" ;; + "ru" | "ru-"* ) url="ru_${w12}_6052827.iso" ;; + "sv" | "sv-"* ) url="sv_${w12}_6052835.iso" ;; + "tr" | "tr-"* ) url="tr_${w12}_6052838.iso" ;; + "zh-hk" ) url="hk_${w12}_6052739.iso" ;; + "zh-tw" ) url="tw_${w12}_6052746.iso" ;; + "zh" | "zh-"* ) url="cn_${w12}_6052729.iso" ;; + esac + ;; + "win2008r2" | "win2008r2-eval" ) + case "${culture,,}" in + "cs" | "cs-"* ) url="cs_${w08}_617402.iso" ;; + "de" | "de-"* ) url="de_${w08}_617404.iso" ;; + "en" | "en-"* ) + size=3166720000 + sum="9b0cd5b11cc2e92badb74450f0cac03006d3c63a2ada36cb1eb95c1bf4b2608f" + url="en_${w08}_617403.iso" ;; + "es" | "es-"* ) url="es_${w08}_617410.iso" ;; + "fr" | "fr-"* ) url="fr_${w08}_617392.iso" ;; + "hu" | "hu-"* ) url="hu_${w08}_617415.iso" ;; + "it" | "it-"* ) url="it_${w08}_619596.iso" ;; + "ja" | "ja-"* ) url="ja_${w08}_631466.iso" ;; + "ko" | "ko-"* ) url="ko_${w08}_617409.iso" ;; + "nl" | "nl-"* ) url="nl_${w08}_617395.iso" ;; + "pl" | "pl-"* ) url="pl_${w08}_617397.iso" ;; + "br" | "pt-br" ) url="pt_${w08}_617394.iso" ;; + "pt" | "pt-"* ) url="pp_${w08}_617411.iso" ;; + "ru" | "ru-"* ) url="ru_${w08}_617421.iso" ;; + "sv" | "sv-"* ) url="sv_${w08}_617400.iso" ;; + "tr" | "tr-"* ) url="tr_${w08}_617416.iso" ;; + "zh-hk" ) url="hk_${w08}_617386.iso" ;; + "zh-tw" ) url="tw_${w08}_617405.iso" ;; + "zh" | "zh-"* ) url="cn_${w08}_617396.iso" ;; esac ;; "win7x64" | "win7x64-enterprise" ) diff --git a/src/mido.sh b/src/mido.sh index ef8015e..be7884f 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -305,7 +305,7 @@ getWindows() { language=$(getLanguage "$lang" "desc") edition=$(printEdition "$version" "$desc") - local msg="Requesting $desc from Microsoft server..." + local msg="Requesting $desc from the Microsoft servers..." info "$msg" && html "$msg" case "${version,,}" in @@ -610,13 +610,18 @@ downloadImage() { local iso="$1" local version="$2" local lang="$3" + local delay=5 local tried="n" + local success="n" local url sum size base desc language + local msg="Will retry after $delay seconds..." if [[ "${version,,}" == "http"* ]]; then base=$(basename "$iso") desc=$(fromFile "$base") downloadFile "$iso" "$version" "" "" "" "$desc" && return 0 + info "$msg" && html "$msg" && sleep "$delay" + downloadFile "$iso" "$version" "" "" "" "$desc" && return 0 rm -f "$iso" return 1 fi @@ -637,11 +642,23 @@ downloadImage() { fi if isMido "$version" "$lang"; then + tried="y" + success="n" + if getWindows "$version" "$lang" "$desc"; then + success="y" + else + info "$msg" && html "$msg" && sleep "$delay" + getWindows "$version" "$lang" "$desc" && success="y" + fi + + if [[ "$success" == "y" ]]; then size=$(getMido "$version" "$lang" "size" ) sum=$(getMido "$version" "$lang" "sum") downloadFile "$iso" "$MIDO_URL" "$sum" "$size" "$lang" "$desc" && return 0 + info "$msg" && html "$msg" && sleep "$delay" + downloadFile "$iso" "$MIDO_URL" "$sum" "$size" "$lang" "$desc" && return 0 rm -f "$iso" fi fi @@ -655,10 +672,20 @@ downloadImage() { fi tried="y" + success="n" if getESD "$TMP/esd" "$version" "$lang" "$desc"; then + success="y" + else + info "$msg" && html "$msg" && sleep "$delay" + getESD "$TMP/esd" "$version" "$lang" "$desc" && success="y" + fi + + if [[ "$success" == "y" ]]; then ISO="${ISO%.*}.esd" downloadFile "$ISO" "$ESD" "$ESD_SUM" "$ESD_SIZE" "$lang" "$desc" && return 0 + info "$msg" && html "$msg" && sleep "$delay" + downloadFile "$ISO" "$ESD" "$ESD_SUM" "$ESD_SIZE" "$lang" "$desc" && return 0 rm -f "$ISO" ISO="$iso" fi @@ -677,6 +704,8 @@ downloadImage() { size=$(getSize "$i" "$version" "$lang") sum=$(getHash "$i" "$version" "$lang") downloadFile "$iso" "$url" "$sum" "$size" "$lang" "$desc" && return 0 + info "$msg" && html "$msg" && sleep "$delay" + downloadFile "$iso" "$url" "$sum" "$size" "$lang" "$desc" && return 0 rm -f "$iso" fi From bb0a0b47b8b7e7c3e36b5bce6cceede52be0b4f8 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 12 Nov 2024 12:17:51 +0100 Subject: [PATCH 085/290] build: Use same version number for ARM64 build (#873) --- Dockerfile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Dockerfile b/Dockerfile index e5abb6f..a36dbd2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,6 +32,10 @@ ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/v0.8/src/wsdd.p ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.43-0/virtio-win-1.9.43.tar.xz /drivers.txz FROM dockurr/windows-arm:2.22 AS build-arm64 + +ARG VERSION_ARG="0.0" +RUN echo "$VERSION_ARG" > /run/version + FROM build-${TARGETARCH} EXPOSE 8006 3389 From d7fcf9a5da70f50eb633fb3b360dff8fd1941fc3 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 12 Nov 2024 12:34:03 +0100 Subject: [PATCH 086/290] build: Use same version number for ARM64 build (#874) --- Dockerfile | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index a36dbd2..7e9e776 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,6 @@ FROM scratch AS build-amd64 COPY --from=qemux/qemu-docker:6.06 / / -ARG VERSION_ARG="0.0" ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" ARG DEBCONF_NONINTERACTIVE_SEEN="true" @@ -22,7 +21,6 @@ RUN set -eu && \ libxml2-utils \ libarchive-tools && \ apt-get clean && \ - echo "$VERSION_ARG" > /run/version && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* COPY --chmod=755 ./src /run/ @@ -32,12 +30,11 @@ ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/v0.8/src/wsdd.p ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.43-0/virtio-win-1.9.43.tar.xz /drivers.txz FROM dockurr/windows-arm:2.22 AS build-arm64 +FROM build-${TARGETARCH} ARG VERSION_ARG="0.0" RUN echo "$VERSION_ARG" > /run/version -FROM build-${TARGETARCH} - EXPOSE 8006 3389 VOLUME /storage From da8bbdcb4747ef88258833d76b07b5f5d98d5fdc Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 12 Nov 2024 12:51:43 +0100 Subject: [PATCH 087/290] build: Synchronize versions between platforms (#876) --- Dockerfile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 7e9e776..801a2ee 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,5 @@ +ARG VERSION_ARG="4.00" + FROM scratch AS build-amd64 COPY --from=qemux/qemu-docker:6.06 / / @@ -29,10 +31,10 @@ COPY --chmod=755 ./assets /run/assets ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/v0.8/src/wsdd.py /usr/sbin/wsdd ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.43-0/virtio-win-1.9.43.tar.xz /drivers.txz -FROM dockurr/windows-arm:2.22 AS build-arm64 +FROM dockurr/windows-arm:${VERSION_ARG} AS build-arm64 FROM build-${TARGETARCH} -ARG VERSION_ARG="0.0" +ARG VERSION_ARG="4.00" RUN echo "$VERSION_ARG" > /run/version EXPOSE 8006 3389 From 3aa2f6e128c64797f0f611e20544791251af79c5 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 13 Nov 2024 01:12:10 +0100 Subject: [PATCH 088/290] build: Update qemu-docker to v6.07 (#882) --- Dockerfile | 4 ++-- readme.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 801a2ee..f7252ce 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="4.00" FROM scratch AS build-amd64 -COPY --from=qemux/qemu-docker:6.06 / / +COPY --from=qemux/qemu-docker:6.07 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" @@ -37,8 +37,8 @@ FROM build-${TARGETARCH} ARG VERSION_ARG="4.00" RUN echo "$VERSION_ARG" > /run/version -EXPOSE 8006 3389 VOLUME /storage +EXPOSE 8006 3389 ENV VERSION="11" ENV RAM_SIZE="4G" diff --git a/readme.md b/readme.md index 4ad3c42..4d7b8db 100644 --- a/readme.md +++ b/readme.md @@ -361,7 +361,7 @@ kubectl apply -f kubernetes.yml - you are not using "Docker Desktop for Linux" as it does not support KVM, instead make use of Docker Engine directly. - - it could help to add `privileged: true` to your compose file (or `sudo` to your `run` command), to rule out any permission issue. + - it could help to add `privileged: true` to your compose file (or `sudo` to your `docker run` command), to rule out any permission issue. ### How do I run macOS in a container? From 658c84c55f1dc08367d83ac5407abf13e55212db Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 13 Nov 2024 03:24:11 +0100 Subject: [PATCH 089/290] docs: Add compatibility chart (#883) --- readme.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/readme.md b/readme.md index 4d7b8db..29e1bdd 100644 --- a/readme.md +++ b/readme.md @@ -58,6 +58,16 @@ Via Kubernetes: kubectl apply -f kubernetes.yml ``` +## Compatibility ⚙️ + +| **Product** | **Platform** | | +|---|---|---| +| Docker Engine | Linux| ✅ | +| Docker Desktop | Linux | ❌ | +| Docker Desktop | macOS | ❌ | +| Docker Desktop | Windows 11 | ✅ | +| Docker Desktop | Windows 10 | ❌ | + ## FAQ 💬 ### How do I use it? From 6919e36aee1e86c9e30f4977dfcf231cc824d668 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 13 Nov 2024 03:34:45 +0100 Subject: [PATCH 090/290] docs: Add Kubernetes URL (#885) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 29e1bdd..1a72923 100644 --- a/readme.md +++ b/readme.md @@ -55,7 +55,7 @@ docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti Via Kubernetes: ```shell -kubectl apply -f kubernetes.yml +kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/master/kubernetes.yml ``` ## Compatibility ⚙️ From 66f595d84a1c891daa4d262cd5a19ac2b4713d85 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 13 Nov 2024 04:37:27 +0100 Subject: [PATCH 091/290] fix: Disable HTTP keepalives (#887) --- src/mido.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mido.sh b/src/mido.sh index be7884f..d739553 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -457,7 +457,7 @@ getESD() { local eFile="esd_edition.xml" local fFile="products_filter.xml" - { wget "$winCatalog" -O "$dir/$wFile" -q --timeout=30; rc=$?; } || : + { wget "$winCatalog" -O "$dir/$wFile" -q --timeout=30 --no-http-keep-alive; rc=$?; } || : msg="Failed to download $winCatalog" (( rc == 3 )) && error "$msg , cannot write file (disk full?)" && return 1 @@ -583,7 +583,7 @@ downloadFile() { info "$msg..." /run/progress.sh "$iso" "$size" "$msg ([P])..." & - { wget "$url" -O "$iso" -q --timeout=30 --show-progress "$progress"; rc=$?; } || : + { wget "$url" -O "$iso" -q --timeout=30 --no-http-keep-alive --show-progress "$progress"; rc=$?; } || : fKill "progress.sh" From 2c4094b0f799e26c49cadb43075b595b6708a146 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 15 Nov 2024 05:16:48 +0100 Subject: [PATCH 092/290] feat: Improved download method (#903) --- Dockerfile | 9 +++--- readme.md | 1 - src/define.sh | 33 +++++++++---------- src/install.sh | 8 ++--- src/mido.sh | 87 +++++++++++++++++++++++++------------------------- 5 files changed, 70 insertions(+), 68 deletions(-) diff --git a/Dockerfile b/Dockerfile index f7252ce..a610fbc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ -ARG VERSION_ARG="4.00" - +ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu-docker:6.07 / / + +COPY --from=qemux/qemu-docker:6.08 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" @@ -11,6 +11,7 @@ RUN set -eu && \ apt-get update && \ apt-get --no-install-recommends -y install \ bc \ + jq \ curl \ 7zip \ wsdd \ @@ -34,7 +35,7 @@ ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.43- FROM dockurr/windows-arm:${VERSION_ARG} AS build-arm64 FROM build-${TARGETARCH} -ARG VERSION_ARG="4.00" +ARG VERSION_ARG="0.00" RUN echo "$VERSION_ARG" > /run/version VOLUME /storage diff --git a/readme.md b/readme.md index 1a72923..ed9c719 100644 --- a/readme.md +++ b/readme.md @@ -103,7 +103,6 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas | `10l` | Windows 10 LTSC | 4.6 GB | | `10e` | Windows 10 Enterprise | 5.2 GB | |||| - | `8` | Windows 8.1 Pro | 4.0 GB | | `8e` | Windows 8.1 Enterprise | 3.7 GB | | `7e` | Windows 7 Enterprise | 3.0 GB | | `ve` | Windows Vista Enterprise | 3.0 GB | diff --git a/src/define.sh b/src/define.sh index a2706e3..00fe997 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1,8 +1,8 @@ #!/usr/bin/env bash set -Eeuo pipefail -: "${XRES:=""}" -: "${YRES:=""}" +: "${WIDTH:=""}" +: "${HEIGHT:=""}" : "${VERIFY:=""}" : "${REGION:=""}" : "${MANUAL:=""}" @@ -164,7 +164,7 @@ getLanguage() { desc="English" culture="en-GB" ;; "en" | "en-"* ) - lang="English (United States)" + lang="English" desc="English" culture="en-US" ;; "mx" | "es-mx" ) @@ -280,15 +280,15 @@ getLanguage() { desc="$lang" culture="uk-UA" ;; "hk" | "zh-hk" | "cn-hk" ) - lang="Chinese Traditional" + lang="Chinese (Traditional)" desc="Chinese HK" culture="zh-TW" ;; "tw" | "zh-tw" | "cn-tw" ) - lang="Chinese Traditional" + lang="Chinese (Traditional)" desc="Chinese TW" culture="zh-TW" ;; "zh" | "zh-"* | "cn" | "cn-"* ) - lang="Chinese Simplified" + lang="Chinese (Simplified)" desc="Chinese" culture="zh-CN" ;; esac @@ -671,10 +671,6 @@ getMido() { size=4898582528 sum="e4ab2e3535be5748252a8d5d57539a6e59be8d6726345ee10e7afd2cb89fefb5" ;; - "win81x64" ) - size=4320526336 - sum="d8333cf427eb3318ff6ab755eb1dd9d433f0e2ae43745312c1cd23e83ca1ce51" - ;; "win81x64-enterprise-eval" ) size=3961473024 sum="2dedd44c45646c74efc5a028f65336027e14a56f76686a4631cf94ffe37c72f2" @@ -766,6 +762,11 @@ getLink1() { sum="d8333cf427eb3318ff6ab755eb1dd9d433f0e2ae43745312c1cd23e83ca1ce51" url="8.x/8.1/en_windows_8.1_with_update_x64_dvd_6051480.iso" ;; + "win81x64-enterprise" | "win81x64-enterprise-eval" ) + size=4139163648 + sum="c3c604c03677504e8905090a8ce5bb1dde76b6fd58e10f32e3a25bef21b2abe1" + url="8.x/8.1/en_windows_8.1_enterprise_with_update_x64_dvd_6054382.iso" + ;; "win2025" | "win2025-eval" ) size=5307176960 sum="2293897341febdcea599f5412300b470b5288c6fd2b89666a7b27d283e8d3cf3" @@ -2122,11 +2123,11 @@ prepareInstall() { local install="$dir/\$OEM\$/\$1/OEM/install.bat" [ -f "$install" ] && oem="\"Script\"=\"cmd /C start \\\"Install\\\" \\\"cmd /C C:\\\\OEM\\\\install.bat\\\"\"" - [ -z "$YRES" ] && YRES="720" - [ -z "$XRES" ] && XRES="1280" + [ -z "$WIDTH" ] && WIDTH="1280" + [ -z "$HEIGHT" ] && HEIGHT="720" - XHEX=$(printf '%x\n' "$XRES") - YHEX=$(printf '%x\n' "$YRES") + XHEX=$(printf '%x\n' "$WIDTH") + YHEX=$(printf '%x\n' "$HEIGHT") local username="Docker" local password="*" @@ -2178,8 +2179,8 @@ prepareInstall() { echo "" echo "[Display]" echo " BitsPerPel=32" - echo " XResolution=$XRES" - echo " YResolution=$YRES" + echo " XResolution=$WIDTH" + echo " YResolution=$HEIGHT" echo "" echo "[Networking]" echo " InstallDefaultComponents=Yes" diff --git a/src/install.sh b/src/install.sh index b03f55a..e22b99e 100644 --- a/src/install.sh +++ b/src/install.sh @@ -620,11 +620,11 @@ updateXML() { local language="$2" local culture region user admin pass keyboard - [ -z "$YRES" ] && YRES="720" - [ -z "$XRES" ] && XRES="1280" + [ -z "$HEIGHT" ] && HEIGHT="720" + [ -z "$WIDTH" ] && WIDTH="1280" - sed -i "s/<VerticalResolution>1080<\/VerticalResolution>/<VerticalResolution>$YRES<\/VerticalResolution>/g" "$asset" - sed -i "s/<HorizontalResolution>1920<\/HorizontalResolution>/<HorizontalResolution>$XRES<\/HorizontalResolution>/g" "$asset" + sed -i "s/<VerticalResolution>1080<\/VerticalResolution>/<VerticalResolution>$HEIGHT<\/VerticalResolution>/g" "$asset" + sed -i "s/<HorizontalResolution>1920<\/HorizontalResolution>/<HorizontalResolution>$WIDTH<\/HorizontalResolution>/g" "$asset" culture=$(getLanguage "$language" "culture") diff --git a/src/mido.sh b/src/mido.sh index d739553..776f716 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -63,31 +63,33 @@ download_windows() { local lang="$2" local desc="$3" local sku_id="" + local sku_url="" + local iso_url="" + local iso_json="" local language="" local session_id="" local user_agent="" + local download_type="" local windows_version="" local iso_download_link="" + local download_page_html="" local product_edition_id="" - local iso_download_link_html="" - local iso_download_page_html="" - local language_skuid_table_html="" - - case "${id,,}" in - "win11x64" ) windows_version="11" ;; - "win10x64" ) windows_version="10" ;; - "win81x64" ) windows_version="8" ;; - * ) error "Invalid VERSION specified, value \"$id\" is not recognized!" && return 1 ;; - esac + local language_skuid_json="" + local profile="606624d44113" user_agent=$(get_agent) language=$(getLanguage "$lang" "name") - local url="https://www.microsoft.com/en-us/software-download/windows$windows_version" - case "$windows_version" in - 8 | 10) url+="ISO";; + case "${id,,}" in + "win11x64" ) windows_version="11" && download_type="1" ;; + "win10x64" ) windows_version="10" && download_type="1" ;; + "win11arm64" ) windows_version="11arm64" && download_type="2" ;; + * ) error "Invalid VERSION specified, value \"$id\" is not recognized!" && return 1 ;; esac + local url="https://www.microsoft.com/en-us/software-download/windows$windows_version" + [[ "${id,,}" == "win10"* ]] && url+="ISO" + # uuidgen: For MacOS (installed by default) and other systems (e.g. with no /proc) that don't have a kernel interface for generating random UUIDs session_id=$(cat /proc/sys/kernel/random/uuid 2> /dev/null || uuidgen --random) @@ -96,44 +98,39 @@ download_windows() { # This is the *only* request we make that Fido doesn't. Fido manually maintains a list of all the Windows release/edition product edition IDs in its script (see: $WindowsVersions array). This is helpful for downloading older releases (e.g. Windows 10 1909, 21H1, etc.) but we always want to get the newest release which is why we get this value dynamically # Also, keeping a "$WindowsVersions" array like Fido does would be way too much of a maintenance burden # Remove "Accept" header that curl sends by default - [[ "$DEBUG" == [Yy1]* ]] && echo " - Parsing download page: ${url}" - iso_download_page_html=$(curl --silent --max-time 30 --user-agent "$user_agent" --header "Accept:" --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url") || { + [[ "$DEBUG" == [Yy1]* ]] && echo "Parsing download page: ${url}" + download_page_html=$(curl --silent --max-time 30 --user-agent "$user_agent" --header "Accept:" --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url") || { handle_curl_error $? return $? } [[ "$DEBUG" == [Yy1]* ]] && echo -n "Getting Product edition ID: " - # tr: Filter for only numerics to prevent HTTP parameter injection - # head -c was recently added to POSIX: https://austingroupbugs.net/view.php?id=407 - product_edition_id=$(echo "$iso_download_page_html" | grep -Eo '<option value="[0-9]+">Windows' | cut -d '"' -f 2 | head -n 1 | tr -cd '0-9' | head -c 16) + product_edition_id=$(echo "$download_page_html" | grep -Eo '<option value="[0-9]+">Windows' | cut -d '"' -f 2 | head -n 1 | tr -cd '0-9' | head -c 16) [[ "$DEBUG" == [Yy1]* ]] && echo "$product_edition_id" + if [ -z "$product_edition_id" ]; then + error "Product edition ID not found!" + return 1 + fi + [[ "$DEBUG" == [Yy1]* ]] && echo "Permit Session ID: $session_id" # Permit Session ID - # "org_id" is always the same value curl --silent --max-time 30 --output /dev/null --user-agent "$user_agent" --header "Accept:" --max-filesize 100K --fail --proto =https --tlsv1.2 --http1.1 -- "https://vlscppe.microsoft.com/tags?org_id=y6jn8c31&session_id=$session_id" || { # This should only happen if there's been some change to how this API works handle_curl_error $? return $? } - # Extract everything after the last slash - local url_segment_parameter="${url##*/}" - [[ "$DEBUG" == [Yy1]* ]] && echo -n "Getting language SKU ID: " - # Get language -> skuID association table - # SKU ID: This specifies the language of the ISO. We always use "English (United States)", however, the SKU for this changes with each Windows release - # We must make this request so our next one will be allowed - # --data "" is required otherwise no "Content-Length" header will be sent causing HTTP response "411 Length Required" - language_skuid_table_html=$(curl --silent --max-time 30 --request POST --user-agent "$user_agent" --data "" --header "Accept:" --max-filesize 10K --fail --proto =https --tlsv1.2 --http1.1 -- "https://www.microsoft.com/en-US/api/controls/contentinclude/html?pageId=a8f8f489-4c7f-463a-9ca6-5cff94d8d041&host=www.microsoft.com&segments=software-download,$url_segment_parameter&query=&action=getskuinformationbyproductedition&sessionId=$session_id&productEditionId=$product_edition_id&sdVersion=2") || { + sku_url="https://www.microsoft.com/software-download-connector/api/getskuinformationbyproductedition?profile=$profile&ProductEditionId=$product_edition_id&SKU=undefined&friendlyFileName=undefined&Locale=en-US&sessionID=$session_id" + language_skuid_json=$(curl --silent --max-time 30 --request GET --user-agent "$user_agent" --referer "$url" --header "Accept:" --max-filesize 100K --fail --proto =https --tlsv1.2 --http1.1 -- "$sku_url") || { handle_curl_error $? return $? } - # tr: Filter for only alphanumerics or "-" to prevent HTTP parameter injection - sku_id=$(echo "$language_skuid_table_html" | grep -m 1 ">${language}<" | sed 's/&quot;//g' | cut -d ',' -f 1 | cut -d ':' -f 2 | tr -cd '[:alnum:]-' | head -c 16) + { sku_id=$(echo "$language_skuid_json" | jq --arg LANG "$language" -r '.Skus[] | select(.Language==$LANG).Id') 2>/dev/null; rc=$?; } || : - if [ -z "$sku_id" ]; then + if [ -z "$sku_id" ] || [[ "${sku_id,,}" == "null" ]] || (( rc != 0 )); then language=$(getLanguage "$lang" "desc") error "No download in the $language language available for $desc!" return 1 @@ -144,28 +141,31 @@ download_windows() { # Get ISO download link # If any request is going to be blocked by Microsoft it's always this last one (the previous requests always seem to succeed) - # --referer: Required by Microsoft servers to allow request - iso_download_link_html=$(curl --silent --max-time 30 --request POST --user-agent "$user_agent" --data "" --referer "$url" --header "Accept:" --max-filesize 100K --fail --proto =https --tlsv1.2 --http1.1 -- "https://www.microsoft.com/en-US/api/controls/contentinclude/html?pageId=6e2a1789-ef16-4f27-a296-74ef7ef5d96b&host=www.microsoft.com&segments=software-download,$url_segment_parameter&query=&action=GetProductDownloadLinksBySku&sessionId=$session_id&skuId=$sku_id&language=English&sdVersion=2") - if ! [ "$iso_download_link_html" ]; then + iso_url="https://www.microsoft.com/software-download-connector/api/GetProductDownloadLinksBySku?profile=$profile&ProductEditionId=undefined&SKU=$sku_id&friendlyFileName=undefined&Locale=en-US&sessionID=$session_id" + iso_json=$(curl --silent --max-time 30 --request GET --user-agent "$user_agent" --referer "$url" --header "Accept:" --max-filesize 100K --fail --proto =https --tlsv1.2 --http1.1 -- "$iso_url") + + if ! [ "$iso_json" ]; then # This should only happen if there's been some change to how this API works error "Microsoft servers gave us an empty response to our request for an automated download." return 1 fi - if echo "$iso_download_link_html" | grep -q "We are unable to complete your request at this time."; then + if echo "$iso_json" | grep -q "Sentinel marked this request as rejected."; then error "Microsoft blocked the automated download request based on your IP address." return 1 fi - # Filter for 64-bit ISO download URL - # sed: HTML decode "&" character - # tr: Filter for only alphanumerics or punctuation - iso_download_link=$(echo "$iso_download_link_html" | grep -o "https://software.download.prss.microsoft.com.*IsoX64" | cut -d '"' -f 1 | sed 's/&amp;/\&/g' | tr -cd '[:alnum:][:punct:]') + if echo "$iso_json" | grep -q "We are unable to complete your request at this time."; then + error "Microsoft blocked the automated download request based on your IP address." + return 1 + fi - if ! [ "$iso_download_link" ]; then - # This should only happen if there's been some change to the download endpoint web address + { iso_download_link=$(echo "$iso_json" | jq --argjson TYPE "$download_type" -r '.ProductDownloadOptions[] | select(.DownloadType==$TYPE).Uri') 2>/dev/null; rc=$?; } || : + + if [ -z "$iso_download_link" ] || [[ "${iso_download_link,,}" == "null" ]] || (( rc != 0 )); then error "Microsoft servers gave us no download link to our request for an automated download!" + info "Response: $iso_json" return 1 fi @@ -283,8 +283,8 @@ download_windows_eval() { [[ "$DEBUG" == [Yy1]* ]] && echo "Found download link: $iso_download_link" # Follow redirect so proceeding log message is useful - # This is a request we make this Fido doesn't - # We don't need to set "--max-filesize" here because this is a HEAD request and the output is to /dev/null anyway + # This is a request we make that Fido doesn't + iso_download_link=$(curl --silent --max-time 30 --user-agent "$user_agent" --location --output /dev/null --silent --write-out "%{url_effective}" --head --fail --proto =https --tlsv1.2 --http1.1 -- "$iso_download_link") || { # This should only happen if the Microsoft servers are down handle_curl_error $? @@ -317,6 +317,7 @@ getWindows() { esac case "${version,,}" in + "win11${PLATFORM,,}" ) ;; "win11${PLATFORM,,}-enterprise-iot"* ) ;; "win11${PLATFORM,,}-enterprise-ltsc"* ) ;; * ) @@ -327,7 +328,7 @@ getWindows() { esac case "${version,,}" in - "win81${PLATFORM,,}" | "win10${PLATFORM,,}" | "win11${PLATFORM,,}" ) + "win10${PLATFORM,,}" | "win11${PLATFORM,,}" ) download_windows "$version" "$lang" "$edition" && return 0 ;; "win11${PLATFORM,,}-enterprise"* | "win10${PLATFORM,,}-enterprise"* ) From a5b4d7760d21036dda7d92c96e83e8c7257f3db6 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 20 Nov 2024 13:27:15 +0100 Subject: [PATCH 093/290] docs: Readme (#920) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index ed9c719..f8f8b95 100644 --- a/readme.md +++ b/readme.md @@ -84,7 +84,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I select the Windows version? - By default, Windows 11 will be installed. But you can add the `VERSION` environment variable to your compose file, in order to specify an alternative Windows version to be downloaded: + By default, Windows 11 Pro will be installed. But you can add the `VERSION` environment variable to your compose file, in order to specify an alternative Windows version to be downloaded: ```yaml environment: From b84a2b60a9e1737f8b8183df996440f649451493 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 24 Nov 2024 22:00:24 +0100 Subject: [PATCH 094/290] feat: Additional download mirrors (#923) --- Dockerfile | 2 +- src/define.sh | 995 +++++--------------------------------------------- src/mido.sh | 261 ++++++++++++- 3 files changed, 347 insertions(+), 911 deletions(-) diff --git a/Dockerfile b/Dockerfile index a610fbc..80619ee 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu-docker:6.08 / / +COPY --from=qemux/qemu-docker:6.09 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" diff --git a/src/define.sh b/src/define.sh index 00fe997..ef93d41 100644 --- a/src/define.sh +++ b/src/define.sh @@ -14,7 +14,7 @@ set -Eeuo pipefail : "${USERNAME:=""}" : "${PASSWORD:=""}" -MIRRORS=4 +MIRRORS=3 PLATFORM="x64" parseVersion() { @@ -132,162 +132,202 @@ getLanguage() { local ret="$2" local lang="" local desc="" + local short="" local culture="" case "${id,,}" in "ar" | "ar-"* ) + short="ar" lang="Arabic" desc="$lang" culture="ar-SA" ;; "bg" | "bg-"* ) + short="bg" lang="Bulgarian" desc="$lang" culture="bg-BG" ;; "cs" | "cs-"* | "cz" | "cz-"* ) + short="cs" lang="Czech" desc="$lang" culture="cs-CZ" ;; "da" | "da-"* | "dk" | "dk-"* ) + short="da" lang="Danish" desc="$lang" culture="da-DK" ;; "de" | "de-"* ) + short="de" lang="German" desc="$lang" culture="de-DE" ;; "el" | "el-"* | "gr" | "gr-"* ) + short="el" lang="Greek" desc="$lang" culture="el-GR" ;; "gb" | "en-gb" ) + short="en-gb" lang="English International" desc="English" culture="en-GB" ;; "en" | "en-"* ) + short="en" lang="English" desc="English" culture="en-US" ;; "mx" | "es-mx" ) + short="mx" lang="Spanish (Mexico)" desc="Spanish" culture="es-MX" ;; "es" | "es-"* ) + short="es" lang="Spanish" desc="$lang" culture="es-ES" ;; "et" | "et-"* ) + short="et" lang="Estonian" desc="$lang" culture="et-EE" ;; "fi" | "fi-"* ) + short="fi" lang="Finnish" desc="$lang" culture="fi-FI" ;; "ca" | "fr-ca" ) + short="ca" lang="French Canadian" desc="French" culture="fr-CA" ;; "fr" | "fr-"* ) + short="fr" lang="French" desc="$lang" culture="fr-FR" ;; "he" | "he-"* | "il" | "il-"* ) + short="he" lang="Hebrew" desc="$lang" culture="he-IL" ;; "hr" | "hr-"* | "cr" | "cr-"* ) + short="hr" lang="Croatian" desc="$lang" culture="hr-HR" ;; "hu" | "hu-"* ) + short="hu" lang="Hungarian" desc="$lang" culture="hu-HU" ;; "it" | "it-"* ) + short="it" lang="Italian" desc="$lang" culture="it-IT" ;; "ja" | "ja-"* | "jp" | "jp-"* ) + short="ja" lang="Japanese" desc="$lang" culture="ja-JP" ;; "ko" | "ko-"* | "kr" | "kr-"* ) + short="ko" lang="Korean" desc="$lang" culture="ko-KR" ;; "lt" | "lt-"* ) + short="lt" lang="Lithuanian" desc="$lang" - culture="lv-LV" ;; + culture="lt-LT" ;; "lv" | "lv-"* ) + short="lv" lang="Latvian" desc="$lang" - culture="lt-LT" ;; + culture="lv-LV" ;; "nb" | "nb-"* |"nn" | "nn-"* | "no" | "no-"* ) + short="no" lang="Norwegian" desc="$lang" culture="nb-NO" ;; "nl" | "nl-"* ) + short="nl" lang="Dutch" desc="$lang" culture="nl-NL" ;; "pl" | "pl-"* ) + short="pl" lang="Polish" desc="$lang" culture="pl-PL" ;; "br" | "pt-br" ) + short="pt" lang="Brazilian Portuguese" desc="Portuguese" culture="pt-BR" ;; "pt" | "pt-"* ) + short="pp" lang="Portuguese" desc="$lang" culture="pt-BR" ;; "ro" | "ro-"* ) + short="ro" lang="Romanian" desc="$lang" culture="ro-RO" ;; "ru" | "ru-"* ) + short="ru" lang="Russian" desc="$lang" culture="ru-RU" ;; "sk" | "sk-"* ) + short="sk" lang="Slovak" desc="$lang" culture="sk-SK" ;; "sl" | "sl-"* | "si" | "si-"* ) + short="sl" lang="Slovenian" desc="$lang" culture="sl-SI" ;; "sr" | "sr-"* ) + short="sr" lang="Serbian Latin" desc="Serbian" culture="sr-Latn-RS" ;; "sv" | "sv-"* | "se" | "se-"* ) + short="sv" lang="Swedish" desc="$lang" culture="sv-SE" ;; "th" | "th-"* ) + short="th" lang="Thai" desc="$lang" culture="th-TH" ;; "tr" | "tr-"* ) + short="tr" lang="Turkish" desc="$lang" culture="tr-TR" ;; "ua" | "ua-"* | "uk" | "uk-"* ) + short="uk" lang="Ukrainian" desc="$lang" culture="uk-UA" ;; "hk" | "zh-hk" | "cn-hk" ) + short="hk" lang="Chinese (Traditional)" desc="Chinese HK" culture="zh-TW" ;; "tw" | "zh-tw" | "cn-tw" ) + short="tw" lang="Chinese (Traditional)" desc="Chinese TW" culture="zh-TW" ;; "zh" | "zh-"* | "cn" | "cn-"* ) + short="cn" lang="Chinese (Simplified)" desc="Chinese" culture="zh-CN" ;; @@ -296,6 +336,7 @@ getLanguage() { case "${ret,,}" in "desc" ) echo "$desc" ;; "name" ) echo "$lang" ;; + "code" ) echo "$short" ;; "culture" ) echo "$culture" ;; *) echo "$desc";; esac @@ -949,900 +990,6 @@ getLink2() { getLink3() { - # Fallbacks for users who cannot connect to the Microsoft servers - - local id="$1" - local lang="$2" - local ret="$3" - local url="" - local sum="" - local size="" - local host="https://drive.massgrave.dev" - local w19="windows_server_2019_x64_dvd" - local w25="windows_server_2025_x64_dvd" - local w16="windows_server_2016_vl_x64_dvd" - local w12="windows_server_2012_r2_vl_with_update_x64_dvd" - local w08="windows_server_2008_r2_with_sp1_vl_build_x64_dvd" - local w81="windows_8.1_enterprise_with_update_x64_dvd" - local l11="windows_11_enterprise_ltsc_2024_x64_dvd" - local l10="windows_10_enterprise_ltsc_2021_x64_dvd" - local c11="windows_11_consumer_editions_version_24h2_x64_dvd" - local b11="windows_11_business_editions_version_24h2_x64_dvd" - local w22="windows_server_2022_updated_oct_2024_x64_dvd_d1a47ecc" - local b10="windows_10_business_editions_version_22h2_updated_oct_2024_x64_dvd" - local c10="windows_10_consumer_editions_version_22h2_updated_oct_2024_x64_dvd_d0cfb2e9" - - culture=$(getLanguage "$lang" "culture") - - case "${id,,}" in - "win11x64" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_${c11}_3c9a7ef3.iso" ;; - "bg" | "bg-"* ) url="bg-bg_${c11}_f8623745.iso" ;; - "cs" | "cs-"* ) url="cs-cz_${c11}_ae72ca80.iso" ;; - "da" | "da-"* ) url="da-dk_${c11}_4f25c452.iso" ;; - "de" | "de-"* ) url="de-de_${c11}_bc4adebe.iso" ;; - "el" | "el-"* ) url="el-gr_${c11}_9e6ef9a0.iso" ;; - "gb" | "en-gb" ) url="en-gb_${c11}_4b3a8183.iso" ;; - "en" | "en-"* ) - size=5819484160 - sum="b56b911bf18a2ceaeb3904d87e7c770bdf92d3099599d61ac2497b91bf190b11" - url="en-us_${c11}_1d5fcad3.iso" ;; - "mx" | "es-mx" ) url="es-es_${c11}_3bc0e5c3.iso" ;; - "es" | "es-"* ) url="es-mx_${c11}_a28d9dab.iso" ;; - "et" | "et-"* ) url="et-ee_${c11}_48306c65.iso" ;; - "fi" | "fi-"* ) url="fi-fi_${c11}_21618747.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_${c11}_42755257.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${c11}_033875c5.iso" ;; - "he" | "he-"* ) url="he-il_${c11}_533bc3ac.iso" ;; - "hr" | "hr-"* ) url="hr-hr_${c11}_40c769ed.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${c11}_7d2259d6.iso" ;; - "it" | "it-"* ) url="it-it_${c11}_33e81ff0.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${c11}_fc6538fd.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${c11}_f09a396b.iso" ;; - "lt" | "lt-"* ) url="lt-lt_${c11}_22d54265.iso" ;; - "lv" | "lv-"* ) url="lv-lv_${c11}_5ff65441.iso" ;; - "nb" | "nb-"* ) url="nb-no_${c11}_5a5d625b.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${c11}_7959020a.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${c11}_c0dcd21b.iso" ;; - "br" | "pt-br" ) url="pt-br_${c11}_751fe150.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${c11}_e0df188a.iso" ;; - "ro" | "ro-"* ) url="ro-ro_${c11}_0821b265.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${c11}_784471d8.iso" ;; - "sk" | "sk-"* ) url="sk-sk_${c11}_fd13020e.iso" ;; - "sl" | "sl-"* ) url="sl-si_${c11}_9aa9f408.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_${c11}_febab1a9.iso" ;; - "sv" | "sv-"* ) url="sv-se_${c11}_fe34647f.iso" ;; - "th" | "th-"* ) url="th-th_${c11}_fc3e523e.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${c11}_443fefaf.iso" ;; - "uk" | "uk-"* ) url="uk-ua_${c11}_32966915.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${c11}_d0825b63.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${c11}_bfc0d79b.iso" ;; - esac - ;; - "win11x64-enterprise" | "win11x64-enterprise-eval" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_${b11}_47dae48e.iso" ;; - "bg" | "bg-"* ) url="bg-bg_${b11}_4231caca.iso" ;; - "cs" | "cs-"* ) url="cs-cz_${b11}_ca1661fd.iso" ;; - "da" | "da-"* ) url="da-dk_${b11}_ac0db9fc.iso" ;; - "de" | "de-"* ) url="de-de_${b11}_87a70226.iso" ;; - "el" | "el-"* ) url="el-gr_${b11}_946ba34d.iso" ;; - "gb" | "en-gb" ) url="en-gb_${b11}_27d8c2f1.iso" ;; - "en" | "en-"* ) - size=5722114048 - sum="d0dca325314322518ae967d58c3061bcae57ee9743a8a1cf374aad8637e5e8ac" - url="en-us_${b11}_59a1851e.iso" ;; - "mx" | "es-mx" ) url="es-es_${b11}_86632f8d.iso" ;; - "es" | "es-"* ) url="es-mx_${b11}_6ee25ce4.iso" ;; - "et" | "et-"* ) url="et-ee_${b11}_c26c1e3a.iso" ;; - "fi" | "fi-"* ) url="fi-fi_${b11}_59dd0bb5.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_${b11}_a02f0c99.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${b11}_c0a4510e.iso" ;; - "he" | "he-"* ) url="he-il_${b11}_c844d280.iso" ;; - "hr" | "hr-"* ) url="hr-hr_${b11}_6e4839cc.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${b11}_aed71101.iso" ;; - "it" | "it-"* ) url="it-it_${b11}_5552c3a1.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${b11}_7fdb7541.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${b11}_646bb9fc.iso" ;; - "lt" | "lt-"* ) url="lt-lt_${b11}_54d6d7e2.iso" ;; - "lv" | "lv-"* ) url="lv-lv_${b11}_acee0541.iso" ;; - "nb" | "nb-"* ) url="nb-no_${b11}_78f22960.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${b11}_0719b251.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${b11}_1a183794.iso" ;; - "br" | "pt-br" ) url="pt-br_${b11}_ecc90645.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${b11}_e7bf77a1.iso" ;; - "ro" | "ro-"* ) url="ro-ro_${b11}_9adc8d7b.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${b11}_f9b9b5d6.iso" ;; - "sk" | "sk-"* ) url="sk-sk_${b11}_1a91433b.iso" ;; - "sl" | "sl-"* ) url="sl-si_${b11}_0b79bd14.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_${b11}_8a4b35b5.iso" ;; - "sv" | "sv-"* ) url="sv-se_${b11}_55ad9818.iso" ;; - "th" | "th-"* ) url="th-th_${b11}_a2a350c3.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${b11}_f35a9f1b.iso" ;; - "uk" | "uk-"* ) url="uk-ua_${b11}_38ff1d1d.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${b11}_a9b30de5.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${b11}_5f9e5858.iso" ;; - esac - ;; - "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_${l11}_8012f159.iso" ;; - "bg" | "bg-"* ) url="bg-bg_${l11}_2778f4e8.iso" ;; - "cs" | "cs-"* ) url="cs-cz_${l11}_d4ef05f2.iso" ;; - "da" | "da-"* ) url="da-dk_${l11}_c231c267.iso" ;; - "de" | "de-"* ) url="de-de_${l11}_4f136f69.iso" ;; - "el" | "el-"* ) url="el-gr_${l11}_54eaabb2.iso" ;; - "gb" | "en-gb" ) url="en-gb_${l11}_e2137661.iso" ;; - "en" | "en-"* ) - size=5125844992 - sum="157d8365a517c40afeb3106fdd74d0836e1025debbc343f2080e1a8687607f51" - url="en-us_${l11}_965cfb00.iso" ;; - "mx" | "es-mx" ) url="es-mx_${l11}_3310c094.iso" ;; - "es" | "es-"* ) url="es-es_${l11}_77392d61.iso" ;; - "et" | "et-"* ) url="et-ee_${l11}_2dbd4bfe.iso" ;; - "fi" | "fi-"* ) url="fi-fi_${l11}_998f5df6.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_${l11}_78732953.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${l11}_d66e386e.iso" ;; - "he" | "he-"* ) url="he-il_${l11}_fae050ec.iso" ;; - "hr" | "hr-"* ) url="hr-hr_${l11}_e3594411.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${l11}_8fea6034.iso" ;; - "it" | "it-"* ) url="it-it_${l11}_1e8cabb6.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${l11}_e59ad418.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${l11}_b6b6eb18.iso" ;; - "lt" | "lt-"* ) url="lt-lt_${l11}_145479e9.iso" ;; - "lv" | "lv-"* ) url="lv-lv_${l11}_e0ebc53d.iso" ;; - "nb" | "nb-"* ) url="nb-no_${l11}_d41eeb48.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${l11}_e3063aab.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${l11}_e00807a1.iso" ;; - "br" | "pt-br" ) url="pt-br_${l11}_2bb6b75b.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${l11}_2f34bd6b.iso" ;; - "ro" | "ro-"* ) url="ro-ro_${l11}_2eadb4df.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${l11}_f9af5773.iso" ;; - "sk" | "sk-"* ) url="sk-sk_${l11}_03b916e7.iso" ;; - "sl" | "sl-"* ) url="sl-si_${l11}_310b3a76.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_${l11}_3dfa5da5.iso" ;; - "sv" | "sv-"* ) url="sv-se_${l11}_191cf991.iso" ;; - "th" | "th-"* ) url="th-th_${l11}_47ce2c8a.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${l11}_27bdab81.iso" ;; - "uk" | "uk-"* ) url="uk-ua_${l11}_b3f00872.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${l11}_6287d84d.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${l11}_cff9cd2d.iso" ;; - esac - ;; - "win11x64-iot" | "win11x64-enterprise-iot-eval" ) - [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 - size=5144817664 - sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" - url="en-us_windows_11_iot_enterprise_ltsc_2024_x64_dvd_f6b14814.iso" - ;; - "win10x64" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_${c10}.iso" ;; - "bg" | "bg-"* ) url="bg-bg_${c10}.iso" ;; - "cs" | "cs-"* ) url="cs-cz_${c10}.iso" ;; - "da" | "da-"* ) url="da-dk_${c10}.iso" ;; - "de" | "de-"* ) url="de-de_${c10}.iso" ;; - "el" | "el-"* ) url="el-gr_${c10}.iso" ;; - "gb" | "en-gb" ) url="en-gb_${c10}.iso" ;; - "en" | "en-"* ) - size=7176140800 - sum="dda45d271061937657689b30944c792be97405fd5ca2110094049dc01a9201ec" - url="en-us_${c10}.iso" ;; - "mx" | "es-mx" ) url="es-mx_${c10}.iso" ;; - "es" | "es-"* ) url="es-es_${c10}.iso" ;; - "et" | "et-"* ) url="et-ee_${c10}.iso" ;; - "fi" | "fi-"* ) url="fi-fi_${c10}.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_${c10}.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${c10}.iso" ;; - "he" | "he-"* ) url="he-il_${c10}.iso" ;; - "hr" | "hr-"* ) url="hr-hr_${c10}.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${c10}.iso" ;; - "it" | "it-"* ) url="it-it_${c10}.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${c10}.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${c10}.iso" ;; - "lt" | "lt-"* ) url="lt-lt_${c10}.iso" ;; - "lv" | "lv-"* ) url="lv-lv_${c10}.iso" ;; - "nb" | "nb-"* ) url="nb-no_${c10}.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${c10}.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${c10}.iso" ;; - "br" | "pt-br" ) url="pt-br_${c10}.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${c10}.iso" ;; - "ro" | "ro-"* ) url="ro-ro_${c10}.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${c10}.iso" ;; - "sk" | "sk-"* ) url="sk-sk_${c10}.iso" ;; - "sl" | "sl-"* ) url="sl-si_${c10}.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_${c10}.iso" ;; - "sv" | "sv-"* ) url="sv-se_${c10}.iso" ;; - "th" | "th-"* ) url="th-th_${c10}.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${c10}.iso" ;; - "uk" | "uk-"* ) url="uk-ua_${c10}.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${c10}.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${c10}.iso" ;; - esac - ;; - "win10x64-enterprise" | "win10x64-enterprise-eval" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_${b10}_72d26609.iso" ;; - "bg" | "bg-"* ) url="bg-bg_${b10}_916cba75.iso" ;; - "cs" | "cs-"* ) url="cs-cz_${b10}_737b3dce.iso" ;; - "da" | "da-"* ) url="da-dk_${b10}_beb2874a.iso" ;; - "de" | "de-"* ) url="de-de_${b10}_e5656293.iso" ;; - "el" | "el-"* ) url="el-gr_${b10}_3dcced88.iso" ;; - "gb" | "en-gb" ) url="en-gb_${b10}_4b87ccc8.iso" ;; - "en" | "en-"* ) - size=6985318400 - sum="cd224fff371bbce4ab2120a3ace8ed30dc5c48c87f766ff699eed3327d0db83e" - url="en-us_${b10}_66a185c7.iso" ;; - "mx" | "es-mx" ) url="es-mx_${b10}_c71c3a9b.iso" ;; - "es" | "es-"* ) url="es-es_${b10}_6a893bdb.iso" ;; - "et" | "et-"* ) url="et-ee_${b10}_e73ca294.iso" ;; - "fi" | "fi-"* ) url="fi-fi_${b10}_b4138a1f.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_${b10}_fa1fcfd1.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${b10}_2582115c.iso" ;; - "he" | "he-"* ) url="he-il_${b10}_070da6e1.iso" ;; - "hr" | "hr-"* ) url="hr-hr_${b10}_7ab0b83d.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${b10}_9ae1341c.iso" ;; - "it" | "it-"* ) url="it-it_${b10}_ed9771c1.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${b10}_41fb6974.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${b10}_8ee84458.iso" ;; - "lt" | "lt-"* ) url="lt-lt_${b10}_dde00c8b.iso" ;; - "lv" | "lv-"* ) url="lv-lv_${b10}_3c6ec670.iso" ;; - "nb" | "nb-"* ) url="nb-no_${b10}_5c0830a7.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${b10}_98c1911c.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${b10}_21470c6f.iso" ;; - "br" | "pt-br" ) url="pt-br_${b10}_a8287ba4.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${b10}_927e183d.iso" ;; - "ro" | "ro-"* ) url="ro-ro_${b10}_05768a51.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${b10}_e0d31c6c.iso" ;; - "sk" | "sk-"* ) url="sk-sk_${b10}_a09d6210.iso" ;; - "sl" | "sl-"* ) url="sl-si_${b10}_b6e9be37.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_${b10}_d3114222.iso" ;; - "sv" | "sv-"* ) url="sv-se_${b10}_4fbbd5fa.iso" ;; - "th" | "th-"* ) url="th-th_${b10}_c820f914.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${b10}_62d51ca5.iso" ;; - "uk" | "uk-"* ) url="uk-ua_${b10}_3d50cf88.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${b10}_2fab2287.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${b10}_52bd0537.iso" ;; - esac - ;; - "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar-sa_${l10}_60bc2a7a.iso" ;; - "bg" | "bg-"* ) url="bg-bg_${l10}_b0887275.iso" ;; - "cs" | "cs-"* ) url="cs-cz_${l10}_d624c653.iso" ;; - "da" | "da-"* ) url="da-dk_${l10}_6ec511bb.iso" ;; - "de" | "de-"* ) url="de-de_${l10}_71796d33.iso" ;; - "el" | "el-"* ) url="el-gr_${l10}_c83eab34.iso" ;; - "gb" | "en-gb" ) url="en-gb_${l10}_7fe51fe8.iso" ;; - "en" | "en-"* ) - size=4899461120 - sum="c90a6df8997bf49e56b9673982f3e80745058723a707aef8f22998ae6479597d" - url="en-us_${l10}_d289cf96.iso" ;; - "mx" | "es-mx" ) url="es-mx_${l10}_f6aaf384.iso" ;; - "es" | "es-"* ) url="es-es_${l10}_51d721ea.iso" ;; - "et" | "et-"* ) url="et-ee_${l10}_012a5c50.iso" ;; - "fi" | "fi-"* ) url="fi-fi_${l10}_551582d9.iso" ;; - "ca" | "fr-ca" ) url="fr-ca_${l10}_2770e649.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${l10}_bda01eb0.iso" ;; - "he" | "he-"* ) url="he-il_${l10}_3a55ecd6.iso" ;; - "hr" | "hr-"* ) url="hr-hr_${l10}_f5085b75.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${l10}_d541ddb3.iso" ;; - "it" | "it-"* ) url="it-it_${l10}_0c1aa034.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${l10}_ef58c6a1.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${l10}_6d26f398.iso" ;; - "lt" | "lt-"* ) url="lt-lt_${l10}_9ffbbd5b.iso" ;; - "lv" | "lv-"* ) url="lv-lv_${l10}_6c89d2e0.iso" ;; - "nb" | "nb-"* ) url="nb-no_${l10}_c65c51a5.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${l10}_88f53466.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${l10}_eff40776.iso" ;; - "br" | "pt-br" ) url="pt-br_${l10}_f318268e.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${l10}_f2e9b6a0.iso" ;; - "ro" | "ro-"* ) url="ro-ro_${l10}_ae2284d6.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${l10}_5044a1e7.iso" ;; - "sk" | "sk-"* ) url="sk-sk_${l10}_d6c64c5f.iso" ;; - "sl" | "sl-"* ) url="sl-si_${l10}_ec090386.iso" ;; - "sr" | "sr-"* ) url="sr-latn-rs_${l10}_2d2f8815.iso" ;; - "sv" | "sv-"* ) url="sv-se_${l10}_9a28bb6b.iso" ;; - "th" | "th-"* ) url="th-th_${l10}_b7ed34d6.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${l10}_e55b1896.iso" ;; - "uk" | "uk-"* ) url="uk-ua_${l10}_816da3c3.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${l10}_80dba877.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${l10}_033b7312.iso" ;; - esac - ;; - "win10x64-iot" | "win10x64-enterprise-iot-eval" ) - [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 - size=4851668992 - sum="a0334f31ea7a3e6932b9ad7206608248f0bd40698bfb8fc65f14fc5e4976c160" - url="en-us_windows_10_iot_enterprise_ltsc_2021_x64_dvd_257ad90f.iso" - ;; - "win81x64-enterprise" | "win81x64-enterprise-eval" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar_${w81}_6050360.iso" ;; - "bg" | "bg-"* ) url="bg_${w81}_6050367.iso" ;; - "cs" | "cs-"* ) url="cs_${w81}_6050393.iso" ;; - "da" | "da-"* ) url="da_${w81}_6050394.iso" ;; - "de" | "de-"* ) url="de_${w81}_6050501.iso" ;; - "el" | "el-"* ) url="el_${w81}_6050503.iso" ;; - "gb" | "en-gb" ) url="en-gb_${w81}_6054383.iso" ;; - "en" | "en-"* ) - size=4139163648 - sum="c3c604c03677504e8905090a8ce5bb1dde76b6fd58e10f32e3a25bef21b2abe1" - url="en_${w81}_6054382.iso" ;; - "es" | "es-"* ) url="es_${w81}_6050578.iso" ;; - "et" | "et-"* ) url="et_${w81}_6054384.iso" ;; - "fi" | "fi-"* ) url="fi_${w81}_6050497.iso" ;; - "fr" | "fr-"* ) url="fr_${w81}_6050499.iso" ;; - "he" | "he-"* ) url="he_${w81}_6050504.iso" ;; - "hr" | "hr-"* ) url="hr_${w81}_6050391.iso" ;; - "hu" | "hu-"* ) url="hu_${w81}_6050505.iso" ;; - "it" | "it-"* ) url="it_${w81}_6050507.iso" ;; - "ja" | "ja-"* ) url="ja_${w81}_6050508.iso" ;; - "ko" | "ko-"* ) url="ko_${w81}_6050509.iso" ;; - "lt" | "lt-"* ) url="lt_${w81}_6050511.iso" ;; - "lv" | "lv-"* ) url="lv_${w81}_6050510.iso" ;; - "nb" | "nb-"* ) url="nb_${w81}_6050512.iso" ;; - "nl" | "nl-"* ) url="nl_${w81}_6054381.iso" ;; - "pl" | "pl-"* ) url="pl_${w81}_6050515.iso" ;; - "br" | "pt-br" ) url="pt_${w81}_6050521.iso" ;; - "pt" | "pt-"* ) url="pp_${w81}_6050526.iso" ;; - "ro" | "ro-"* ) url="ro_${w81}_6050534.iso" ;; - "ru" | "ru-"* ) url="ru_${w81}_6050542.iso" ;; - "sk" | "sk-"* ) url="sk_${w81}_6050562.iso" ;; - "sl" | "sl-"* ) url="sl_${w81}_6050570.iso" ;; - "sr" | "sr-"* ) url="sr-latn_${w81}_6050553.iso" ;; - "sv" | "sv-"* ) url="sv_${w81}_6050590.iso" ;; - "th" | "th-"* ) url="th_${w81}_6050602.iso" ;; - "tr" | "tr-"* ) url="tr_${w81}_6050609.iso" ;; - "uk" | "uk-"* ) url="uk_${w81}_6050618.iso" ;; - "zh-hk" ) url="hk_${w81}_6050380.iso" ;; - "zh-tw" ) url="tw_${w81}_6050387.iso" ;; - "zh" | "zh-"* ) url="cn_${w81}_6050374.iso" ;; - esac - ;; - "win2025" | "win2025-eval" ) - case "${culture,,}" in - "cs" | "cs-"* ) url="cs-cz_${w25}_4f54e1b0.iso" ;; - "de" | "de-"* ) url="de-de_${w25}_5282a882.iso" ;; - "en" | "en-"* ) - size=6013794304 - sum="854109e1f215a29fc3541188297a6ca97c8a8f0f8c4dd6236b78dfdf845bf75e" - url="en-us_${w25}_b7ec10f3.iso" ;; - "es" | "es-"* ) url="es-es_${w25}_c15f0ce2.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${w25}_bd6be507.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${w25}_e13eb8bf.iso" ;; - "it" | "it-"* ) url="it-it_${w25}_98437899.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${w25}_7a2e979b.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${w25}_85109737.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${w25}_5c3218f3.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${w25}_aa368cf8.iso" ;; - "br" | "pt-br" ) url="pt-br_${w25}_66107129.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${w25}_62bb3c31.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${w25}_2dfe1679.iso" ;; - "sv" | "sv-"* ) url="sv-se_${w25}_512bf117.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${w25}_a03fe256.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${w25}_6d2c01e3.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${w25}_1d93dd12.iso" ;; - esac - ;; - "win2022" | "win2022-eval" ) - case "${culture,,}" in - "cs" | "cs-"* ) url="cs-cz_${w22}.iso" ;; - "de" | "de-"* ) url="de-de_${w22}.iso" ;; - "en" | "en-"* ) - size=5973856256 - sum="61fa400b6e8f54e644529d024b18a578547147cdf815ea66c4b7961798717291" - url="en-us_${w22}.iso" ;; - "es" | "es-"* ) url="es-es_${w22}.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${w22}.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${w22}.iso" ;; - "it" | "it-"* ) url="it-it_${w22}.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${w22}.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${w22}.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${w22}.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${w22}.iso" ;; - "br" | "pt-br" ) url="pt-br_${w22}.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${w22}.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${w22}.iso" ;; - "sv" | "sv-"* ) url="sv-se_${w22}.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${w22}.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${w22}.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${w22}.iso" ;; - esac - ;; - "win2019" | "win2019-eval" ) - case "${culture,,}" in - "cs" | "cs-"* ) url="cs-cz_${w19}_3781c31c.iso" ;; - "de" | "de-"* ) url="de-de_${w19}_132f7aa4.iso" ;; - "en" | "en-"* ) - size=5651695616 - sum="ea247e5cf4df3e5829bfaaf45d899933a2a67b1c700a02ee8141287a8520261c" - url="en-us_${w19}_f9475476.iso" ;; - "es" | "es-"* ) url="es-es_${w19}_3ce0fd9e.iso" ;; - "fr" | "fr-"* ) url="fr-fr_${w19}_f6f6acf6.iso" ;; - "hu" | "hu-"* ) url="hu-hu_${w19}_1d834c46.iso" ;; - "it" | "it-"* ) url="it-it_${w19}_454267de.iso" ;; - "ja" | "ja-"* ) url="ja-jp_${w19}_3899c3a3.iso" ;; - "ko" | "ko-"* ) url="ko-kr_${w19}_84101c0a.iso" ;; - "nl" | "nl-"* ) url="nl-nl_${w19}_f69d914e.iso" ;; - "pl" | "pl-"* ) url="pl-pl_${w19}_a50263e1.iso" ;; - "br" | "pt-br" ) url="pt-br_${w19}_aee8c1c2.iso" ;; - "pt" | "pt-"* ) url="pt-pt_${w19}_464373e8.iso" ;; - "ru" | "ru-"* ) url="ru-ru_${w19}_e02b76ba.iso" ;; - "sv" | "sv-"* ) url="sv-se_${w19}_48c1aeff.iso" ;; - "tr" | "tr-"* ) url="tr-tr_${w19}_b51af600.iso" ;; - "zh-hk" | "zh-tw" ) url="zh-tw_${w19}_a4c80409.iso" ;; - "zh" | "zh-"* ) url="zh-cn_${w19}_19d65722.iso" ;; - esac - ;; - "win2016" | "win2016-eval" ) - case "${culture,,}" in - "cs" | "cs-"* ) url="cs_${w16}_11636699.iso" ;; - "de" | "de-"* ) url="de_${w16}_11636696.iso" ;; - "en" | "en-"* ) - size=6003804160 - sum="47919ce8b4993f531ca1fa3f85941f4a72b47ebaa4d3a321fecf83ca9d17e6b8" - url="en_${w16}_11636701.iso" ;; - "es" | "es-"* ) url="es_${w16}_11636712.iso" ;; - "fr" | "fr-"* ) url="fr_${w16}_11636729.iso" ;; - "hu" | "hu-"* ) url="hu_${w16}_11636720.iso" ;; - "it" | "it-"* ) url="it_${w16}_11636710.iso" ;; - "ja" | "ja-"* ) url="ja_${w16}_11645964.iso" ;; - "ko" | "ko-"* ) url="ko_${w16}_11636709.iso" ;; - "nl" | "nl-"* ) url="nl_${w16}_11636731.iso" ;; - "pl" | "pl-"* ) url="pl_${w16}_11636719.iso" ;; - "br" | "pt-br" ) url="pt_${w16}_11636697.iso" ;; - "pt" | "pt-"* ) url="pp_${w16}_11637454.iso" ;; - "ru" | "ru-"* ) url="ru_${w16}_11636694.iso" ;; - "sv" | "sv-"* ) url="sv_${w16}_11636706.iso" ;; - "tr" | "tr-"* ) url="tr_${w16}_11636725.iso" ;; - "zh-hk" | "zh-tw" ) url="ct_${w16}_11636717.iso" ;; - "zh" | "zh-"* ) url="cn_${w16}_11636695.iso" ;; - esac - ;; - "win2012r2" | "win2012r2-eval" ) - case "${culture,,}" in - "cs" | "cs-"* ) url="cs_${w12}_6052752.iso" ;; - "de" | "de-"* ) url="de_${w12}_6052780.iso" ;; - "en" | "en-"* ) - size=5400115200 - sum="0e883ce28eb5c6f58a3a3007be978d43edb1035a4585506c1c4504c9e143408d" - url="en_${w12}_6052766.iso" ;; - "es" | "es-"* ) url="es_${w12}_6052831.iso" ;; - "fr" | "fr-"* ) url="fr_${w12}_6052772.iso" ;; - "hu" | "hu-"* ) url="hu_${w12}_6052786.iso" ;; - "it" | "it-"* ) url="it_${w12}_6052792.iso" ;; - "ja" | "ja-"* ) url="ja_${w12}_6052800.iso" ;; - "ko" | "ko-"* ) url="ko_${w12}_6052806.iso" ;; - "nl" | "nl-"* ) url="nl_${w12}_6052760.iso" ;; - "pl" | "pl-"* ) url="pl_${w12}_6052815.iso" ;; - "br" | "pt-br" ) url="pt_${w12}_6052819.iso" ;; - "pt" | "pt-"* ) url="pp_${w12}_6052823.iso" ;; - "ru" | "ru-"* ) url="ru_${w12}_6052827.iso" ;; - "sv" | "sv-"* ) url="sv_${w12}_6052835.iso" ;; - "tr" | "tr-"* ) url="tr_${w12}_6052838.iso" ;; - "zh-hk" ) url="hk_${w12}_6052739.iso" ;; - "zh-tw" ) url="tw_${w12}_6052746.iso" ;; - "zh" | "zh-"* ) url="cn_${w12}_6052729.iso" ;; - esac - ;; - "win2008r2" | "win2008r2-eval" ) - case "${culture,,}" in - "cs" | "cs-"* ) url="cs_${w08}_617402.iso" ;; - "de" | "de-"* ) url="de_${w08}_617404.iso" ;; - "en" | "en-"* ) - size=3166720000 - sum="9b0cd5b11cc2e92badb74450f0cac03006d3c63a2ada36cb1eb95c1bf4b2608f" - url="en_${w08}_617403.iso" ;; - "es" | "es-"* ) url="es_${w08}_617410.iso" ;; - "fr" | "fr-"* ) url="fr_${w08}_617392.iso" ;; - "hu" | "hu-"* ) url="hu_${w08}_617415.iso" ;; - "it" | "it-"* ) url="it_${w08}_619596.iso" ;; - "ja" | "ja-"* ) url="ja_${w08}_631466.iso" ;; - "ko" | "ko-"* ) url="ko_${w08}_617409.iso" ;; - "nl" | "nl-"* ) url="nl_${w08}_617395.iso" ;; - "pl" | "pl-"* ) url="pl_${w08}_617397.iso" ;; - "br" | "pt-br" ) url="pt_${w08}_617394.iso" ;; - "pt" | "pt-"* ) url="pp_${w08}_617411.iso" ;; - "ru" | "ru-"* ) url="ru_${w08}_617421.iso" ;; - "sv" | "sv-"* ) url="sv_${w08}_617400.iso" ;; - "tr" | "tr-"* ) url="tr_${w08}_617416.iso" ;; - "zh-hk" ) url="hk_${w08}_617386.iso" ;; - "zh-tw" ) url="tw_${w08}_617405.iso" ;; - "zh" | "zh-"* ) url="cn_${w08}_617396.iso" ;; - esac - ;; - "win7x64" | "win7x64-enterprise" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar_windows_7_enterprise_with_sp1_x64_dvd_u_677643.iso" ;; - "bg" | "bg-"* ) url="bg_windows_7_enterprise_with_sp1_x64_dvd_u_677644.iso" ;; - "cs" | "cs-"* ) url="cs_windows_7_enterprise_with_sp1_x64_dvd_u_677646.iso" ;; - "da" | "da-"* ) url="da_windows_7_enterprise_with_sp1_x64_dvd_u_677648.iso" ;; - "de" | "de-"* ) url="de_windows_7_enterprise_with_sp1_x64_dvd_u_677649.iso" ;; - "el" | "el-"* ) url="el_windows_7_enterprise_with_sp1_x64_dvd_u_677650.iso" ;; - "en" | "en-"* ) - size=3182604288 - sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" - url="en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" ;; - "es" | "es-"* ) url="es_windows_7_enterprise_with_sp1_x64_dvd_u_677652.iso" ;; - "et" | "et-"* ) url="et_windows_7_enterprise_with_sp1_x64_dvd_u_677653.iso" ;; - "fi" | "fi-"* ) url="fi_windows_7_enterprise_with_sp1_x64_dvd_u_677655.iso" ;; - "fr" | "fr-"* ) url="fr_windows_7_enterprise_with_sp1_x64_dvd_u_677656.iso" ;; - "he" | "he-"* ) url="he_windows_7_enterprise_with_sp1_x64_dvd_u_677657.iso" ;; - "hr" | "hr-"* ) url="hr_windows_7_enterprise_with_sp1_x64_dvd_u_677658.iso" ;; - "hu" | "hu-"* ) url="hu_windows_7_enterprise_with_sp1_x64_dvd_u_677659.iso" ;; - "it" | "it-"* ) url="it_windows_7_enterprise_with_sp1_x64_dvd_u_677660.iso" ;; - "ja" | "ja-"* ) url="ja_windows_7_enterprise_with_sp1_x64_dvd_u_677662.iso" ;; - "ko" | "ko-"* ) url="ko_windows_7_enterprise_k_with_sp1_x64_dvd_u_677728.iso" ;; - "lt" | "lt-"* ) url="lt_windows_7_enterprise_with_sp1_x64_dvd_u_677663.iso" ;; - "lv" | "lv-"* ) url="lv_windows_7_enterprise_with_sp1_x64_dvd_u_677664.iso" ;; - "nb" | "nb-"* ) url="no_windows_7_enterprise_with_sp1_x64_dvd_u_677665.iso" ;; - "nl" | "nl-"* ) url="nl_windows_7_enterprise_with_sp1_x64_dvd_u_677666.iso" ;; - "pl" | "pl-"* ) url="pl_windows_7_enterprise_with_sp1_x64_dvd_u_677667.iso" ;; - "br" | "pt-br" ) url="pt_windows_7_enterprise_with_sp1_x64_dvd_u_677668.iso" ;; - "pt" | "pt-"* ) url="pp_windows_7_enterprise_with_sp1_x64_dvd_u_677669.iso" ;; - "ro" | "ro-"* ) url="ro_windows_7_enterprise_with_sp1_x64_dvd_u_677670.iso" ;; - "ru" | "ru-"* ) url="ru_windows_7_enterprise_with_sp1_x64_dvd_u_677671.iso" ;; - "sk" | "sk-"* ) url="sk_windows_7_enterprise_with_sp1_x64_dvd_u_677673.iso" ;; - "sl" | "sl-"* ) url="sl_windows_7_enterprise_with_sp1_x64_dvd_u_677674.iso" ;; - "sr" | "sr-"* ) url="sr_windows_7_enterprise_with_sp1_x64_dvd_u_677675.iso" ;; - "sv" | "sv-"* ) url="sv_windows_7_enterprise_with_sp1_x64_dvd_u_677676.iso" ;; - "th" | "th-"* ) url="th_windows_7_enterprise_with_sp1_x64_dvd_u_677678.iso" ;; - "tr" | "tr-"* ) url="tr_windows_7_enterprise_with_sp1_x64_dvd_u_677681.iso" ;; - "uk" | "uk-"* ) url="uk_windows_7_enterprise_with_sp1_x64_dvd_u_677683.iso" ;; - "zh-hk" ) url="hk_windows_7_enterprise_with_sp1_x64_dvd_u_677687.iso" ;; - "zh-tw" ) url="tw_windows_7_enterprise_with_sp1_x64_dvd_u_677689.iso" ;; - "zh" | "zh-"* ) url="cn_windows_7_enterprise_with_sp1_x64_dvd_u_677685.iso" ;; - esac - ;; - "win7x64-ultimate" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar_windows_7_ultimate_with_sp1_x64_dvd_u_677345.iso" ;; - "bg" | "bg-"* ) url="bg_windows_7_ultimate_with_sp1_x64_dvd_u_677363.iso" ;; - "cs" | "cs-"* ) url="cs_windows_7_ultimate_with_sp1_x64_dvd_u_677376.iso" ;; - "da" | "da-"* ) url="da_windows_7_ultimate_with_sp1_x64_dvd_u_677294.iso" ;; - "de" | "de-"* ) url="de_windows_7_ultimate_with_sp1_x64_dvd_u_677306.iso" ;; - "el" | "el-"* ) url="el_windows_7_ultimate_with_sp1_x64_dvd_u_677318.iso" ;; - "en" | "en-"* ) - size=3320903680 - sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808" - url="en_windows_7_ultimate_with_sp1_x64_dvd_u_677332.iso" ;; - "es" | "es-"* ) url="es_windows_7_ultimate_with_sp1_x64_dvd_u_677350.iso" ;; - "et" | "et-"* ) url="et_windows_7_ultimate_with_sp1_x64_dvd_u_677368.iso" ;; - "fi" | "fi-"* ) url="fi_windows_7_ultimate_with_sp1_x64_dvd_u_677378.iso" ;; - "fr" | "fr-"* ) url="fr_windows_7_ultimate_with_sp1_x64_dvd_u_677299.iso" ;; - "he" | "he-"* ) url="he_windows_7_ultimate_with_sp1_x64_dvd_u_677312.iso" ;; - "hr" | "hr-"* ) url="hr_windows_7_ultimate_with_sp1_x64_dvd_u_677324.iso" ;; - "hu" | "hu-"* ) url="hu_windows_7_ultimate_with_sp1_x64_dvd_u_677338.iso" ;; - "it" | "it-"* ) url="it_windows_7_ultimate_with_sp1_x64_dvd_u_677356.iso" ;; - "ja" | "ja-"* ) url="ja_windows_7_ultimate_with_sp1_x64_dvd_u_677372.iso" ;; - "ko" | "ko-"* ) url="ko_windows_7_ultimate_k_with_sp1_x64_dvd_u_677502.iso" ;; - "lt" | "lt-"* ) url="lt_windows_7_ultimate_with_sp1_x64_dvd_u_677379.iso" ;; - "lv" | "lv-"* ) url="lv_windows_7_ultimate_with_sp1_x64_dvd_u_677302.iso" ;; - "nb" | "nb-"* ) url="no_windows_7_ultimate_with_sp1_x64_dvd_u_677314.iso" ;; - "nl" | "nl-"* ) url="nl_windows_7_ultimate_with_sp1_x64_dvd_u_677325.iso" ;; - "pl" | "pl-"* ) url="pl_windows_7_ultimate_with_sp1_x64_dvd_u_677341.iso" ;; - "br" | "pt-br" ) url="pt_windows_7_ultimate_with_sp1_x64_dvd_u_677358.iso" ;; - "pt" | "pt-"* ) url="pp_windows_7_ultimate_with_sp1_x64_dvd_u_677373.iso" ;; - "ro" | "ro-"* ) url="ro_windows_7_ultimate_with_sp1_x64_dvd_u_677380.iso" ;; - "ru" | "ru-"* ) url="ru_windows_7_ultimate_with_sp1_x64_dvd_u_677391.iso" ;; - "sk" | "sk-"* ) url="sk_windows_7_ultimate_with_sp1_x64_dvd_u_677393.iso" ;; - "sl" | "sl-"* ) url="sl_windows_7_ultimate_with_sp1_x64_dvd_u_677396.iso" ;; - "sr" | "sr-"* ) url="sr_windows_7_ultimate_with_sp1_x64_dvd_u_677398.iso" ;; - "sv" | "sv-"* ) url="sv_windows_7_ultimate_with_sp1_x64_dvd_u_677400.iso" ;; - "th" | "th-"* ) url="th_windows_7_ultimate_with_sp1_x64_dvd_u_677402.iso" ;; - "tr" | "tr-"* ) url="tr_windows_7_ultimate_with_sp1_x64_dvd_u_677404.iso" ;; - "uk" | "uk-"* ) url="uk_windows_7_ultimate_with_sp1_x64_dvd_u_677406.iso" ;; - "zh-hk" ) url="hk_windows_7_ultimate_with_sp1_x64_dvd_u_677411.iso" ;; - "zh-tw" ) url="tw_windows_7_ultimate_with_sp1_x64_dvd_u_677414.iso" ;; - "zh" | "zh-"* ) url="cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso" ;; - esac - ;; - "win7x86" | "win7x86-enterprise" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar_windows_7_enterprise_with_sp1_x86_dvd_u_677691.iso" ;; - "bg" | "bg-"* ) url="bg_windows_7_enterprise_with_sp1_x86_dvd_u_677693.iso" ;; - "cs" | "cs-"* ) url="cs_windows_7_enterprise_with_sp1_x86_dvd_u_677695.iso" ;; - "da" | "da-"* ) url="da_windows_7_enterprise_with_sp1_x86_dvd_u_677698.iso" ;; - "de" | "de-"* ) url="de_windows_7_enterprise_with_sp1_x86_dvd_u_677702.iso" ;; - "el" | "el-"* ) url="el_windows_7_enterprise_with_sp1_x86_dvd_u_677706.iso" ;; - "en" | "en-"* ) - size=2434502656 - sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad" - url="en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" ;; - "es" | "es-"* ) url="es_windows_7_enterprise_with_sp1_x86_dvd_u_677714.iso" ;; - "et" | "et-"* ) url="et_windows_7_enterprise_with_sp1_x86_dvd_u_677718.iso" ;; - "fi" | "fi-"* ) url="fi_windows_7_enterprise_with_sp1_x86_dvd_u_677722.iso" ;; - "fr" | "fr-"* ) url="fr_windows_7_enterprise_with_sp1_x86_dvd_u_677727.iso" ;; - "he" | "he-"* ) url="he_windows_7_enterprise_with_sp1_x86_dvd_u_677733.iso" ;; - "hr" | "hr-"* ) url="hr_windows_7_enterprise_with_sp1_x86_dvd_u_677739.iso" ;; - "hu" | "hu-"* ) url="hu_windows_7_enterprise_with_sp1_x86_dvd_u_677744.iso" ;; - "it" | "it-"* ) url="it_windows_7_enterprise_with_sp1_x86_dvd_u_677749.iso" ;; - "ja" | "ja-"* ) url="ja_windows_7_enterprise_with_sp1_x86_dvd_u_677757.iso" ;; - "ko" | "ko-"* ) url="ko_windows_7_enterprise_k_with_sp1_x86_dvd_u_677732.iso" ;; - "lt" | "lt-"* ) url="lt_windows_7_enterprise_with_sp1_x86_dvd_u_677764.iso" ;; - "lv" | "lv-"* ) url="lv_windows_7_enterprise_with_sp1_x86_dvd_u_677677.iso" ;; - "nb" | "nb-"* ) url="no_windows_7_enterprise_with_sp1_x86_dvd_u_677679.iso" ;; - "nl" | "nl-"* ) url="nl_windows_7_enterprise_with_sp1_x86_dvd_u_677682.iso" ;; - "pl" | "pl-"* ) url="pl_windows_7_enterprise_with_sp1_x86_dvd_u_677684.iso" ;; - "br" | "pt-br" ) url="pt_windows_7_enterprise_with_sp1_x86_dvd_u_677686.iso" ;; - "pt" | "pt-"* ) url="pp_windows_7_enterprise_with_sp1_x86_dvd_u_677688.iso" ;; - "ro" | "ro-"* ) url="ro_windows_7_enterprise_with_sp1_x86_dvd_u_677690.iso" ;; - "ru" | "ru-"* ) url="ru_windows_7_enterprise_with_sp1_x86_dvd_u_677692.iso" ;; - "sk" | "sk-"* ) url="sk_windows_7_enterprise_with_sp1_x86_dvd_u_677694.iso" ;; - "sl" | "sl-"* ) url="sl_windows_7_enterprise_with_sp1_x86_dvd_u_677696.iso" ;; - "sr" | "sr-"* ) url="sr_windows_7_enterprise_with_sp1_x86_dvd_u_677699.iso" ;; - "sv" | "sv-"* ) url="sv_windows_7_enterprise_with_sp1_x86_dvd_u_677701.iso" ;; - "th" | "th-"* ) url="th_windows_7_enterprise_with_sp1_x86_dvd_u_677705.iso" ;; - "tr" | "tr-"* ) url="tr_windows_7_enterprise_with_sp1_x86_dvd_u_677708.iso" ;; - "uk" | "uk-"* ) url="uk_windows_7_enterprise_with_sp1_x86_dvd_u_677712.iso" ;; - "zh-hk" ) url="hk_windows_7_enterprise_with_sp1_x86_dvd_u_677720.iso" ;; - "zh-tw" ) url="tw_windows_7_enterprise_with_sp1_x86_dvd_u_677723.iso" ;; - "zh" | "zh-"* ) url="cn_windows_7_enterprise_with_sp1_x86_dvd_u_677716.iso" ;; - esac - ;; - "win7x86-ultimate" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar_windows_7_ultimate_with_sp1_x86_dvd_u_677448.iso" ;; - "bg" | "bg-"* ) url="bg_windows_7_ultimate_with_sp1_x86_dvd_u_677450.iso" ;; - "cs" | "cs-"* ) url="cs_windows_7_ultimate_with_sp1_x86_dvd_u_677452.iso" ;; - "da" | "da-"* ) url="da_windows_7_ultimate_with_sp1_x86_dvd_u_677454.iso" ;; - "de" | "de-"* ) url="de_windows_7_ultimate_with_sp1_x86_dvd_u_677456.iso" ;; - "el" | "el-"* ) url="el_windows_7_ultimate_with_sp1_x86_dvd_u_677458.iso" ;; - "en" | "en-"* ) - size=2564476928 - sum="e2c009a66d63a742941f5087acae1aa438dcbe87010bddd53884b1af6b22c940" - url="en_windows_7_ultimate_with_sp1_x86_dvd_u_677460.iso" ;; - "es" | "es-"* ) url="es_windows_7_ultimate_with_sp1_x86_dvd_u_677462.iso" ;; - "et" | "et-"* ) url="et_windows_7_ultimate_with_sp1_x86_dvd_u_677464.iso" ;; - "fi" | "fi-"* ) url="fi_windows_7_ultimate_with_sp1_x86_dvd_u_677466.iso" ;; - "fr" | "fr-"* ) url="fr_windows_7_ultimate_with_sp1_x86_dvd_u_677434.iso" ;; - "he" | "he-"* ) url="he_windows_7_ultimate_with_sp1_x86_dvd_u_677436.iso" ;; - "hr" | "hr-"* ) url="hr_windows_7_ultimate_with_sp1_x86_dvd_u_677438.iso" ;; - "hu" | "hu-"* ) url="hu_windows_7_ultimate_with_sp1_x86_dvd_u_677441.iso" ;; - "it" | "it-"* ) url="it_windows_7_ultimate_with_sp1_x86_dvd_u_677443.iso" ;; - "ja" | "ja-"* ) url="ja_windows_7_ultimate_with_sp1_x86_dvd_u_677445.iso" ;; - "ko" | "ko-"* ) url="ko_windows_7_ultimate_k_with_sp1_x86_dvd_u_677508.iso" ;; - "lt" | "lt-"* ) url="lt_windows_7_ultimate_with_sp1_x86_dvd_u_677447.iso" ;; - "lv" | "lv-"* ) url="lv_windows_7_ultimate_with_sp1_x86_dvd_u_677449.iso" ;; - "nb" | "nb-"* ) url="no_windows_7_ultimate_with_sp1_x86_dvd_u_677451.iso" ;; - "nl" | "nl-"* ) url="nl_windows_7_ultimate_with_sp1_x86_dvd_u_677453.iso" ;; - "pl" | "pl-"* ) url="pl_windows_7_ultimate_with_sp1_x86_dvd_u_677455.iso" ;; - "br" | "pt-br" ) url="pt_windows_7_ultimate_with_sp1_x86_dvd_u_677457.iso" ;; - "pt" | "pt-"* ) url="pp_windows_7_ultimate_with_sp1_x86_dvd_u_677459.iso" ;; - "ro" | "ro-"* ) url="ro_windows_7_ultimate_with_sp1_x86_dvd_u_677461.iso" ;; - "ru" | "ru-"* ) url="ru_windows_7_ultimate_with_sp1_x86_dvd_u_677463.iso" ;; - "sk" | "sk-"* ) url="sk_windows_7_ultimate_with_sp1_x86_dvd_u_677465.iso" ;; - "sl" | "sl-"* ) url="sl_windows_7_ultimate_with_sp1_x86_dvd_u_677467.iso" ;; - "sr" | "sr-"* ) url="sr_windows_7_ultimate_with_sp1_x86_dvd_u_677468.iso" ;; - "sv" | "sv-"* ) url="sv_windows_7_ultimate_with_sp1_x86_dvd_u_677482.iso" ;; - "th" | "th-"* ) url="th_windows_7_ultimate_with_sp1_x86_dvd_u_677483.iso" ;; - "tr" | "tr-"* ) url="tr_windows_7_ultimate_with_sp1_x86_dvd_u_677484.iso" ;; - "uk" | "uk-"* ) url="uk_windows_7_ultimate_with_sp1_x86_dvd_u_677485.iso" ;; - "zh-hk" ) url="hk_windows_7_ultimate_with_sp1_x86_dvd_u_677487.iso" ;; - "zh-tw" ) url="tw_windows_7_ultimate_with_sp1_x86_dvd_u_677488.iso" ;; - "zh" | "zh-"* ) url="cn_windows_7_ultimate_with_sp1_x86_dvd_u_677486.iso" ;; - esac - ;; - "winvistax64" | "winvistax64-enterprise" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar_windows_vista_enterprise_with_sp2_x64_dvd_x15-40408.iso" ;; - "bg" | "bg-"* ) url="bg_windows_vista_enterprise_with_sp2_x64_dvd_x15-40410.iso" ;; - "cs" | "cs-"* ) url="cs_windows_vista_enterprise_with_sp2_x64_dvd_x15-40412.iso" ;; - "da" | "da-"* ) url="da_windows_vista_enterprise_with_sp2_x64_dvd_x15-40416.iso" ;; - "de" | "de-"* ) url="de_windows_vista_enterprise_sp2_x64_dvd_342376.iso" ;; - "el" | "el-"* ) url="el_windows_vista_enterprise_with_sp2_x64_dvd_x15-40423.iso" ;; - "en" | "en-"* ) - size=3205953536 - sum="0a0cd511b3eac95c6f081419c9c65b12317b9d6a8d9707f89d646c910e788016" - url="en_windows_vista_enterprise_sp2_x64_dvd_342332.iso" ;; - "es" | "es-"* ) url="es_windows_vista_enterprise_sp2_x64_dvd_342415.iso" ;; - "et" | "et-"* ) url="et_windows_vista_enterprise_with_sp2_x64_dvd_x15-40437.iso" ;; - "fi" | "fi-"* ) url="fi_windows_vista_enterprise_with_sp2_x64_dvd_x15-40451.iso" ;; - "fr" | "fr-"* ) url="fr_windows_vista_enterprise_sp2_x64_dvd_342355.iso" ;; - "he" | "he-"* ) url="he_windows_vista_enterprise_with_sp2_x64_dvd_x15-40425.iso" ;; - "hr" | "hr-"* ) url="hr_windows_vista_enterprise_with_sp2_x64_dvd_x15-40396.iso" ;; - "hu" | "hu-"* ) url="hu_windows_vista_enterprise_with_sp2_x64_dvd_x15-40427.iso" ;; - "it" | "it-"* ) url="it_windows_vista_enterprise_with_sp2_x64_dvd_x15-40429.iso" ;; - "ja" | "ja-"* ) url="ja_windows_vista_enterprise_sp2_x64_dvd_342393.iso" ;; - "ko" | "ko-"* ) url="ko_windows_vista_enterprise_k_with_sp2_x64_dvd_x15-40433.iso" ;; - "lt" | "lt-"* ) url="lt_windows_vista_enterprise_with_sp2_x64_dvd_x15-40394.iso" ;; - "lv" | "lv-"* ) url="lv_windows_vista_enterprise_with_sp2_x64_dvd_x15-40392.iso" ;; - "nb" | "nb-"* ) url="no_windows_vista_enterprise_with_sp2_x64_dvd_x15-40439.iso" ;; - "nl" | "nl-"* ) url="nl_windows_vista_enterprise_with_sp2_x64_dvd_x15-40441.iso" ;; - "pl" | "pl-"* ) url="pl_windows_vista_enterprise_with_sp2_x64_dvd_x15-40445.iso" ;; - "br" | "pt-br" ) url="pt_windows_vista_enterprise_with_sp2_x64_dvd_x15-40400.iso" ;; - "pt" | "pt-"* ) url="pp_windows_vista_enterprise_with_sp2_x64_dvd_x15-40443.iso" ;; - "ro" | "ro-"* ) url="ro_windows_vista_enterprise_with_sp2_x64_dvd_x15-40447.iso" ;; - "ru" | "ru-"* ) url="ru_windows_vista_enterprise_with_sp2_x64_dvd_x15-40455.iso" ;; - "sk" | "sk-"* ) url="sk_windows_vista_enterprise_with_sp2_x64_dvd_x15-40453.iso" ;; - "sl" | "sl-"* ) url="sl_windows_vista_enterprise_with_sp2_x64_dvd_x15-40435.iso" ;; - "sr" | "sr-"* ) url="sr_windows_vista_enterprise_with_sp2_x64_dvd_x15-40406.iso" ;; - "sv" | "sv-"* ) url="sv_windows_vista_enterprise_with_sp2_x64_dvd_x15-40449.iso" ;; - "th" | "th-"* ) url="th_windows_vista_enterprise_with_sp2_x64_dvd_x15-40457.iso" ;; - "tr" | "tr-"* ) url="tr_windows_vista_enterprise_with_sp2_x64_dvd_x15-40459.iso" ;; - "uk" | "uk-"* ) url="uk_windows_vista_enterprise_with_sp2_x64_dvd_x15-40398.iso" ;; - "zh-hk" ) url="hk_windows_vista_enterprise_with_sp2_x64_dvd_x15-40463.iso" ;; - "zh-tw" ) url="tw_windows_vista_enterprise_with_sp2_x64_dvd_x15-40461.iso" ;; - "zh" | "zh-"* ) url="cn_windows_vista_enterprise_with_sp2_x64_dvd_x15-40402.iso" ;; - esac - ;; - "winvistax64-ultimate" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar_windows_vista_with_sp2_x64_dvd_x15-36318.iso" ;; - "bg" | "bg-"* ) url="bg_windows_vista_with_sp2_x64_dvd_x15-36321.iso" ;; - "cs" | "cs-"* ) url="cs_windows_vista_with_sp2_x64_dvd_x15-36327.iso" ;; - "da" | "da-"* ) url="da_windows_vista_with_sp2_x64_dvd_x15-36329.iso" ;; - "de" | "de-"* ) url="de_windows_vista_sp2_x64_dvd_342287.iso" ;; - "el" | "el-"* ) url="el_windows_vista_with_sp2_x64_dvd_x15-36343.iso" ;; - "en" | "en-"* ) - size=3861460992 - sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78" - url="en_windows_vista_sp2_x64_dvd_342267.iso" ;; - "es" | "es-"* ) url="es_windows_vista_sp2_x64_dvd_342309.iso" ;; - "et" | "et-"* ) url="et_windows_vista_with_sp2_x64_dvd_x15-36335.iso" ;; - "fi" | "fi-"* ) url="fi_windows_vista_with_sp2_x64_dvd_x15-36337.iso" ;; - "fr" | "fr-"* ) url="fr_windows_vista_sp2_x64_dvd_342277.iso" ;; - "he" | "he-"* ) url="he_windows_vista_with_sp2_x64_dvd_x15-36344.iso" ;; - "hr" | "hr-"* ) url="hr_windows_vista_with_sp2_x64_dvd_x15-36325.iso" ;; - "hu" | "hu-"* ) url="hu_windows_vista_with_sp2_x64_dvd_x15-36346.iso" ;; - "it" | "it-"* ) url="it_windows_vista_with_sp2_x64_dvd_x15-36348.iso" ;; - "ja" | "ja-"* ) url="ja_windows_vista_sp2_x64_dvd_342298.iso" ;; - "ko" | "ko-"* ) url="ko_windows_vista_k_and_kn_with_sp2_x86_dvd_x15-36302.iso" ;; - "lt" | "lt-"* ) url="lt_windows_vista_with_sp2_x64_dvd_x15-36355.iso" ;; - "lv" | "lv-"* ) url="lv_windows_vista_with_sp2_x64_dvd_x15-36353.iso" ;; - "nb" | "nb-"* ) url="no_windows_vista_with_sp2_x64_dvd_x15-36357.iso" ;; - "nl" | "nl-"* ) url="nl_windows_vista_with_sp2_x64_dvd_x15-36331.iso" ;; - "pl" | "pl-"* ) url="pl_windows_vista_with_sp2_x64_dvd_x15-36359.iso" ;; - "br" | "pt-br" ) url="pt_windows_vista_with_sp2_x64_dvd_x15-36319.iso" ;; - "pt" | "pt-"* ) url="pp_windows_vista_with_sp2_x64_dvd_x15-36361.iso" ;; - "ro" | "ro-"* ) url="ro_windows_vista_with_sp2_x64_dvd_x15-36363.iso" ;; - "ru" | "ru-"* ) url="ru_windows_vista_with_sp2_x64_dvd_x15-36364.iso" ;; - "sk" | "sk-"* ) url="sk_windows_vista_with_sp2_x64_dvd_x15-36367.iso" ;; - "sl" | "sl-"* ) url="sl_windows_vista_with_sp2_x64_dvd_x15-36369.iso" ;; - "sr" | "sr-"* ) url="sr_windows_vista_with_sp2_x64_dvd_x15-36365.iso" ;; - "sv" | "sv-"* ) url="sv_windows_vista_with_sp2_x64_dvd_x15-36373.iso" ;; - "th" | "th-"* ) url="th_windows_vista_with_sp2_x64_dvd_x15-36374.iso" ;; - "tr" | "tr-"* ) url="tr_windows_vista_with_sp2_x64_dvd_x15-36375.iso" ;; - "uk" | "uk-"* ) url="uk_windows_vista_with_sp2_x64_dvd_x15-36376.iso" ;; - "zh-hk" ) url="hk_windows_vista_with_sp2_x64_dvd_x15-36324.iso" ;; - "zh-tw" ) url="tw_windows_vista_with_sp2_x64_dvd_x15-36323.iso" ;; - "zh" | "zh-"* ) url="cn_windows_vista_with_sp2_x64_dvd_x15-36322.iso" ;; - esac - ;; - "winvistax86" | "winvistax86-enterprise" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar_windows_vista_enterprise_with_sp2_x86_dvd_x15-40263.iso" ;; - "bg" | "bg-"* ) url="bg_windows_vista_enterprise_with_sp2_x86_dvd_x15-40265.iso" ;; - "cs" | "cs-"* ) url="cs_windows_vista_enterprise_with_sp2_x86_dvd_x15-40267.iso" ;; - "da" | "da-"* ) url="da_windows_vista_enterprise_with_sp2_x86_dvd_x15-40271.iso" ;; - "de" | "de-"* ) url="de_windows_vista_enterprise_sp2_x86_dvd_342373.iso" ;; - "el" | "el-"* ) url="el_windows_vista_enterprise_with_sp2_x86_dvd_x15-40277.iso" ;; - "en" | "en-"* ) - size=2420981760 - sum="54e2720004041e7db988a391543ea5228b0affc28efcf9303d2d0ff9402067f5" - url="en_windows_vista_enterprise_sp2_x86_dvd_342329.iso" ;; - "es" | "es-"* ) url="es_windows_vista_enterprise_sp2_x86_dvd_342413.iso" ;; - "et" | "et-"* ) url="et_windows_vista_enterprise_with_sp2_x86_dvd_x15-40291.iso" ;; - "fi" | "fi-"* ) url="fi_windows_vista_enterprise_with_sp2_x86_dvd_x15-40305.iso" ;; - "fr" | "fr-"* ) url="fr_windows_vista_enterprise_sp2_x86_dvd_342352.iso" ;; - "he" | "he-"* ) url="he_windows_vista_enterprise_with_sp2_x86_dvd_x15-40279.iso" ;; - "hr" | "hr-"* ) url="hr_windows_vista_enterprise_with_sp2_x86_dvd_x15-40251.iso" ;; - "hu" | "hu-"* ) url="hu_windows_vista_enterprise_with_sp2_x86_dvd_x15-40281.iso" ;; - "it" | "it-"* ) url="it_windows_vista_enterprise_with_sp2_x86_dvd_x15-40283.iso" ;; - "ja" | "ja-"* ) url="ja_windows_vista_enterprise_sp2_x86_dvd_342391.iso" ;; - "ko" | "ko-"* ) url="ko_windows_vista_enterprise_k_with_sp2_x86_dvd_x15-40287.iso" ;; - "lt" | "lt-"* ) url="lt_windows_vista_enterprise_with_sp2_x86_dvd_x15-40249.iso" ;; - "lv" | "lv-"* ) url="lv_windows_vista_enterprise_with_sp2_x86_dvd_x15-40247.iso" ;; - "nb" | "nb-"* ) url="no_windows_vista_enterprise_with_sp2_x86_dvd_x15-40293.iso" ;; - "nl" | "nl-"* ) url="nl_windows_vista_enterprise_with_sp2_x86_dvd_x15-40295.iso" ;; - "pl" | "pl-"* ) url="pl_windows_vista_enterprise_with_sp2_x86_dvd_x15-40299.iso" ;; - "br" | "pt-br" ) url="pt_windows_vista_enterprise_with_sp2_x86_dvd_x15-40255.iso" ;; - "pt" | "pt-"* ) url="pp_windows_vista_enterprise_with_sp2_x86_dvd_x15-40297.iso" ;; - "ro" | "ro-"* ) url="ro_windows_vista_enterprise_with_sp2_x86_dvd_x15-40301.iso" ;; - "ru" | "ru-"* ) url="ru_windows_vista_enterprise_with_sp2_x86_dvd_x15-40309.iso" ;; - "sk" | "sk-"* ) url="sk_windows_vista_enterprise_with_sp2_x86_dvd_x15-40307.iso" ;; - "sl" | "sl-"* ) url="sl_windows_vista_enterprise_with_sp2_x86_dvd_x15-40289.iso" ;; - "sr" | "sr-"* ) url="sr_windows_vista_enterprise_with_sp2_x86_dvd_x15-40261.iso" ;; - "sv" | "sv-"* ) url="sv_windows_vista_enterprise_with_sp2_x86_dvd_x15-40303.iso" ;; - "th" | "th-"* ) url="th_windows_vista_enterprise_with_sp2_x86_dvd_x15-40311.iso" ;; - "tr" | "tr-"* ) url="tr_windows_vista_enterprise_with_sp2_x86_dvd_x15-40313.iso" ;; - "uk" | "uk-"* ) url="uk_windows_vista_enterprise_with_sp2_x86_dvd_x15-40253.iso" ;; - "zh-hk" ) url="hk_windows_vista_enterprise_with_sp2_x86_dvd_x15-40317.iso" ;; - "zh-tw" ) url="tw_windows_vista_enterprise_with_sp2_x86_dvd_x15-40315.iso" ;; - "zh" | "zh-"* ) url="cn_windows_vista_enterprise_with_sp2_x86_dvd_x15-40257.iso" ;; - esac - ;; - "winvistax86-ultimate" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar_windows_vista_with_sp2_x86_dvd_x15-36282.iso" ;; - "bg" | "bg-"* ) url="bg_windows_vista_with_sp2_x86_dvd_x15-36284.iso" ;; - "hr" | "hr-"* ) url="hr_windows_vista_with_sp2_x86_dvd_x15-36288.iso" ;; - "cs" | "cs-"* ) url="cs_windows_vista_with_sp2_x86_dvd_x15-36289.iso" ;; - "da" | "da-"* ) url="da_windows_vista_with_sp2_x86_dvd_x15-36290.iso" ;; - "de" | "de-"* ) url="de_windows_vista_sp2_x86_dvd_342286.iso" ;; - "el" | "el-"* ) url="el_windows_vista_with_sp2_x86_dvd_x15-36297.iso" ;; - "en" | "en-"* ) - size=3243413504 - sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c" - url="en_windows_vista_with_sp2_x86_dvd_342266.iso" ;; - "es" | "es-"* ) url="es_windows_vista_sp2_x86_dvd_342308.iso" ;; - "et" | "et-"* ) url="et_windows_vista_with_sp2_x86_dvd_x15-36293.iso" ;; - "fi" | "fi-"* ) url="fi_windows_vista_with_sp2_x86_dvd_x15-36294.iso" ;; - "fr" | "fr-"* ) url="fr_windows_vista_sp2_x86_dvd_342276.iso" ;; - "he" | "he-"* ) url="he_windows_vista_with_sp2_x86_dvd_x15-36298.iso" ;; - "hu" | "hu-"* ) url="hu_windows_vista_with_sp2_x86_dvd_x15-36299.iso" ;; - "it" | "it-"* ) url="it_windows_vista_with_sp2_x86_dvd_x15-36300.iso" ;; - "ja" | "ja-"* ) url="ja_windows_vista_sp2_x86_dvd_342296.iso" ;; - "ko" | "ko-"* ) url="ko_windows_vista_k_with_sp2_x64_dvd_x15-36350.iso" ;; - "lt" | "lt-"* ) url="lt_windows_vista_with_sp2_x86_dvd_x15-36304.iso" ;; - "lv" | "lv-"* ) url="lv_windows_vista_with_sp2_x86_dvd_x15-36303.iso" ;; - "nb" | "nb-"* ) url="no_windows_vista_with_sp2_x86_dvd_x15-36305.iso" ;; - "nl" | "nl-"* ) url="nl_windows_vista_with_sp2_x86_dvd_x15-36291.iso" ;; - "pl" | "pl-"* ) url="pl_windows_vista_with_sp2_x86_dvd_x15-36306.iso" ;; - "br" | "pt-br" ) url="pt_windows_vista_with_sp2_x86_dvd_x15-36283.iso" ;; - "pt" | "pt-"* ) url="pp_windows_vista_with_sp2_x86_dvd_x15-36307.iso" ;; - "ro" | "ro-"* ) url="ro_windows_vista_with_sp2_x86_dvd_x15-36308.iso" ;; - "ru" | "ru-"* ) url="ru_windows_vista_with_sp2_x86_dvd_x15-36309.iso" ;; - "sk" | "sk-"* ) url="sk_windows_vista_with_sp2_x86_dvd_x15-36311.iso" ;; - "sl" | "sl-"* ) url="sl_windows_vista_with_sp2_x86_dvd_x15-36312.iso" ;; - "sr" | "sr-"* ) url="sr_windows_vista_with_sp2_x86_dvd_x15-36310.iso" ;; - "sv" | "sv-"* ) url="sv_windows_vista_with_sp2_x86_dvd_x15-36314.iso" ;; - "th" | "th-"* ) url="th_windows_vista_with_sp2_x86_dvd_x15-36315.iso" ;; - "tr" | "tr-"* ) url="tr_windows_vista_with_sp2_x86_dvd_x15-36316.iso" ;; - "uk" | "uk-"* ) url="uk_windows_vista_with_sp2_x86_dvd_x15-36317.iso" ;; - "zh-hk" ) url="hk_windows_vista_with_sp2_x86_dvd_x15-36287.iso" ;; - "zh-tw" ) url="tw_windows_vista_with_sp2_x86_dvd_x15-36286.iso" ;; - "zh" | "zh-"* ) url="cn_windows_vista_with_sp2_x86_dvd_x15-36285.iso" ;; - esac - ;; - "winxpx86" ) - case "${culture,,}" in - "ar" | "ar-"* ) url="ar_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74065.iso" ;; - "cs" | "cs-"* ) url="cs_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73965.iso" ;; - "da" | "da-"* ) url="da_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73968.iso" ;; - "de" | "de-"* ) url="de_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73985.iso" ;; - "el" | "el-"* ) url="el_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73988.iso" ;; - "es" | "es-"* ) url="es_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74009.iso" ;; - "fi" | "fi-"* ) url="fi_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73979.iso" ;; - "fr" | "fr-"* ) url="fr_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73982.iso" ;; - "he" | "he-"* ) url="he_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74143.iso" ;; - "hu" | "hu-"* ) url="hu_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73991.iso" ;; - "it" | "it-"* ) url="it_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73994.iso" ;; - "ja" | "ja-"* ) url="ja_windows_xp_professional_with_service_pack_3_x86_dvd_vl_x14-74058.iso" ;; - "nb" | "nb-"* ) url="no_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74000.iso" ;; - "nl" | "nl-"* ) url="nl_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-73971.iso" ;; - "pl" | "pl-"* ) url="pl_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74003.iso" ;; - "br" | "pt-br" ) url="pt-br_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74137.iso" ;; - "pt" | "pt-"* ) url="pt-pt_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74006.iso" ;; - "ru" | "ru-"* ) url="ru_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74146.iso" ;; - "sv" | "sv-"* ) url="sv_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74012.iso" ;; - "tr" | "tr-"* ) url="tr_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74085.iso" ;; - "zh-hk" ) url="zh-hk_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74075.iso" ;; - "zh-tw" ) url="zh-tw_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74140.iso" ;; - "zh" | "zh-"* ) url="zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74070.iso" ;; - esac - ;; - "winxpx64" ) - [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 - size=628168704 - sum="b641514c2265ba6c0a9ddbcfa4a6daaac6539db8d1ce704366cdfe5a516e0495" - url="en_win_xp_pro_x64_with_sp2_vl_x13-41611.iso" - ;; - esac - - case "${ret,,}" in - "sum" ) echo "$sum" ;; - "size" ) echo "$size" ;; - *) [ -n "$url" ] && echo "$host/$url";; - esac - - return 0 -} - -getLink4() { - local id="$1" local lang="$2" local ret="$3" @@ -1960,12 +1107,66 @@ isESD() { return 1 } +isMG() { + + local id="$1" + local lang="$2" + + case "${id,,}" in + "win11${PLATFORM,,}" ) + return 0 + ;; + "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval" ) + return 0 + ;; + "win11${PLATFORM,,}-ltsc" | "win11${PLATFORM,,}-enterprise-ltsc-eval" ) + return 0 + ;; + "win11${PLATFORM,,}-iot" | "win11${PLATFORM,,}-enterprise-iot-eval" ) + return 0 + ;; + "win10${PLATFORM,,}" ) + return 0 + ;; + "win10${PLATFORM,,}-enterprise" | "win10${PLATFORM,,}-enterprise-eval" ) + return 0 + ;; + "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) + return 0 + ;; + "win10${PLATFORM,,}-iot" | "win10${PLATFORM,,}-enterprise-iot-eval" ) + return 0 + ;; + "win81${PLATFORM,,}-enterprise" | "win81${PLATFORM,,}-enterprise-eval" ) + return 0 + ;; + "win2025" | "win2025-eval" | "win2022" | "win2022-eval" | "win2019" | "win2019-eval" ) + return 0 + ;; + "win2016" | "win2016-eval" | "win2012r2" | "win2012r2-eval" | "win2008r2" | "win2008r2-eval" ) + return 0 + ;; + "win7x64" | "win7x64-enterprise" | "win7x64-ultimate" | "win7x86" | "win7x86-enterprise" | "win7x86-ultimate" ) + return 0 + ;; + "winvistax64" | "winvistax64-enterprise" | "winvistax64-ultimate" | "winvistax86" | "winvistax86-enterprise" | "winvistax86-ultimate" ) + return 0 + ;; + "winxpx86" | "winxpx64" ) + return 0 + ;; + esac + + return 1 +} + validVersion() { local id="$1" local lang="$2" local url + isMG "$id" "$lang" && return 0 isESD "$id" "$lang" && return 0 isMido "$id" "$lang" && return 0 diff --git a/src/mido.sh b/src/mido.sh index 776f716..4804390 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -4,25 +4,26 @@ set -Eeuo pipefail handle_curl_error() { local error_code="$1" + local server_name="$2" case "$error_code" in 1) error "Unsupported protocol!" ;; 2) error "Failed to initialize curl!" ;; 3) error "The URL format is malformed!" ;; 5) error "Failed to resolve address of proxy host!" ;; - 6) error "Failed to resolve Microsoft servers! Is there an Internet connection?" ;; - 7) error "Failed to contact Microsoft servers! Is there an Internet connection or is the server down?" ;; - 8) error "Microsoft servers returned a malformed HTTP response!" ;; + 6) error "Failed to resolve $server_name servers! Is there an Internet connection?" ;; + 7) error "Failed to contact $server_name servers! Is there an Internet connection or is the server down?" ;; + 8) error "$server_name servers returned a malformed HTTP response!" ;; 16) error "A problem was detected in the HTTP2 framing layer!" ;; - 22) error "Microsoft servers returned a failing HTTP status code!" ;; + 22) error "$server_name servers returned a failing HTTP status code!" ;; 23) error "Failed at writing Windows media to disk! Out of disk space or permission error?" ;; 26) error "Failed to read Windows media from disk!" ;; 27) error "Ran out of memory during download!" ;; - 28) error "Connection timed out to Microsoft server!" ;; - 35) error "SSL connection error from Microsoft server!" ;; + 28) error "Connection timed out to $server_name server!" ;; + 35) error "SSL connection error from $server_name server!" ;; 36) error "Failed to continue earlier download!" ;; - 52) error "Received no data from the Microsoft server!" ;; - 63) error "Microsoft servers returned an unexpectedly large response!" ;; + 52) error "Received no data from the $server_name server!" ;; + 63) error "$server_name servers returned an unexpectedly large response!" ;; # POSIX defines exit statuses 1-125 as usable by us # https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_08_02 $((error_code <= 125))) @@ -100,7 +101,7 @@ download_windows() { # Remove "Accept" header that curl sends by default [[ "$DEBUG" == [Yy1]* ]] && echo "Parsing download page: ${url}" download_page_html=$(curl --silent --max-time 30 --user-agent "$user_agent" --header "Accept:" --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url") || { - handle_curl_error $? + handle_curl_error "$?" "Microsoft" return $? } @@ -117,14 +118,14 @@ download_windows() { # Permit Session ID curl --silent --max-time 30 --output /dev/null --user-agent "$user_agent" --header "Accept:" --max-filesize 100K --fail --proto =https --tlsv1.2 --http1.1 -- "https://vlscppe.microsoft.com/tags?org_id=y6jn8c31&session_id=$session_id" || { # This should only happen if there's been some change to how this API works - handle_curl_error $? + handle_curl_error "$?" "Microsoft" return $? } [[ "$DEBUG" == [Yy1]* ]] && echo -n "Getting language SKU ID: " sku_url="https://www.microsoft.com/software-download-connector/api/getskuinformationbyproductedition?profile=$profile&ProductEditionId=$product_edition_id&SKU=undefined&friendlyFileName=undefined&Locale=en-US&sessionID=$session_id" language_skuid_json=$(curl --silent --max-time 30 --request GET --user-agent "$user_agent" --referer "$url" --header "Accept:" --max-filesize 100K --fail --proto =https --tlsv1.2 --http1.1 -- "$sku_url") || { - handle_curl_error $? + handle_curl_error "$?" "Microsoft" return $? } @@ -229,7 +230,7 @@ download_windows_eval() { [[ "$DEBUG" == [Yy1]* ]] && echo "Parsing download page: ${url}" iso_download_page_html=$(curl --silent --max-time 30 --user-agent "$user_agent" --location --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url") || { - handle_curl_error $? + handle_curl_error "$?" "Microsoft" return $? } @@ -287,7 +288,7 @@ download_windows_eval() { iso_download_link=$(curl --silent --max-time 30 --user-agent "$user_agent" --location --output /dev/null --silent --write-out "%{url_effective}" --head --fail --proto =https --tlsv1.2 --http1.1 -- "$iso_download_link") || { # This should only happen if the Microsoft servers are down - handle_curl_error $? + handle_curl_error "$?" "Microsoft" return $? } @@ -428,6 +429,215 @@ getCatalog() { return 0 } +getMG() { + + local version="$1" + local lang="$2" + local desc="$3" + + local locale="" + local culture="" + local language="" + local user_agent="" + + user_agent=$(get_agent) + language=$(getLanguage "$lang" "desc") + culture=$(getLanguage "$lang" "culture") + + local msg="Requesting download link from massgrave.dev..." + info "$msg" && html "$msg" + + local pattern="" + local locale="${culture,,}" + local platform="${PLATFORM,,}" + local url="https://massgrave.dev/" + + if [[ "${PLATFORM,,}" != "arm64" ]]; then + + case "${version,,}" in + "win11${PLATFORM,,}" ) + url+="windows_11_links" + pattern="consumer" + ;; + "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval" ) + url+="windows_11_links" + pattern="business" + ;; + "win11${PLATFORM,,}-ltsc" | "win11${PLATFORM,,}-enterprise-ltsc-eval" ) + url+="windows_ltsc_links" + pattern="11_enterprise_ltsc" + ;; + "win11${PLATFORM,,}-iot" | "win11${PLATFORM,,}-enterprise-iot-eval" ) + url+="windows_ltsc_links" + pattern="11_iot" + ;; + "win10${PLATFORM,,}" ) + url+="windows_10_links" + pattern="consumer" + ;; + "win10${PLATFORM,,}-enterprise" | "win10${PLATFORM,,}-enterprise-eval" ) + url+="windows_10_links" + pattern="business" + ;; + "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) + url+="windows_ltsc_links" + pattern="10_enterprise_ltsc" + ;; + "win10${PLATFORM,,}-iot" | "win10${PLATFORM,,}-enterprise-iot-eval" ) + url+="windows_ltsc_links" + pattern="10_iot" + ;; + "win81${PLATFORM,,}-enterprise" | "win81${PLATFORM,,}-enterprise-eval" ) + url+="windows_8.1_links" + pattern="8.1_enterprise" + locale=$(getLanguage "$lang" "code") + [[ "$locale" == "sr" ]] && locale="sr-latn" + ;; + "win2025" | "win2025-eval" ) + url+="windows_server_links" + pattern="server_2025" + ;; + "win2022" | "win2022-eval" ) + url+="windows_server_links" + pattern="server_2022" + ;; + "win2019" | "win2019-eval" ) + url+="windows_server_links" + pattern="server_2019" + ;; + "win2016" | "win2016-eval" ) + url+="windows_server_links" + pattern="server_2016" + locale=$(getLanguage "$lang" "code") + [[ "$locale" == "hk" ]] && locale="ct" + [[ "$locale" == "tw" ]] && locale="ct" + ;; + "win2012r2" | "win2012r2-eval" ) + url+="windows_server_links" + pattern="server_2012_r2" + locale=$(getLanguage "$lang" "code") + ;; + "win2008r2" | "win2008r2-eval" ) + url+="windows_server_links" + pattern="server_2008_r2" + locale=$(getLanguage "$lang" "code") + ;; + "win7x64" | "win7x64-enterprise" ) + url+="windows_7_links" + pattern="enterprise" + locale=$(getLanguage "$lang" "code") + ;; + "win7x64-ultimate" ) + url+="windows_7_links" + pattern="ultimate" + locale=$(getLanguage "$lang" "code") + ;; + "win7x86" | "win7x86-enterprise" ) + platform="x86" + url+="windows_7_links" + pattern="enterprise" + locale=$(getLanguage "$lang" "code") + ;; + "win7x86-ultimate" ) + platform="x86" + url+="windows_7_links" + pattern="ultimate" + locale=$(getLanguage "$lang" "code") + ;; + "winvistax64" | "winvistax64-enterprise" ) + url+="windows_vista_links" + pattern="enterprise" + locale=$(getLanguage "$lang" "code") + ;; + "winvistax64-ultimate" ) + url+="windows_vista_links" + pattern="sp2" + locale=$(getLanguage "$lang" "code") + ;; + "winvistax86" | "winvistax86-enterprise" ) + platform="x86" + url+="windows_vista_links" + pattern="enterprise" + locale=$(getLanguage "$lang" "code") + ;; + "winvistax86-ultimate" ) + platform="x86" + url+="windows_vista_links" + pattern="sp2" + locale=$(getLanguage "$lang" "code") + ;; + "winxpx86" ) + platform="x86" + url+="windows_xp_links" + pattern="xp" + locale=$(getLanguage "$lang" "code") + [[ "$locale" == "pt" ]] && locale="pt-br" + [[ "$locale" == "pp" ]] && locale="pt-pt" + [[ "$locale" == "cn" ]] && locale="zh-hans" + [[ "$locale" == "hk" ]] && locale="zh-hk" + [[ "$locale" == "tw" ]] && locale="zh-tw" + ;; + "winxpx64" ) + url+="windows_xp_links" + pattern="xp" + locale=$(getLanguage "$lang" "code") + ;; + esac + + else + + case "${version,,}" in + "win11${PLATFORM,,}" | "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval" ) + url+="windows_arm_links" + pattern="11_business" + ;; + "win11${PLATFORM,,}-ltsc" | "win11${PLATFORM,,}-enterprise-ltsc-eval" ) + url+="windows_arm_links" + pattern="11_iot_enterprise_ltsc" + ;; + "win10${PLATFORM,,}" | "win10${PLATFORM,,}-enterprise" | "win10${PLATFORM,,}-enterprise-eval" ) + url+="windows_arm_links" + pattern="Pro_10" + locale="$language" + [[ "$locale" == "Chinese" ]] && locale="ChnSimp" + [[ "$locale" == "Chinese HK" ]] && locale="ChnTrad" + [[ "$locale" == "Chinese TW" ]] && locale="ChnTrad" + ;; + "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) + url+="windows_arm_links" + pattern="10_iot_enterprise_ltsc" + ;; + esac + + fi + + local body="" + + [[ "$DEBUG" == [Yy1]* ]] && echo "Parsing download page: ${url}" + body=$(curl --silent --max-time 30 --user-agent "$user_agent" --location --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url") || { + handle_curl_error "$?" "Massgrave" + return $? + } + + local list="" + list=$(echo "$body" | grep -Eo "(http|https)://[a-zA-Z0-9./?=_%:-]*" | grep -i '\.iso$') + + local result="" + result=$(echo "$list" | grep -i "${platform}" | grep "${pattern}" | grep -i -m 1 "${locale,,}_") + + if [ -z "$result" ]; then + if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then + error "No download in the $language language available for $desc!" + else + error "Failed to parse download link for $desc! Please report this at $SUPPORT/issues." + fi + return 1 + fi + + MG_URL="$result" + return 0 +} + getESD() { local dir="$1" @@ -712,6 +922,31 @@ downloadImage() { done + if isMG "$version" "$lang"; then + + if [[ "$tried" != "n" ]]; then + info "Failed to download $desc, will try a diferent method now..." + fi + + tried="y" + success="n" + + if getMG "$version" "$lang" "$desc"; then + success="y" + else + info "$msg" && html "$msg" && sleep "$delay" + getMG "$version" "$lang" "$desc" && success="y" + fi + + if [[ "$success" == "y" ]]; then + downloadFile "$iso" "$MG_URL" "" "" "$lang" "$desc" && return 0 + info "$msg" && html "$msg" && sleep "$delay" + downloadFile "$iso" "$MG_URL" "" "" "$lang" "$desc" && return 0 + rm -f "$iso" + fi + + fi + return 1 } From a4fdfbdf91de0cb4fbf5e2e4c5f4a29280738cf5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 26 Nov 2024 20:16:47 +0100 Subject: [PATCH 095/290] chore(deps): update qemux/qemu-docker docker tag to v6.10 (#929) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 80619ee..b4c062d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu-docker:6.09 / / +COPY --from=qemux/qemu-docker:6.10 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From 9654a945fbd86db5a2f94f0bab1213b09e33e367 Mon Sep 17 00:00:00 2001 From: Kilian von Pflugk <github@jumoog.io> Date: Sun, 1 Dec 2024 16:07:23 +0000 Subject: [PATCH 096/290] docs: Add TUN device (#940) --- compose.yml | 1 + kubernetes.yml | 97 ++++++++++++++++++++++++++------------------------ readme.md | 3 +- 3 files changed, 53 insertions(+), 48 deletions(-) diff --git a/compose.yml b/compose.yml index 9d0134b..f305849 100644 --- a/compose.yml +++ b/compose.yml @@ -6,6 +6,7 @@ services: VERSION: "11" devices: - /dev/kvm + - /dev/net/tun cap_add: - NET_ADMIN ports: diff --git a/kubernetes.yml b/kubernetes.yml index efa668d..2de24a4 100644 --- a/kubernetes.yml +++ b/kubernetes.yml @@ -1,10 +1,11 @@ +--- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: windows-pvc spec: accessModes: - - ReadWriteOnce + - ReadWriteOnce resources: requests: storage: 64Gi @@ -16,59 +17,61 @@ metadata: labels: name: windows spec: - terminationGracePeriodSeconds: 120 # the Kubernetes default is 30 seconds and it may be not enough containers: - - name: windows - image: dockurr/windows - ports: - - containerPort: 8006 - protocol: TCP - - containerPort: 3389 - protocol: TCP - - containerPort: 3389 - protocol: UDP - securityContext: - privileged: true - env: - - name: VERSION - value: "11" - - name: RAM_SIZE - value: "4G" - - name: CPU_CORES - value: "2" - - name: DISK_SIZE - value: "64G" - volumeMounts: - - mountPath: /storage - name: storage - - mountPath: /dev/kvm - name: dev-kvm + - name: windows + image: dockurr/windows + env: + - name: VERSION + value: "11" + - name: RAM_SIZE + value: "4G" + - name: CPU_CORES + value: "2" + - name: DISK_SIZE + value: "64G" + ports: + - containerPort: 8006 + - containerPort: 3389 + - containerPort: 3389 + protocol: UDP + securityContext: + capabilities: + add: + - NET_ADMIN + privileged: true + volumeMounts: + - mountPath: /storage + name: storage + - mountPath: /dev/kvm + name: dev-kvm + - mountPath: /dev/net/tun + name: dev-tun + terminationGracePeriodSeconds: 120 volumes: - - name: storage - persistentVolumeClaim: - claimName: windows-pvc - - name: dev-kvm - hostPath: - path: /dev/kvm + - name: storage + persistentVolumeClaim: + claimName: windows-pvc + - hostPath: + path: /dev/kvm + name: dev-kvm + - hostPath: + path: /dev/net/tun + type: CharDevice + name: dev-tun --- apiVersion: v1 kind: Service metadata: name: windows spec: - type: NodePort + ports: + - name: tcp-8006 + port: 8006 + - name: tcp-3389 + port: 3389 + - name: udp-3389 + port: 3389 + protocol: UDP selector: name: windows - ports: - - name: tcp-8006 - protocol: TCP - port: 8006 - targetPort: 8006 - - name: tcp-3389 - protocol: TCP - port: 3389 - targetPort: 3389 - - name: udp-3389 - protocol: UDP - port: 3389 - targetPort: 3389 + type: NodePort diff --git a/readme.md b/readme.md index f8f8b95..2416bdf 100644 --- a/readme.md +++ b/readme.md @@ -37,6 +37,7 @@ services: VERSION: "11" devices: - /dev/kvm + - /dev/net/tun cap_add: - NET_ADMIN ports: @@ -49,7 +50,7 @@ services: Via Docker CLI: ```bash -docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN --stop-timeout 120 dockurr/windows +docker run -it --rm -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN --stop-timeout 120 dockurr/windows ``` Via Kubernetes: From 1f0cdc9bd14a05ce93f974a39473241feec9f65b Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 3 Dec 2024 12:12:47 +0100 Subject: [PATCH 097/290] build: Update qemu-docker to v6.11 (#946) --- Dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index b4c062d..4a9c7a3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu-docker:6.10 / / +COPY --from=qemux/qemu-docker:6.11 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" @@ -29,7 +29,6 @@ RUN set -eu && \ COPY --chmod=755 ./src /run/ COPY --chmod=755 ./assets /run/assets -ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/v0.8/src/wsdd.py /usr/sbin/wsdd ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.43-0/virtio-win-1.9.43.tar.xz /drivers.txz FROM dockurr/windows-arm:${VERSION_ARG} AS build-arm64 From c82725ec615fd3ec9358239e75fbd39a4fc45d2d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 6 Dec 2024 11:19:42 +0100 Subject: [PATCH 098/290] docs: Readme (#958) --- readme.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 2416bdf..e63e2a9 100644 --- a/readme.md +++ b/readme.md @@ -177,7 +177,9 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I run a script after installation? - To run your own script after installation, you can create a file called `install.bat` and place it in a folder together with any additional files it needs (software to be installed for example). Then bind that folder in your compose file like this: + To run your own script after installation, you can create a file called `install.bat` and place it in a folder together with any additional files it needs (software to be installed for example). + + Then bind that folder in your compose file like this: ```yaml volumes: From 6825b6a45a50513e44599cb42ce223991ad96b33 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 20 Dec 2024 15:43:37 +0100 Subject: [PATCH 099/290] fix: Update download links (#980) --- Dockerfile | 4 ++-- src/define.sh | 7 +++++-- src/mido.sh | 3 ++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4a9c7a3..3f6da48 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu-docker:6.11 / / +COPY --from=qemux/qemu-docker:6.12 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" @@ -29,7 +29,7 @@ RUN set -eu && \ COPY --chmod=755 ./src /run/ COPY --chmod=755 ./assets /run/assets -ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.43-0/virtio-win-1.9.43.tar.xz /drivers.txz +ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.44-0/virtio-win-1.9.44.tar.xz /drivers.txz FROM dockurr/windows-arm:${VERSION_ARG} AS build-arm64 FROM build-${TARGETARCH} diff --git a/src/define.sh b/src/define.sh index ef93d41..a245248 100644 --- a/src/define.sh +++ b/src/define.sh @@ -502,7 +502,10 @@ fromFile() { local file="${1,,}" local arch="${PLATFORM,,}" - case "${file// /_}" in + file="${file//-/_}" + file="${file// /_}" + + case "$file" in *"_x64_"* | *"_x64."*) arch="x64" ;; @@ -517,7 +520,7 @@ fromFile() { local add="" [[ "$arch" != "x64" ]] && add="$arch" - case "${file// /_}" in + case "$file" in "win7"* | "win_7"* | *"windows7"* | *"windows_7"* ) id="win7${arch}" ;; diff --git a/src/mido.sh b/src/mido.sh index 4804390..e03c9f5 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -620,10 +620,11 @@ getMG() { } local list="" - list=$(echo "$body" | grep -Eo "(http|https)://[a-zA-Z0-9./?=_%:-]*" | grep -i '\.iso$') + list=$(echo "$body" | xmllint --html --nonet --xpath "//a[contains(text(), '.iso')]" - 2>/dev/null) local result="" result=$(echo "$list" | grep -i "${platform}" | grep "${pattern}" | grep -i -m 1 "${locale,,}_") + result=$(echo "$result" | sed -r 's/.*href="([^"]+).*/\1/g') if [ -z "$result" ]; then if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then From 57193b0f59f8ccb1037fda6b0b5bebc6f7be7ca0 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 20 Dec 2024 18:32:26 +0100 Subject: [PATCH 100/290] fix: Follow download redirects (#981) --- src/mido.sh | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/mido.sh b/src/mido.sh index e03c9f5..12c7709 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -635,6 +635,21 @@ getMG() { return 1 fi + local domain="buzzheavier.com" + + if [[ "$result" = *"$domain"* ]]; then + result=$(curl --silent --max-time 30 --request GET --user-agent "$user_agent" --referer "$result" --head --proto =https --tlsv1.2 --http1.1 -- "$result/download") || { + handle_curl_error "$?" "$domain" + return $? + } + result=$(echo "$result" | grep -i -m 1 "hx-redirect:") + if [ -z "$result" ]; then + error "Failed to extract redirect location! Please report this at $SUPPORT/issues." + return 1 + fi + result="https://${domain}${result:13}" + fi + MG_URL="$result" return 0 } From 1081855571c1d45e3bb4cf512ab2c087e82816be Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 6 Jan 2025 19:26:45 +0100 Subject: [PATCH 101/290] feat: Update download links (#996) --- src/mido.sh | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/src/mido.sh b/src/mido.sh index 12c7709..7c6112b 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -613,7 +613,7 @@ getMG() { local body="" - [[ "$DEBUG" == [Yy1]* ]] && echo "Parsing download page: ${url}" + [[ "$DEBUG" == [Yy1]* ]] && echo "Parsing product page: ${url}" body=$(curl --silent --max-time 30 --user-agent "$user_agent" --location --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url") || { handle_curl_error "$?" "Massgrave" return $? @@ -625,8 +625,9 @@ getMG() { local result="" result=$(echo "$list" | grep -i "${platform}" | grep "${pattern}" | grep -i -m 1 "${locale,,}_") result=$(echo "$result" | sed -r 's/.*href="([^"]+).*/\1/g') + local page="$result" - if [ -z "$result" ]; then + if [ -z "$page" ]; then if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then error "No download in the $language language available for $desc!" else @@ -635,22 +636,33 @@ getMG() { return 1 fi - local domain="buzzheavier.com" + [[ "$DEBUG" == [Yy1]* ]] && echo "Parsing download page: ${page}" + result=$(curl --silent --max-time 30 --request GET --user-agent "$user_agent" --referer "$url" --head --proto =https --tlsv1.2 --http1.1 -- "$page") || { + handle_curl_error "$?" "Massgrave" + return $? + } - if [[ "$result" = *"$domain"* ]]; then - result=$(curl --silent --max-time 30 --request GET --user-agent "$user_agent" --referer "$result" --head --proto =https --tlsv1.2 --http1.1 -- "$result/download") || { - handle_curl_error "$?" "$domain" + if [[ "${result,,}" == *"content-type: text"* ]]; then + body=$(curl --silent --max-time 30 --user-agent "$user_agent" --referer "$url" --location --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$page") || { + handle_curl_error "$?" "Massgrave" return $? } - result=$(echo "$result" | grep -i -m 1 "hx-redirect:") - if [ -z "$result" ]; then - error "Failed to extract redirect location! Please report this at $SUPPORT/issues." + + list=$(echo "$body" | xmllint --html --nonet --xpath "//a[contains(@href, '.iso')]" - 2>/dev/null) + list=$(echo "$list" | sed -r 's/.*href="([^"]+).*/\1/g') + page=$(echo "$list" | sed 's/&amp;/\&/g;') + + if [ -z "$page" ]; then + if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then + error "No download in the $language language available for $desc!" + else + error "Failed to parse download link for $desc! Please report this at $SUPPORT/issues." + fi return 1 fi - result="https://${domain}${result:13}" fi - MG_URL="$result" + MG_URL="$page" return 0 } From 28f6e9c76b932124bb4ad3c7ff7d77cff4f45d3a Mon Sep 17 00:00:00 2001 From: James Nguyen <143449216+james-nguyen-ai@users.noreply.github.com> Date: Wed, 8 Jan 2025 06:38:51 -0800 Subject: [PATCH 102/290] feat: Allow symlinks in shared folder (#1001) --- src/samba.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/samba.sh b/src/samba.sh index 3137d05..7ef3d5a 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -71,6 +71,9 @@ addShare() { echo " guest account = nobody" echo " map to guest = Bad User" echo " server min protocol = NT1" + echo " follow symlinks = yes" + echo " wide links = yes" + echo " unix extensions = no" echo "" echo " # disable printing services" echo " load printers = no" From d9c7983bb5c203ec60cebc00fbfd50117f2d3d01 Mon Sep 17 00:00:00 2001 From: ncheng89 <48044818+ncheng89@users.noreply.github.com> Date: Wed, 8 Jan 2025 22:55:17 +0800 Subject: [PATCH 103/290] feat: Support more shared directories (#987) * Support more shared directories Control the sharing of more directories through environment variables instead of hard-coding more shared directories --- src/samba.sh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/samba.sh b/src/samba.sh index 7ef3d5a..e2c12c9 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -92,6 +92,13 @@ addShare "$share" "Data" "Shared" || error "Failed to create shared folder!" [ -d "/data2" ] && addShare "/data2" "Data2" "Shared" [ -d "/data3" ] && addShare "/data3" "Data3" "Shared" +IFS=',' read -r -a dirs <<< "${SHARES:-}" +for dir in "${dirs[@]}"; do + [ ! -d "$dir" ] && continue + dir_name=$(basename "$dir") + addShare "$dir" "$dir_name" "Shared $dir_name" || error "Failed to create shared folder for $dir!" +done + if ! smbd; then error "Samba daemon failed to start!" smbd -i --debug-stdout || true From bca8cb6817ae5a68004b90250a42327f31fffe25 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 15 Jan 2025 23:45:30 +0100 Subject: [PATCH 104/290] build: Update qemu-docker to v6.13 (#1010) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 3f6da48..b3eedfb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu-docker:6.12 / / +COPY --from=qemux/qemu-docker:6.13 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From d86731dc2499705d080266901ad4eed017ef5266 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 6 Feb 2025 02:12:20 +0100 Subject: [PATCH 105/290] chore(deps): update qemux/qemu-docker docker tag to v6.14 (#1024) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index b3eedfb..ad2c890 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu-docker:6.13 / / +COPY --from=qemux/qemu-docker:6.14 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From c0f5cca574c4319c65c87557c068e434d100e120 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 10 Feb 2025 00:26:49 +0100 Subject: [PATCH 106/290] docs: Add restart policy (#1028) --- readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/readme.md b/readme.md index e63e2a9..f14237d 100644 --- a/readme.md +++ b/readme.md @@ -44,6 +44,7 @@ services: - 8006:8006 - 3389:3389/tcp - 3389:3389/udp + restart: always stop_grace_period: 2m ``` From faa7c58366c53fab1aff9b648c87fc2de5b34955 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 15 Feb 2025 04:49:24 +0100 Subject: [PATCH 107/290] fix: Download links (#1035) --- Dockerfile | 2 +- src/define.sh | 76 +------------- src/install.sh | 7 +- src/mido.sh | 270 +------------------------------------------------ 4 files changed, 11 insertions(+), 344 deletions(-) diff --git a/Dockerfile b/Dockerfile index ad2c890..afab12b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu-docker:6.14 / / +COPY --from=qemux/qemu-docker:6.15 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" diff --git a/src/define.sh b/src/define.sh index a245248..32ce96b 100644 --- a/src/define.sh +++ b/src/define.sh @@ -5,6 +5,7 @@ set -Eeuo pipefail : "${HEIGHT:=""}" : "${VERIFY:=""}" : "${REGION:=""}" +: "${EDITION:=""}" : "${MANUAL:=""}" : "${REMOVE:=""}" : "${VERSION:=""}" @@ -1110,66 +1111,12 @@ isESD() { return 1 } -isMG() { - - local id="$1" - local lang="$2" - - case "${id,,}" in - "win11${PLATFORM,,}" ) - return 0 - ;; - "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval" ) - return 0 - ;; - "win11${PLATFORM,,}-ltsc" | "win11${PLATFORM,,}-enterprise-ltsc-eval" ) - return 0 - ;; - "win11${PLATFORM,,}-iot" | "win11${PLATFORM,,}-enterprise-iot-eval" ) - return 0 - ;; - "win10${PLATFORM,,}" ) - return 0 - ;; - "win10${PLATFORM,,}-enterprise" | "win10${PLATFORM,,}-enterprise-eval" ) - return 0 - ;; - "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) - return 0 - ;; - "win10${PLATFORM,,}-iot" | "win10${PLATFORM,,}-enterprise-iot-eval" ) - return 0 - ;; - "win81${PLATFORM,,}-enterprise" | "win81${PLATFORM,,}-enterprise-eval" ) - return 0 - ;; - "win2025" | "win2025-eval" | "win2022" | "win2022-eval" | "win2019" | "win2019-eval" ) - return 0 - ;; - "win2016" | "win2016-eval" | "win2012r2" | "win2012r2-eval" | "win2008r2" | "win2008r2-eval" ) - return 0 - ;; - "win7x64" | "win7x64-enterprise" | "win7x64-ultimate" | "win7x86" | "win7x86-enterprise" | "win7x86-ultimate" ) - return 0 - ;; - "winvistax64" | "winvistax64-enterprise" | "winvistax64-ultimate" | "winvistax86" | "winvistax86-enterprise" | "winvistax86-ultimate" ) - return 0 - ;; - "winxpx86" | "winxpx64" ) - return 0 - ;; - esac - - return 1 -} - validVersion() { local id="$1" local lang="$2" local url - isMG "$id" "$lang" && return 0 isESD "$id" "$lang" && return 0 isMido "$id" "$lang" && return 0 @@ -1207,27 +1154,6 @@ addFolder() { return 0 } -migrateFiles() { - - local base="$1" - local version="$2" - local file="" - - [ -f "$base" ] && return 0 - - [[ "${version,,}" == "tiny10" ]] && file="tiny10_x64_23h2.iso" - [[ "${version,,}" == "tiny11" ]] && file="tiny11_2311_x64.iso" - [[ "${version,,}" == "core11" ]] && file="tiny11_core_x64_beta_1.iso" - [[ "${version,,}" == "winxpx86" ]] && file="en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso" - [[ "${version,,}" == "winvistax64" ]] && file="en_windows_vista_sp2_x64_dvd_342267.iso" - [[ "${version,,}" == "win7x64" ]] && file="en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" - - [ ! -f "$STORAGE/$file" ] && return 0 - mv -f "$STORAGE/$file" "$base" || return 1 - - return 0 -} - prepareInstall() { local dir="$2" diff --git a/src/install.sh b/src/install.sh index e22b99e..fcbf8ef 100644 --- a/src/install.sh +++ b/src/install.sh @@ -76,8 +76,6 @@ startInstall() { BOOT="$STORAGE/$file" - ! migrateFiles "$BOOT" "$VERSION" && error "Migration failed!" && exit 57 - fi skipInstall "$BOOT" && return 1 @@ -668,6 +666,11 @@ updateXML() { sed -z "s/<AdministratorPassword>...............<Value \/>/<AdministratorPassword>\n <Value>$admin<\/Value>/g" -i "$asset" fi + if [ -n "$EDITION" ]; then + [[ "${EDITION^^}" == "CORE" ]] && EDITION="STANDARDCORE" + sed -i "s/SERVERSTANDARD<\/Value>/SERVER${EDITION^^}<\/Value>/g" "$asset" + fi + return 0 } diff --git a/src/mido.sh b/src/mido.sh index 7c6112b..4f81618 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -242,10 +242,10 @@ download_windows_eval() { [[ "$DEBUG" == [Yy1]* ]] && echo "Getting download link.." - if [[ "$enterprise_type" == "iot" ]]; then - filter="https://go.microsoft.com/fwlink/?linkid=[0-9]\+&clcid=0x[0-9a-z]\+&culture=${culture,,}&country=${country^^}" - else - filter="https://go.microsoft.com/fwlink/p/?LinkID=[0-9]\+&clcid=0x[0-9a-z]\+&culture=${culture,,}&country=${country^^}" + filter="https://go.microsoft.com/fwlink/?linkid=[0-9]\+&clcid=0x[0-9a-z]\+&culture=${culture,,}&country=${country,,}" + + if ! echo "$iso_download_page_html" | grep -io "$filter" > /dev/null; then + filter="https://go.microsoft.com/fwlink/p/?linkid=[0-9]\+&clcid=0x[0-9a-z]\+&culture=${culture,,}&country=${country,,}" fi iso_download_links=$(echo "$iso_download_page_html" | grep -io "$filter") || { @@ -429,243 +429,6 @@ getCatalog() { return 0 } -getMG() { - - local version="$1" - local lang="$2" - local desc="$3" - - local locale="" - local culture="" - local language="" - local user_agent="" - - user_agent=$(get_agent) - language=$(getLanguage "$lang" "desc") - culture=$(getLanguage "$lang" "culture") - - local msg="Requesting download link from massgrave.dev..." - info "$msg" && html "$msg" - - local pattern="" - local locale="${culture,,}" - local platform="${PLATFORM,,}" - local url="https://massgrave.dev/" - - if [[ "${PLATFORM,,}" != "arm64" ]]; then - - case "${version,,}" in - "win11${PLATFORM,,}" ) - url+="windows_11_links" - pattern="consumer" - ;; - "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval" ) - url+="windows_11_links" - pattern="business" - ;; - "win11${PLATFORM,,}-ltsc" | "win11${PLATFORM,,}-enterprise-ltsc-eval" ) - url+="windows_ltsc_links" - pattern="11_enterprise_ltsc" - ;; - "win11${PLATFORM,,}-iot" | "win11${PLATFORM,,}-enterprise-iot-eval" ) - url+="windows_ltsc_links" - pattern="11_iot" - ;; - "win10${PLATFORM,,}" ) - url+="windows_10_links" - pattern="consumer" - ;; - "win10${PLATFORM,,}-enterprise" | "win10${PLATFORM,,}-enterprise-eval" ) - url+="windows_10_links" - pattern="business" - ;; - "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) - url+="windows_ltsc_links" - pattern="10_enterprise_ltsc" - ;; - "win10${PLATFORM,,}-iot" | "win10${PLATFORM,,}-enterprise-iot-eval" ) - url+="windows_ltsc_links" - pattern="10_iot" - ;; - "win81${PLATFORM,,}-enterprise" | "win81${PLATFORM,,}-enterprise-eval" ) - url+="windows_8.1_links" - pattern="8.1_enterprise" - locale=$(getLanguage "$lang" "code") - [[ "$locale" == "sr" ]] && locale="sr-latn" - ;; - "win2025" | "win2025-eval" ) - url+="windows_server_links" - pattern="server_2025" - ;; - "win2022" | "win2022-eval" ) - url+="windows_server_links" - pattern="server_2022" - ;; - "win2019" | "win2019-eval" ) - url+="windows_server_links" - pattern="server_2019" - ;; - "win2016" | "win2016-eval" ) - url+="windows_server_links" - pattern="server_2016" - locale=$(getLanguage "$lang" "code") - [[ "$locale" == "hk" ]] && locale="ct" - [[ "$locale" == "tw" ]] && locale="ct" - ;; - "win2012r2" | "win2012r2-eval" ) - url+="windows_server_links" - pattern="server_2012_r2" - locale=$(getLanguage "$lang" "code") - ;; - "win2008r2" | "win2008r2-eval" ) - url+="windows_server_links" - pattern="server_2008_r2" - locale=$(getLanguage "$lang" "code") - ;; - "win7x64" | "win7x64-enterprise" ) - url+="windows_7_links" - pattern="enterprise" - locale=$(getLanguage "$lang" "code") - ;; - "win7x64-ultimate" ) - url+="windows_7_links" - pattern="ultimate" - locale=$(getLanguage "$lang" "code") - ;; - "win7x86" | "win7x86-enterprise" ) - platform="x86" - url+="windows_7_links" - pattern="enterprise" - locale=$(getLanguage "$lang" "code") - ;; - "win7x86-ultimate" ) - platform="x86" - url+="windows_7_links" - pattern="ultimate" - locale=$(getLanguage "$lang" "code") - ;; - "winvistax64" | "winvistax64-enterprise" ) - url+="windows_vista_links" - pattern="enterprise" - locale=$(getLanguage "$lang" "code") - ;; - "winvistax64-ultimate" ) - url+="windows_vista_links" - pattern="sp2" - locale=$(getLanguage "$lang" "code") - ;; - "winvistax86" | "winvistax86-enterprise" ) - platform="x86" - url+="windows_vista_links" - pattern="enterprise" - locale=$(getLanguage "$lang" "code") - ;; - "winvistax86-ultimate" ) - platform="x86" - url+="windows_vista_links" - pattern="sp2" - locale=$(getLanguage "$lang" "code") - ;; - "winxpx86" ) - platform="x86" - url+="windows_xp_links" - pattern="xp" - locale=$(getLanguage "$lang" "code") - [[ "$locale" == "pt" ]] && locale="pt-br" - [[ "$locale" == "pp" ]] && locale="pt-pt" - [[ "$locale" == "cn" ]] && locale="zh-hans" - [[ "$locale" == "hk" ]] && locale="zh-hk" - [[ "$locale" == "tw" ]] && locale="zh-tw" - ;; - "winxpx64" ) - url+="windows_xp_links" - pattern="xp" - locale=$(getLanguage "$lang" "code") - ;; - esac - - else - - case "${version,,}" in - "win11${PLATFORM,,}" | "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval" ) - url+="windows_arm_links" - pattern="11_business" - ;; - "win11${PLATFORM,,}-ltsc" | "win11${PLATFORM,,}-enterprise-ltsc-eval" ) - url+="windows_arm_links" - pattern="11_iot_enterprise_ltsc" - ;; - "win10${PLATFORM,,}" | "win10${PLATFORM,,}-enterprise" | "win10${PLATFORM,,}-enterprise-eval" ) - url+="windows_arm_links" - pattern="Pro_10" - locale="$language" - [[ "$locale" == "Chinese" ]] && locale="ChnSimp" - [[ "$locale" == "Chinese HK" ]] && locale="ChnTrad" - [[ "$locale" == "Chinese TW" ]] && locale="ChnTrad" - ;; - "win10${PLATFORM,,}-ltsc" | "win10${PLATFORM,,}-enterprise-ltsc-eval" ) - url+="windows_arm_links" - pattern="10_iot_enterprise_ltsc" - ;; - esac - - fi - - local body="" - - [[ "$DEBUG" == [Yy1]* ]] && echo "Parsing product page: ${url}" - body=$(curl --silent --max-time 30 --user-agent "$user_agent" --location --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$url") || { - handle_curl_error "$?" "Massgrave" - return $? - } - - local list="" - list=$(echo "$body" | xmllint --html --nonet --xpath "//a[contains(text(), '.iso')]" - 2>/dev/null) - - local result="" - result=$(echo "$list" | grep -i "${platform}" | grep "${pattern}" | grep -i -m 1 "${locale,,}_") - result=$(echo "$result" | sed -r 's/.*href="([^"]+).*/\1/g') - local page="$result" - - if [ -z "$page" ]; then - if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then - error "No download in the $language language available for $desc!" - else - error "Failed to parse download link for $desc! Please report this at $SUPPORT/issues." - fi - return 1 - fi - - [[ "$DEBUG" == [Yy1]* ]] && echo "Parsing download page: ${page}" - result=$(curl --silent --max-time 30 --request GET --user-agent "$user_agent" --referer "$url" --head --proto =https --tlsv1.2 --http1.1 -- "$page") || { - handle_curl_error "$?" "Massgrave" - return $? - } - - if [[ "${result,,}" == *"content-type: text"* ]]; then - body=$(curl --silent --max-time 30 --user-agent "$user_agent" --referer "$url" --location --max-filesize 1M --fail --proto =https --tlsv1.2 --http1.1 -- "$page") || { - handle_curl_error "$?" "Massgrave" - return $? - } - - list=$(echo "$body" | xmllint --html --nonet --xpath "//a[contains(@href, '.iso')]" - 2>/dev/null) - list=$(echo "$list" | sed -r 's/.*href="([^"]+).*/\1/g') - page=$(echo "$list" | sed 's/&amp;/\&/g;') - - if [ -z "$page" ]; then - if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then - error "No download in the $language language available for $desc!" - else - error "Failed to parse download link for $desc! Please report this at $SUPPORT/issues." - fi - return 1 - fi - fi - - MG_URL="$page" - return 0 -} - getESD() { local dir="$1" @@ -950,31 +713,6 @@ downloadImage() { done - if isMG "$version" "$lang"; then - - if [[ "$tried" != "n" ]]; then - info "Failed to download $desc, will try a diferent method now..." - fi - - tried="y" - success="n" - - if getMG "$version" "$lang" "$desc"; then - success="y" - else - info "$msg" && html "$msg" && sleep "$delay" - getMG "$version" "$lang" "$desc" && success="y" - fi - - if [[ "$success" == "y" ]]; then - downloadFile "$iso" "$MG_URL" "" "" "$lang" "$desc" && return 0 - info "$msg" && html "$msg" && sleep "$delay" - downloadFile "$iso" "$MG_URL" "" "" "$lang" "$desc" && return 0 - rm -f "$iso" - fi - - fi - return 1 } From e6d7495bace8cd7526a8768b3a49dd4c2bdcf473 Mon Sep 17 00:00:00 2001 From: krzysiuu1998 <54783272+krzysiuu1998@users.noreply.github.com> Date: Mon, 17 Feb 2025 09:07:25 +0100 Subject: [PATCH 108/290] fix: Update compose.yml (#1040) --- compose.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/compose.yml b/compose.yml index f305849..c6721b2 100644 --- a/compose.yml +++ b/compose.yml @@ -13,4 +13,5 @@ services: - 8006:8006 - 3389:3389/tcp - 3389:3389/udp + restart: always stop_grace_period: 2m From 61d7e0d3beb06e9ddf71ffb16fc00299f154f0b0 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 17 Feb 2025 18:59:40 +0100 Subject: [PATCH 109/290] feat: Fallback to Windows 11 if version unknown (#1042) --- src/define.sh | 2 ++ src/install.sh | 13 ++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/define.sh b/src/define.sh index 32ce96b..b4d040a 100644 --- a/src/define.sh +++ b/src/define.sh @@ -593,7 +593,9 @@ fromName() { *"windows 7"* ) id="win7${arch}" ;; *"windows 8"* ) id="win81${arch}" ;; *"windows 10"* ) id="win10${arch}" ;; + *"optimum 10"* ) id="win10${arch}" ;; *"windows 11"* ) id="win11${arch}" ;; + *"optimum 11"* ) id="win11${arch}" ;; *"windows vista"* ) id="winvista${arch}" ;; *"server 2025"* ) id="win2025${add}" ;; *"server 2022"* ) id="win2022${add}" ;; diff --git a/src/install.sh b/src/install.sh index fcbf8ef..7f10eec 100644 --- a/src/install.sh +++ b/src/install.sh @@ -680,8 +680,13 @@ addDriver() { local path="$2" local target="$3" local driver="$4" + local desc="" local folder="" + if [ -z "$id" ]; then + warn "no Windows version specified for \"$driver\" driver!" && return 0 + fi + case "${id,,}" in "win7x86"* ) folder="w7/x86" ;; "win7x64"* ) folder="w7/amd64" ;; @@ -701,7 +706,8 @@ addDriver() { esac if [ -z "$folder" ]; then - warn "no \"$driver\" driver found for \"$DETECTED\" !" && return 0 + desc=$(printVersion "$id" "$id") + warn "no \"$driver\" driver available for \"$desc\" !" && return 0 fi [ ! -d "$path/$driver/$folder" ] && return 0 @@ -734,6 +740,11 @@ addDrivers() { local msg="Adding drivers to image..." info "$msg" && html "$msg" + if [ -z "$version" ]; then + version="win11x64" + warn "Windows version unknown, falling back to Windows 11 drivers..." + fi + if ! bsdtar -xf /drivers.txz -C "$drivers"; then error "Failed to extract drivers from archive!" && return 1 fi From b57d34e11edb6ce306b29664b6adccc564aa8fcd Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 22 Feb 2025 09:53:17 +0100 Subject: [PATCH 110/290] fix: Update download links (#1051) --- src/define.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/define.sh b/src/define.sh index b4d040a..0af6df7 100644 --- a/src/define.sh +++ b/src/define.sh @@ -695,16 +695,16 @@ getMido() { sum="b56b911bf18a2ceaeb3904d87e7c770bdf92d3099599d61ac2497b91bf190b11" ;; "win11x64-enterprise-eval" ) - size=6209064960 - sum="c8dbc96b61d04c8b01faf6ce0794fdf33965c7b350eaa3eb1e6697019902945c" + size=4295096320 + sum="dad633276073f14f3e0373ef7e787569e216d54942ce522b39451c8f2d38ad43" ;; "win11x64-enterprise-ltsc-eval" ) - size=4428627968 - sum="8abf91c9cd408368dc73aab3425d5e3c02dae74900742072eb5c750fc637c195" + size=5060020224 + sum="2cee70bd183df42b92a2e0da08cc2bb7a2a9ce3a3841955a012c0f77aeb3cb29" ;; "win11x64-enterprise-iot-eval" ) - size=4428627968 - sum="8abf91c9cd408368dc73aab3425d5e3c02dae74900742072eb5c750fc637c195" + size=5060020224 + sum="2cee70bd183df42b92a2e0da08cc2bb7a2a9ce3a3841955a012c0f77aeb3cb29" ;; "win10x64" ) size=6140975104 From d799079040b7e65dd64d055aaa80daa23f5b835c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 22 Feb 2025 10:02:48 +0100 Subject: [PATCH 111/290] docs: Readme (#1052) --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index f14237d..4d37b40 100644 --- a/readme.md +++ b/readme.md @@ -98,8 +98,8 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas | **Value** | **Version** | **Size** | |---|---|---| | `11` | Windows 11 Pro | 5.4 GB | - | `11l` | Windows 11 LTSC | 4.2 GB | - | `11e` | Windows 11 Enterprise | 5.8 GB | + | `11l` | Windows 11 LTSC | 4.7 GB | + | `11e` | Windows 11 Enterprise | 4.0 GB | |||| | `10` | Windows 10 Pro | 5.7 GB | | `10l` | Windows 10 LTSC | 4.6 GB | From 32b92cc03aad0aa0588716a6a3535f6cc04aec7d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 24 Feb 2025 04:15:49 +0100 Subject: [PATCH 112/290] fix: Update download links (#1053) --- Dockerfile | 2 +- src/define.sh | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index afab12b..ae25a43 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu-docker:6.15 / / +COPY --from=qemux/qemu-docker:6.16 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" diff --git a/src/define.sh b/src/define.sh index 0af6df7..c2ce5b3 100644 --- a/src/define.sh +++ b/src/define.sh @@ -773,9 +773,9 @@ getLink1() { case "${id,,}" in "win11x64" | "win11x64-enterprise" | "win11x64-enterprise-eval" ) - size=5946128384 - sum="5bb1459034f50766ee480d895d751af73a4af30814240ae32ebc5633546a5af7" - url="11/en-us_windows_11_23h2_x64.iso" + size=5332989952 + sum="aa1ad990f930d907b7a34ea897abbb0dfbe47552ca8acc146f92e40381839e05" + url="11/en-us_windows_11_24h2_x64.iso" ;; "win11x64-iot" | "win11x64-enterprise-iot-eval" ) [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 From 06434c02f4bd0de122d4218c3986429bcb892fa9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 24 Feb 2025 04:16:07 +0100 Subject: [PATCH 113/290] chore(deps): update qemux/qemu-docker docker tag to v6.16 (#1054) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> From 009c2c7deb93b11a7c3e9ff48ba0c9b0e41918fa Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 25 Feb 2025 06:05:42 +0100 Subject: [PATCH 114/290] build: Update qemu-docker to v6.17 (#1056) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index ae25a43..4cbfad6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu-docker:6.16 / / +COPY --from=qemux/qemu-docker:6.17 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From 63a9d10a27a1d61975c82cbcdaa52375b315f635 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 25 Feb 2025 15:15:48 +0100 Subject: [PATCH 115/290] feat: Make app name configurable (#1058) --- src/entry.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/entry.sh b/src/entry.sh index b037cdc..be6335a 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -1,10 +1,9 @@ #!/usr/bin/env bash set -Eeuo pipefail +: "${APP:="Windows"}" : "${BOOT_MODE:="windows"}" - -APP="Windows" -SUPPORT="https://github.com/dockur/windows" +: "${SUPPORT:="https://github.com/dockur/windows"}" cd /run From c9482fe3f0ded155e79b138ef9217a0f33b286a3 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 26 Feb 2025 22:55:28 +0100 Subject: [PATCH 116/290] build: Update qemu-docker to v6.18 (#1065) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 4cbfad6..b794e82 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu-docker:6.17 / / +COPY --from=qemux/qemu:6.18 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From 5ae6ecbe8562120bc7194fbc64e6a4f302bf0b4c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 26 Feb 2025 23:15:13 +0100 Subject: [PATCH 117/290] feat: Update download links (#1066) --- src/define.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/define.sh b/src/define.sh index c2ce5b3..98a63c1 100644 --- a/src/define.sh +++ b/src/define.sh @@ -790,8 +790,8 @@ getLink1() { url="11/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" ;; "win10x64" | "win10x64-enterprise" | "win10x64-enterprise-eval" ) - size=5623582720 - sum="57371545d752a79a8a8b163b209c7028915da661de83516e06ddae913290a855" + size=5535252480 + sum="557871965263d0fd0a1ea50b5d0d0d7cb04a279148ca905c1c675c9bc0d5486c" url="10/en-us_windows_10_22h2_x64.iso" ;; "win10x64-iot" | "win10x64-enterprise-iot-eval" ) From e16af78828b0f9cf72972d455a6a9d36d3366065 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 28 Feb 2025 04:07:57 +0100 Subject: [PATCH 118/290] feat: Check path to custom .iso (#1069) --- src/install.sh | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/install.sh b/src/install.sh index 7f10eec..c1ed86a 100644 --- a/src/install.sh +++ b/src/install.sh @@ -200,10 +200,16 @@ abortInstall() { detectCustom() { local file base + local fname="custom.iso" + CUSTOM="" - file=$(find / -maxdepth 1 -type f -iname custom.iso | head -n 1) - [ ! -s "$file" ] && file=$(find "$STORAGE" -maxdepth 1 -type f -iname custom.iso | head -n 1) + if [ -d "/$fname" ]; then + error "The file /$fname has an invalid path!" && return 1 + fi + + file=$(find / -maxdepth 1 -type f -iname "$fname" | head -n 1) + [ ! -s "$file" ] && file=$(find "$STORAGE" -maxdepth 1 -type f -iname "$fname" | head -n 1) if [ ! -s "$file" ] && [[ "${VERSION,,}" != "http"* ]]; then base=$(basename "$VERSION") @@ -487,6 +493,10 @@ setXML() { local file="/custom.xml" + if [ -d "$file" ]; then + warn "The file $file has an invalid path!" + fi + [ ! -f "$file" ] || [ ! -s "$file" ] && file="$STORAGE/custom.xml" [ ! -f "$file" ] || [ ! -s "$file" ] && file="/run/assets/custom.xml" [ ! -f "$file" ] || [ ! -s "$file" ] && file="$1" From 2296e3dbfa7b529b22d3559fbefda554ef163ac6 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 1 Mar 2025 14:00:16 +0100 Subject: [PATCH 119/290] docs: Clarify environment variables (#1072) --- readme.md | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/readme.md b/readme.md index 4d37b40..b357415 100644 --- a/readme.md +++ b/readme.md @@ -146,7 +146,9 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I share files with the host? - Open 'File Explorer' and click on the 'Network' section, you will see a computer called `host.lan`. Double-click it and it will show a folder called `Data`, which can be bound to any folder on your host via the compose file: + Open 'File Explorer' and click on the 'Network' section, you will see a computer called `host.lan`. + + Double-click it and it will show a folder called `Data`, which can be bound to any folder on your host via the compose file: ```yaml volumes: @@ -160,7 +162,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I install a custom image? - In order to download an unsupported ISO image that is not selectable from the list above, specify the URL of that ISO in the `VERSION` environment variable, for example: + In order to download an unsupported ISO image, specify its URL in the `VERSION` environment variable: ```yaml environment: @@ -174,7 +176,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas - /home/user/example.iso:/custom.iso ``` - Replace the example path `/home/user/example.iso` with the filename of your desired ISO file, the value of `VERSION` will be ignored in this case. + Replace the example path `/home/user/example.iso` with the filename of your desired ISO file. The value of `VERSION` will be ignored in this case. ### How do I run a script after installation? @@ -214,9 +216,9 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I configure the username and password? - By default, a user called `Docker` is created during the installation, with an empty password. + By default, a user called `Docker` (with an empty password) is created during installation. - If you want to use different credentials, you can change them in your compose file: + If you want to use different credentials, you can configure them (only BEFORE installation) in your compose file: ```yaml environment: @@ -226,7 +228,9 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I select the Windows language? - By default, the English version of Windows will be downloaded. But you can add the `LANGUAGE` environment variable to your compose file, in order to specify an alternative language: + By default, the English version of Windows will be downloaded. + + But before installation you can add the `LANGUAGE` environment variable to your compose file, in order to specify an alternative language: ```yaml environment: @@ -237,7 +241,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I select the keyboard layout? - If you want to use a keyboard layout or locale that is not the default for your selected language, you can add the `KEYBOARD` and `REGION` variables with a culture code, like this: + If you want to use a keyboard layout or locale that is not the default for your selected language, before installation you can add `KEYBOARD` and `REGION` variables like this: ```yaml environment: @@ -245,10 +249,6 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas KEYBOARD: "en-US" ``` -> [!NOTE] -> Changing these values will have no effect after the installation has been performed already. Use the control panel inside Windows in that case. -> - ### How do I connect using RDP? The web-viewer is mainly meant to be used during installation, as its picture quality is low, and it has no audio or clipboard for example. @@ -298,7 +298,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas After configuring the container for [macvlan](#how-do-i-assign-an-individual-ip-address-to-the-container), it is possible for Windows to become part of your home network by requesting an IP from your router, just like a real PC. - To enable this mode, add the following lines to your compose file: + To enable this mode, in which the container and Windows will have separate IP addresses, add the following lines to your compose file: ```yaml environment: @@ -309,9 +309,6 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas - 'c *:* rwm' ``` -> [!NOTE] -> In this mode, the container and Windows will each have their own separate IPs. - ### How do I add multiple disks? To create additional disks, modify your compose file like this: @@ -348,8 +345,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas - /dev/bus/usb ``` -> [!IMPORTANT] -> If the device is a USB disk drive, please wait until after the installation is completed before connecting it. Otherwise the installation may fail, as the order of the disks can get rearranged. + If the device is a USB disk drive, please wait until after the installation is fully completed before connecting it. Otherwise the installation may fail, as the order of the disks can get rearranged. ### How do I verify if my system supports KVM? From d5b891f4fb196fa86bf24c88ab6ce979ecf5691f Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 3 Mar 2025 12:33:38 +0100 Subject: [PATCH 120/290] build: Update qemu-docker to v6.19 (#1076) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index b794e82..c535474 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:6.18 / / +COPY --from=qemux/qemu:6.19 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From 974d087466ce7626955dbebfa1bc16a5948e60e5 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 3 Mar 2025 12:34:10 +0100 Subject: [PATCH 121/290] docs: Readme (#1077) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index b357415..14fa7ef 100644 --- a/readme.md +++ b/readme.md @@ -189,7 +189,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas - /home/user/example:/oem ``` - The example folder `/home/user/example` will be copied to `C:\OEM` during installation and the containing `install.bat` will be executed during the last step. + The example folder `/home/user/example` will be copied to `C:\OEM` and the containing `install.bat` will be executed during the last step of the automatic installation. ### How do I perform a manual installation? From 22d318a9b414d9f588047d4281b7ac26e5686112 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 4 Mar 2025 15:57:44 +0100 Subject: [PATCH 122/290] fix: Samba permissions (#1082) --- Dockerfile | 2 +- src/samba.sh | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index c535474..3cafbd5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:6.19 / / +COPY --from=qemux/qemu:6.20 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" diff --git a/src/samba.sh b/src/samba.sh index e2c12c9..bdf232b 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -99,6 +99,10 @@ for dir in "${dirs[@]}"; do addShare "$dir" "$dir_name" "Shared $dir_name" || error "Failed to create shared folder for $dir!" done +# Fix Samba permissions +[ -d /run/samba/msg.lock ] && chmod -R 0755 /run/samba/msg.lock +[ -d /var/log/samba/cores ] && chmod -R 0700 /var/log/samba/cores + if ! smbd; then error "Samba daemon failed to start!" smbd -i --debug-stdout || true From 3cf95f2a0eca0e82ca7f64d0ccba955d4f53b6a7 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 5 Mar 2025 05:32:25 +0100 Subject: [PATCH 123/290] feat: Remove migrations (#1083) --- src/install.sh | 34 ---------------------------------- 1 file changed, 34 deletions(-) diff --git a/src/install.sh b/src/install.sh index c1ed86a..953653e 100644 --- a/src/install.sh +++ b/src/install.sh @@ -1012,40 +1012,6 @@ bootWindows() { return 0 fi - # Migrations - - [[ "${PLATFORM,,}" != "x64" ]] && return 0 - - if [ -f "$STORAGE/windows.old" ]; then - MACHINE=$(<"$STORAGE/windows.old") - [ -z "$MACHINE" ] && MACHINE="q35" - BOOT_MODE="windows_legacy" - echo "$BOOT_MODE" > "$STORAGE/windows.mode" - return 0 - fi - - local creation="1.10" - local minimal="2.14" - - if [ -f "$STORAGE/windows.ver" ]; then - creation=$(<"$STORAGE/windows.ver") - [[ "${creation}" != *"."* ]] && creation="$minimal" - fi - - # Force secure boot on installs created prior to v2.14 - if (( $(echo "$creation < $minimal" | bc -l) )); then - if [[ "${BOOT_MODE,,}" == "windows" ]]; then - BOOT_MODE="windows_secure" - echo "$BOOT_MODE" > "$STORAGE/windows.mode" - if [ -f "$STORAGE/windows.rom" ] && [ ! -f "$STORAGE/$BOOT_MODE.rom" ]; then - mv -f "$STORAGE/windows.rom" "$STORAGE/$BOOT_MODE.rom" - fi - if [ -f "$STORAGE/windows.vars" ] && [ ! -f "$STORAGE/$BOOT_MODE.vars" ]; then - mv -f "$STORAGE/windows.vars" "$STORAGE/$BOOT_MODE.vars" - fi - fi - fi - return 0 } From 8be35e16d7f7351bf0f53c61f8bb181a45566476 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 5 Mar 2025 06:19:25 +0100 Subject: [PATCH 124/290] fix: Remove broken links (#1084) --- src/define.sh | 13 +------------ src/install.sh | 8 ++++---- src/mido.sh | 49 +------------------------------------------------ 3 files changed, 6 insertions(+), 64 deletions(-) diff --git a/src/define.sh b/src/define.sh index 98a63c1..1be1d9e 100644 --- a/src/define.sh +++ b/src/define.sh @@ -59,7 +59,7 @@ parseVersion() { VERSION="win81x64" ;; "8e" | "81e" | "8.1e" | "win8e" | "win81e" | "windows 8e" ) - VERSION="win81x64-enterprise-eval" + VERSION="win81x64-enterprise" ;; "7" | "7e" | "win7" | "win7e" | "windows7" | "windows 7" ) VERSION="win7x64" @@ -665,9 +665,6 @@ switchEdition() { "win10${PLATFORM,,}-enterprise-eval" ) DETECTED="win10${PLATFORM,,}-enterprise" ;; - "win81${PLATFORM,,}-enterprise-eval" ) - DETECTED="win81${PLATFORM,,}-enterprise" - ;; "win2025-eval" ) DETECTED="win2025" ;; "win2022-eval" ) DETECTED="win2022" ;; "win2019-eval" ) DETECTED="win2019" ;; @@ -718,10 +715,6 @@ getMido() { size=4898582528 sum="e4ab2e3535be5748252a8d5d57539a6e59be8d6726345ee10e7afd2cb89fefb5" ;; - "win81x64-enterprise-eval" ) - size=3961473024 - sum="2dedd44c45646c74efc5a028f65336027e14a56f76686a4631cf94ffe37c72f2" - ;; "win2025-eval" ) size=5307996160 sum="16442d1c0509bcbb25b715b1b322a15fb3ab724a42da0f384b9406ca1c124ed4" @@ -742,10 +735,6 @@ getMido() { size=4542291968 sum="6612b5b1f53e845aacdf96e974bb119a3d9b4dcb5b82e65804ab7e534dc7b4d5" ;; - "win2008r2" ) - size=3166840832 - sum="30832ad76ccfa4ce48ccb936edefe02079d42fb1da32201bf9e3a880c8ed6312" - ;; esac case "${ret,,}" in diff --git a/src/install.sh b/src/install.sh index 953653e..2a322be 100644 --- a/src/install.sh +++ b/src/install.sh @@ -1006,10 +1006,10 @@ bootWindows() { if [ -s "$STORAGE/windows.mode" ] && [ -f "$STORAGE/windows.mode" ]; then BOOT_MODE=$(<"$STORAGE/windows.mode") - if [ -s "$STORAGE/windows.old" ] && [ -f "$STORAGE/windows.old" ]; then - [[ "${PLATFORM,,}" == "x64" ]] && MACHINE=$(<"$STORAGE/windows.old") - fi - return 0 + fi + + if [ -s "$STORAGE/windows.old" ] && [ -f "$STORAGE/windows.old" ]; then + [[ "${PLATFORM,,}" == "x64" ]] && MACHINE=$(<"$STORAGE/windows.old") fi return 0 diff --git a/src/mido.sh b/src/mido.sh index 4f81618..19d1257 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -310,7 +310,7 @@ getWindows() { info "$msg" && html "$msg" case "${version,,}" in - "win2008r2" | "win81${PLATFORM,,}-enterprise"* | "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* ) + "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* ) if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then error "No download in the $language language available for $edition!" MIDO_URL="" && return 1 @@ -338,56 +338,9 @@ getWindows() { "win2025-eval" | "win2022-eval" | "win2019-eval" | "win2016-eval" | "win2012r2-eval" ) download_windows_eval "$version" "$lang" "$edition" && return 0 ;; - "win81${PLATFORM,,}-enterprise"* | "win2008r2" ) - ;; * ) error "Invalid VERSION specified, value \"$version\" is not recognized!" ;; esac - if [[ "${PLATFORM,,}" != "x64" ]]; then - MIDO_URL="" - return 1 - fi - - if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then - MIDO_URL="" - return 1 - fi - - case "${version,,}" in - "win81${PLATFORM,,}-enterprise"* ) - MIDO_URL="https://download.microsoft.com/download/B/9/9/B999286E-0A47-406D-8B3D-5B5AD7373A4A/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_ENTERPRISE_EVAL_EN-US-IR3_CENA_X64FREE_EN-US_DV9.ISO" - return 0 - ;; - "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* ) - MIDO_URL="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_CLIENT_IOT_LTSC_EVAL_x64FRE_en-us.iso" - return 0 - ;; - "win2025-eval" ) - MIDO_URL="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_SERVER_EVAL_x64FRE_en-us.iso" - return 0 - ;; - "win2022-eval" ) - MIDO_URL="https://software-static.download.prss.microsoft.com/sg/download/888969d5-f34g-4e03-ac9d-1f9786c66749/SERVER_EVAL_x64FRE_en-us.iso" - return 0 - ;; - "win2019-eval" ) - MIDO_URL="https://software-download.microsoft.com/download/pr/17763.737.190906-2324.rs5_release_svc_refresh_SERVER_EVAL_x64FRE_en-us_1.iso" - return 0 - ;; - "win2016-eval" ) - MIDO_URL="https://software-download.microsoft.com/download/pr/Windows_Server_2016_Datacenter_EVAL_en-us_14393_refresh.ISO" - return 0 - ;; - "win2012r2-eval" ) - MIDO_URL="https://download.microsoft.com/download/6/2/A/62A76ABB-9990-4EFC-A4FE-C7D698DAEB96/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_SERVER_EVAL_EN-US-IR3_SSS_X64FREE_EN-US_DV9.ISO" - return 0 - ;; - "win2008r2" ) - MIDO_URL="https://download.microsoft.com/download/4/1/D/41DEA7E0-B30D-4012-A1E3-F24DC03BA1BB/7601.17514.101119-1850_x64fre_server_eval_en-us-GRMSXEVAL_EN_DVD.iso" - return 0 - ;; - esac - MIDO_URL="" return 1 } From 57ab7eb84f84b60c7a6a968deeaefc1149602484 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 5 Mar 2025 06:51:35 +0100 Subject: [PATCH 125/290] fix: Update download links (#1085) --- src/define.sh | 13 ++++++++++++- src/mido.sh | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 60 insertions(+), 2 deletions(-) diff --git a/src/define.sh b/src/define.sh index 1be1d9e..98a63c1 100644 --- a/src/define.sh +++ b/src/define.sh @@ -59,7 +59,7 @@ parseVersion() { VERSION="win81x64" ;; "8e" | "81e" | "8.1e" | "win8e" | "win81e" | "windows 8e" ) - VERSION="win81x64-enterprise" + VERSION="win81x64-enterprise-eval" ;; "7" | "7e" | "win7" | "win7e" | "windows7" | "windows 7" ) VERSION="win7x64" @@ -665,6 +665,9 @@ switchEdition() { "win10${PLATFORM,,}-enterprise-eval" ) DETECTED="win10${PLATFORM,,}-enterprise" ;; + "win81${PLATFORM,,}-enterprise-eval" ) + DETECTED="win81${PLATFORM,,}-enterprise" + ;; "win2025-eval" ) DETECTED="win2025" ;; "win2022-eval" ) DETECTED="win2022" ;; "win2019-eval" ) DETECTED="win2019" ;; @@ -715,6 +718,10 @@ getMido() { size=4898582528 sum="e4ab2e3535be5748252a8d5d57539a6e59be8d6726345ee10e7afd2cb89fefb5" ;; + "win81x64-enterprise-eval" ) + size=3961473024 + sum="2dedd44c45646c74efc5a028f65336027e14a56f76686a4631cf94ffe37c72f2" + ;; "win2025-eval" ) size=5307996160 sum="16442d1c0509bcbb25b715b1b322a15fb3ab724a42da0f384b9406ca1c124ed4" @@ -735,6 +742,10 @@ getMido() { size=4542291968 sum="6612b5b1f53e845aacdf96e974bb119a3d9b4dcb5b82e65804ab7e534dc7b4d5" ;; + "win2008r2" ) + size=3166840832 + sum="30832ad76ccfa4ce48ccb936edefe02079d42fb1da32201bf9e3a880c8ed6312" + ;; esac case "${ret,,}" in diff --git a/src/mido.sh b/src/mido.sh index 19d1257..4f81618 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -310,7 +310,7 @@ getWindows() { info "$msg" && html "$msg" case "${version,,}" in - "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* ) + "win2008r2" | "win81${PLATFORM,,}-enterprise"* | "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* ) if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then error "No download in the $language language available for $edition!" MIDO_URL="" && return 1 @@ -338,9 +338,56 @@ getWindows() { "win2025-eval" | "win2022-eval" | "win2019-eval" | "win2016-eval" | "win2012r2-eval" ) download_windows_eval "$version" "$lang" "$edition" && return 0 ;; + "win81${PLATFORM,,}-enterprise"* | "win2008r2" ) + ;; * ) error "Invalid VERSION specified, value \"$version\" is not recognized!" ;; esac + if [[ "${PLATFORM,,}" != "x64" ]]; then + MIDO_URL="" + return 1 + fi + + if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then + MIDO_URL="" + return 1 + fi + + case "${version,,}" in + "win81${PLATFORM,,}-enterprise"* ) + MIDO_URL="https://download.microsoft.com/download/B/9/9/B999286E-0A47-406D-8B3D-5B5AD7373A4A/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_ENTERPRISE_EVAL_EN-US-IR3_CENA_X64FREE_EN-US_DV9.ISO" + return 0 + ;; + "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* ) + MIDO_URL="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_CLIENT_IOT_LTSC_EVAL_x64FRE_en-us.iso" + return 0 + ;; + "win2025-eval" ) + MIDO_URL="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_SERVER_EVAL_x64FRE_en-us.iso" + return 0 + ;; + "win2022-eval" ) + MIDO_URL="https://software-static.download.prss.microsoft.com/sg/download/888969d5-f34g-4e03-ac9d-1f9786c66749/SERVER_EVAL_x64FRE_en-us.iso" + return 0 + ;; + "win2019-eval" ) + MIDO_URL="https://software-download.microsoft.com/download/pr/17763.737.190906-2324.rs5_release_svc_refresh_SERVER_EVAL_x64FRE_en-us_1.iso" + return 0 + ;; + "win2016-eval" ) + MIDO_URL="https://software-download.microsoft.com/download/pr/Windows_Server_2016_Datacenter_EVAL_en-us_14393_refresh.ISO" + return 0 + ;; + "win2012r2-eval" ) + MIDO_URL="https://download.microsoft.com/download/6/2/A/62A76ABB-9990-4EFC-A4FE-C7D698DAEB96/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_SERVER_EVAL_EN-US-IR3_SSS_X64FREE_EN-US_DV9.ISO" + return 0 + ;; + "win2008r2" ) + MIDO_URL="https://download.microsoft.com/download/4/1/D/41DEA7E0-B30D-4012-A1E3-F24DC03BA1BB/7601.17514.101119-1850_x64fre_server_eval_en-us-GRMSXEVAL_EN_DVD.iso" + return 0 + ;; + esac + MIDO_URL="" return 1 } From f7a086a8d4f915d4a55b2d220a9bb29e260b6ee9 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 5 Mar 2025 09:24:05 +0100 Subject: [PATCH 126/290] feat: Additional download mirrors (#1086) --- assets/win7x64-enterprise-eval.xml | 283 +++++++++++++++++++++++++++++ src/define.sh | 35 +++- src/mido.sh | 53 +----- 3 files changed, 314 insertions(+), 57 deletions(-) create mode 100644 assets/win7x64-enterprise-eval.xml diff --git a/assets/win7x64-enterprise-eval.xml b/assets/win7x64-enterprise-eval.xml new file mode 100644 index 0000000..fdfd002 --- /dev/null +++ b/assets/win7x64-enterprise-eval.xml @@ -0,0 +1,283 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <WillShowUI>OnError</WillShowUI> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>Primary</Type> + <Size>100</Size> + </CreatePartition> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <ModifyPartition wcm:action="add"> + <Format>NTFS</Format> + <Label>System Reserved</Label> + <Order>1</Order> + <Active>true</Active> + <PartitionID>1</PartitionID> + <TypeID>0x27</TypeID> + </ModifyPartition> + <ModifyPartition wcm:action="add"> + <Active>true</Active> + <Format>NTFS</Format> + <Label>Windows</Label> + <Letter>C</Letter> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Value>Windows 7 Enterprise</Value> + <Key>/IMAGE/NAME</Key> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>2</PartitionID> + </InstallTo> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + </OEMInformation> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Home</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NetworkLocationWizard" /v "HideWizard" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkList\NewNetworks" /v NetworkList /t REG_MULTI_SZ /d "" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/src/define.sh b/src/define.sh index 98a63c1..1af0585 100644 --- a/src/define.sh +++ b/src/define.sh @@ -63,7 +63,7 @@ parseVersion() { ;; "7" | "7e" | "win7" | "win7e" | "windows7" | "windows 7" ) VERSION="win7x64" - [ -z "$DETECTED" ] && DETECTED="win7x64-enterprise" + [ -z "$DETECTED" ] && DETECTED="win7x64-enterprise-eval" ;; "7u" | "win7u" | "windows7u" | "windows 7u" ) VERSION="win7x64-ultimate" @@ -624,6 +624,7 @@ getVersion() { *" home"* ) id="$id-home" ;; *" starter"* ) id="$id-starter" ;; *" ultimate"* ) id="$id-ultimate" ;; + *" enterprise evaluation"* ) id="$id-enterprise-eval" ;; *" enterprise"* ) id="$id-enterprise" ;; esac ;; @@ -668,6 +669,9 @@ switchEdition() { "win81${PLATFORM,,}-enterprise-eval" ) DETECTED="win81${PLATFORM,,}-enterprise" ;; + "win7${PLATFORM,,}" | "win7${PLATFORM,,}-enterprise-eval" ) + DETECTED="win7${PLATFORM,,}-enterprise" + ;; "win2025-eval" ) DETECTED="win2025" ;; "win2022-eval" ) DETECTED="win2022" ;; "win2019-eval" ) DETECTED="win2019" ;; @@ -684,6 +688,7 @@ getMido() { local id="$1" local lang="$2" local ret="$3" + local url="" local sum="" local size="" @@ -697,14 +702,12 @@ getMido() { "win11x64-enterprise-eval" ) size=4295096320 sum="dad633276073f14f3e0373ef7e787569e216d54942ce522b39451c8f2d38ad43" + url="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_CLIENTENTERPRISEEVAL_OEMRET_A64FRE_en-us.iso" ;; - "win11x64-enterprise-ltsc-eval" ) - size=5060020224 - sum="2cee70bd183df42b92a2e0da08cc2bb7a2a9ce3a3841955a012c0f77aeb3cb29" - ;; - "win11x64-enterprise-iot-eval" ) + "win11x64-enterprise-iot-eval" | "win11x64-enterprise-ltsc-eval" ) size=5060020224 sum="2cee70bd183df42b92a2e0da08cc2bb7a2a9ce3a3841955a012c0f77aeb3cb29" + url="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_CLIENT_IOT_LTSC_EVAL_x64FRE_en-us.iso" ;; "win10x64" ) size=6140975104 @@ -713,45 +716,59 @@ getMido() { "win10x64-enterprise-eval" ) size=5550497792 sum="ef7312733a9f5d7d51cfa04ac497671995674ca5e1058d5164d6028f0938d668" + url="https://software-static.download.prss.microsoft.com/dbazure/988969d5-f34g-4e03-ac9d-1f9786c66750/19045.2006.220908-0225.22h2_release_svc_refresh_CLIENTENTERPRISEEVAL_OEMRET_x64FRE_en-us.iso" ;; "win10x64-enterprise-ltsc-eval" ) size=4898582528 sum="e4ab2e3535be5748252a8d5d57539a6e59be8d6726345ee10e7afd2cb89fefb5" + url="https://software-download.microsoft.com/download/pr/19044.1288.211006-0501.21h2_release_svc_refresh_CLIENT_LTSC_EVAL_x64FRE_en-us.iso" ;; "win81x64-enterprise-eval" ) size=3961473024 sum="2dedd44c45646c74efc5a028f65336027e14a56f76686a4631cf94ffe37c72f2" + url="https://download.microsoft.com/download/B/9/9/B999286E-0A47-406D-8B3D-5B5AD7373A4A/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_ENTERPRISE_EVAL_EN-US-IR3_CENA_X64FREE_EN-US_DV9.ISO" + ;; + "win7x64" | "win7x64-enterprise-eval" ) + size=3121248256 + sum="2c16c73388a5c02a0ec4cd8b9e5c14ba28b7b45d13d0c9c7d44459feecc0385f" + url="http://care.dlservice.microsoft.com/dl/download/evalx/win7/x64/EN/7600.16385.090713-1255_x64fre_enterprise_en-us_EVAL_Eval_Enterprise-GRMCENXEVAL_EN_DVD.iso" ;; "win2025-eval" ) size=5307996160 sum="16442d1c0509bcbb25b715b1b322a15fb3ab724a42da0f384b9406ca1c124ed4" + url="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_SERVER_EVAL_x64FRE_en-us.iso" ;; "win2022-eval" ) size=5044094976 sum="3e4fa6d8507b554856fc9ca6079cc402df11a8b79344871669f0251535255325" + url="https://software-static.download.prss.microsoft.com/sg/download/888969d5-f34g-4e03-ac9d-1f9786c66749/SERVER_EVAL_x64FRE_en-us.iso" ;; "win2019-eval" ) size=5652088832 sum="6dae072e7f78f4ccab74a45341de0d6e2d45c39be25f1f5920a2ab4f51d7bcbb" + url="https://software-download.microsoft.com/download/pr/17763.737.190906-2324.rs5_release_svc_refresh_SERVER_EVAL_x64FRE_en-us_1.iso" ;; "win2016-eval" ) size=6972221440 sum="1ce702a578a3cb1ac3d14873980838590f06d5b7101c5daaccbac9d73f1fb50f" + url="https://software-download.microsoft.com/download/pr/Windows_Server_2016_Datacenter_EVAL_en-us_14393_refresh.ISO" ;; "win2012r2-eval" ) size=4542291968 sum="6612b5b1f53e845aacdf96e974bb119a3d9b4dcb5b82e65804ab7e534dc7b4d5" + url="https://download.microsoft.com/download/6/2/A/62A76ABB-9990-4EFC-A4FE-C7D698DAEB96/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_SERVER_EVAL_EN-US-IR3_SSS_X64FREE_EN-US_DV9.ISO" ;; "win2008r2" ) size=3166840832 sum="30832ad76ccfa4ce48ccb936edefe02079d42fb1da32201bf9e3a880c8ed6312" + url="https://download.microsoft.com/download/4/1/D/41DEA7E0-B30D-4012-A1E3-F24DC03BA1BB/7601.17514.101119-1850_x64fre_server_eval_en-us-GRMSXEVAL_EN_DVD.iso" ;; esac case "${ret,,}" in "sum" ) echo "$sum" ;; "size" ) echo "$size" ;; - *) echo "";; + *) echo "$url";; esac return 0 @@ -844,7 +861,7 @@ getLink1() { sum="dfd9890881b7e832a927c38310fb415b7ea62ac5a896671f2ce2a111998f0df8" url="server/2008r2/en_windows_server_2008_r2_with_sp1_x64_dvd_617601-018.iso" ;; - "win7x64" | "win7x64-enterprise" ) + "win7x64" | "win7x64-enterprise" | "win7x64-enterprise-eval" ) size=3182604288 sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" url="7/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" @@ -928,7 +945,7 @@ getLink2() { sum="dfd9890881b7e832a927c38310fb415b7ea62ac5a896671f2ce2a111998f0df8" url="Windows%20Server%202008%20R2/en_windows_server_2008_r2_with_sp1_x64_dvd_617601.iso" ;; - "win7x64" | "win7x64-enterprise" ) + "win7x64" | "win7x64-enterprise" | "win7x64-enterprise-eval" ) size=3182604288 sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" url="Windows%207/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" diff --git a/src/mido.sh b/src/mido.sh index 4f81618..7fed9c4 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -310,7 +310,7 @@ getWindows() { info "$msg" && html "$msg" case "${version,,}" in - "win2008r2" | "win81${PLATFORM,,}-enterprise"* | "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* ) + "win2008r2" | "win7${PLATFORM,,}"* | "win81${PLATFORM,,}"* | "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* ) if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then error "No download in the $language language available for $edition!" MIDO_URL="" && return 1 @@ -338,58 +338,15 @@ getWindows() { "win2025-eval" | "win2022-eval" | "win2019-eval" | "win2016-eval" | "win2012r2-eval" ) download_windows_eval "$version" "$lang" "$edition" && return 0 ;; - "win81${PLATFORM,,}-enterprise"* | "win2008r2" ) + "win7${PLATFORM,,}"* | "win81${PLATFORM,,}-enterprise"* | "win2008r2" ) ;; * ) error "Invalid VERSION specified, value \"$version\" is not recognized!" ;; esac - if [[ "${PLATFORM,,}" != "x64" ]]; then - MIDO_URL="" - return 1 - fi + MIDO_URL=$(getMido "$version" "$lang" "") + [ -z "$MIDO_URL" ] && return 1 - if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then - MIDO_URL="" - return 1 - fi - - case "${version,,}" in - "win81${PLATFORM,,}-enterprise"* ) - MIDO_URL="https://download.microsoft.com/download/B/9/9/B999286E-0A47-406D-8B3D-5B5AD7373A4A/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_ENTERPRISE_EVAL_EN-US-IR3_CENA_X64FREE_EN-US_DV9.ISO" - return 0 - ;; - "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* ) - MIDO_URL="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_CLIENT_IOT_LTSC_EVAL_x64FRE_en-us.iso" - return 0 - ;; - "win2025-eval" ) - MIDO_URL="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_SERVER_EVAL_x64FRE_en-us.iso" - return 0 - ;; - "win2022-eval" ) - MIDO_URL="https://software-static.download.prss.microsoft.com/sg/download/888969d5-f34g-4e03-ac9d-1f9786c66749/SERVER_EVAL_x64FRE_en-us.iso" - return 0 - ;; - "win2019-eval" ) - MIDO_URL="https://software-download.microsoft.com/download/pr/17763.737.190906-2324.rs5_release_svc_refresh_SERVER_EVAL_x64FRE_en-us_1.iso" - return 0 - ;; - "win2016-eval" ) - MIDO_URL="https://software-download.microsoft.com/download/pr/Windows_Server_2016_Datacenter_EVAL_en-us_14393_refresh.ISO" - return 0 - ;; - "win2012r2-eval" ) - MIDO_URL="https://download.microsoft.com/download/6/2/A/62A76ABB-9990-4EFC-A4FE-C7D698DAEB96/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_SERVER_EVAL_EN-US-IR3_SSS_X64FREE_EN-US_DV9.ISO" - return 0 - ;; - "win2008r2" ) - MIDO_URL="https://download.microsoft.com/download/4/1/D/41DEA7E0-B30D-4012-A1E3-F24DC03BA1BB/7601.17514.101119-1850_x64fre_server_eval_en-us-GRMSXEVAL_EN_DVD.iso" - return 0 - ;; - esac - - MIDO_URL="" - return 1 + return 0 } getCatalog() { From 9cad3f09940c8913f1331bbb3fcd39e004844d00 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 5 Mar 2025 11:04:23 +0100 Subject: [PATCH 127/290] fix: Update Windows Server 2025 download link (#1088) --- readme.md | 2 +- src/define.sh | 6 +++--- src/mido.sh | 8 +++++--- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/readme.md b/readme.md index 14fa7ef..ef9edfa 100644 --- a/readme.md +++ b/readme.md @@ -110,7 +110,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas | `ve` | Windows Vista Enterprise | 3.0 GB | | `xp` | Windows XP Professional | 0.6 GB | |||| - | `2025` | Windows Server 2025 | 5.0 GB | + | `2025` | Windows Server 2025 | 5.6 GB | | `2022` | Windows Server 2022 | 4.7 GB | | `2019` | Windows Server 2019 | 5.3 GB | | `2016` | Windows Server 2016 | 6.5 GB | diff --git a/src/define.sh b/src/define.sh index 1af0585..8607ed2 100644 --- a/src/define.sh +++ b/src/define.sh @@ -734,9 +734,9 @@ getMido() { url="http://care.dlservice.microsoft.com/dl/download/evalx/win7/x64/EN/7600.16385.090713-1255_x64fre_enterprise_en-us_EVAL_Eval_Enterprise-GRMCENXEVAL_EN_DVD.iso" ;; "win2025-eval" ) - size=5307996160 - sum="16442d1c0509bcbb25b715b1b322a15fb3ab724a42da0f384b9406ca1c124ed4" - url="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_SERVER_EVAL_x64FRE_en-us.iso" + size=6014152704 + sum="d0ef4502e350e3c6c53c15b1b3020d38a5ded011bf04998e950720ac8579b23d" + url="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1742.240906-0331.ge_release_svc_refresh_SERVER_EVAL_x64FRE_en-us.iso" ;; "win2022-eval" ) size=5044094976 diff --git a/src/mido.sh b/src/mido.sh index 7fed9c4..9e62f25 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -476,7 +476,9 @@ verifyFile() { local check="$4" if [ -n "$size" ] && [[ "$total" != "$size" ]] && [[ "$size" != "0" ]]; then - warn "The downloaded file has an unexpected size: $total bytes, while expected value was: $size bytes. Please report this at $SUPPORT/issues" + if [[ "$VERIFY" == [Yy1]* ]] || [[ "$DEBUG" == [Yy1]* ]]; then + warn "The downloaded file has a different size ( $total bytes) than expected ( $size bytes). Please report this at $SUPPORT/issues" + fi fi local hash="" @@ -499,7 +501,7 @@ verifyFile() { info "Succesfully verified ISO!" && return 0 fi - error "The downloaded file has an invalid $algo checksum: $hash , while expected value was: $check. Please report this at $SUPPORT/issues" + error "The downloaded file has an unknown $algo checksum: $hash , as the expected value was: $check. Please report this at $SUPPORT/issues" return 1 } @@ -558,7 +560,7 @@ downloadFile() { msg="Failed to download $url" (( rc == 3 )) && error "$msg , cannot write file (disk full?)" && return 1 (( rc == 4 )) && error "$msg , network failure!" && return 1 - (( rc == 8 )) && error "$msg , server issued an error response!" && return 1 + (( rc == 8 )) && error "$msg , server issued an error response! Please report this at $SUPPORT/issues." && return 1 error "$msg , reason: $rc" return 1 From b8105e9072ff599599a84f80cbc1ee5399c9c2e2 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 6 Mar 2025 10:27:59 +0100 Subject: [PATCH 128/290] fix: Samba permissions (#1091) --- src/samba.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/src/samba.sh b/src/samba.sh index bdf232b..7105a89 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -102,6 +102,7 @@ done # Fix Samba permissions [ -d /run/samba/msg.lock ] && chmod -R 0755 /run/samba/msg.lock [ -d /var/log/samba/cores ] && chmod -R 0700 /var/log/samba/cores +[ -d /var/cache/samba/msg.lock ] && chmod -R 0755 /var/cache/samba/msg.lock if ! smbd; then error "Samba daemon failed to start!" From 186b2e21ce6c6bd7c6da51708016c451403e3d98 Mon Sep 17 00:00:00 2001 From: Francois Liot <francois@liot.org> Date: Fri, 7 Mar 2025 00:44:47 +0100 Subject: [PATCH 129/290] docs: Kubernetes deployment (#1092) --- kubernetes.yml | 131 +++++++++++++++++++++++++++++-------------------- 1 file changed, 79 insertions(+), 52 deletions(-) diff --git a/kubernetes.yml b/kubernetes.yml index 2de24a4..0b247df 100644 --- a/kubernetes.yml +++ b/kubernetes.yml @@ -10,68 +10,95 @@ spec: requests: storage: 64Gi --- -apiVersion: v1 -kind: Pod +apiVersion: apps/v1 +kind: Deployment metadata: name: windows labels: name: windows spec: - containers: - - name: windows - image: dockurr/windows - env: - - name: VERSION - value: "11" - - name: RAM_SIZE - value: "4G" - - name: CPU_CORES - value: "2" - - name: DISK_SIZE - value: "64G" - ports: - - containerPort: 8006 - - containerPort: 3389 - - containerPort: 3389 - protocol: UDP - securityContext: - capabilities: - add: - - NET_ADMIN - privileged: true - volumeMounts: - - mountPath: /storage - name: storage - - mountPath: /dev/kvm - name: dev-kvm - - mountPath: /dev/net/tun - name: dev-tun - terminationGracePeriodSeconds: 120 - volumes: - - name: storage - persistentVolumeClaim: - claimName: windows-pvc - - hostPath: - path: /dev/kvm - name: dev-kvm - - hostPath: - path: /dev/net/tun - type: CharDevice - name: dev-tun + replicas: 1 + selector: + matchLabels: + app: windows + template: + metadata: + labels: + app: windows + spec: + containers: + - name: windows + image: dockurr/windows + env: + - name: VERSION + value: "11" + - name: RAM_SIZE + value: "4G" + - name: CPU_CORES + value: "2" + - name: DISK_SIZE + value: "64G" + ports: + - containerPort: 8006 + name: http + protocol: TCP + - containerPort: 3389 + name: rdp + protocol: TCP + - containerPort: 3389 + name: udp + protocol: UDP + - containerPort: 5900 + name: vnc + protocol: TCP + securityContext: + capabilities: + add: + - NET_ADMIN + privileged: true + volumeMounts: + - mountPath: /storage + name: storage + - mountPath: /dev/kvm + name: dev-kvm + - mountPath: /dev/net/tun + name: dev-tun + terminationGracePeriodSeconds: 120 + volumes: + - name: storage + persistentVolumeClaim: + claimName: windows-pvc + - hostPath: + path: /dev/kvm + name: dev-kvm + - hostPath: + path: /dev/net/tun + type: CharDevice + name: dev-tun --- apiVersion: v1 kind: Service metadata: name: windows spec: + internalTrafficPolicy: Cluster ports: - - name: tcp-8006 - port: 8006 - - name: tcp-3389 - port: 3389 - - name: udp-3389 - port: 3389 - protocol: UDP + - name: http + port: 8006 + protocol: TCP + targetPort: 8006 + - name: rdp + port: 3389 + protocol: TCP + targetPort: 3389 + - name: udp + port: 3389 + protocol: UDP + targetPort: 3389 + - name: vnc + port: 5900 + protocol: TCP + targetPort: 5900 selector: - name: windows - type: NodePort + app: windows + type: ClusterIP From 5fac3fa33ec929d7fe83312c5232bcfc1cbcb340 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 11 Mar 2025 20:42:41 +0100 Subject: [PATCH 130/290] feat: Install driver during specialization phase (#1099) --- Dockerfile | 2 +- assets/win11x64-enterprise-eval.xml | 12 ++++++------ assets/win11x64-enterprise.xml | 13 ++++++------- assets/win11x64-iot.xml | 12 ++++++------ assets/win11x64-ltsc.xml | 12 ++++++------ assets/win11x64.xml | 12 ++++++------ assets/win2025-eval.xml | 12 ++++++------ assets/win2025.xml | 12 ++++++------ src/define.sh | 2 -- 9 files changed, 43 insertions(+), 46 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3cafbd5..826680d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -29,7 +29,7 @@ RUN set -eu && \ COPY --chmod=755 ./src /run/ COPY --chmod=755 ./assets /run/assets -ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.44-0/virtio-win-1.9.44.tar.xz /drivers.txz +ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.45-0/virtio-win-1.9.45.tar.xz /drivers.txz FROM dockurr/windows-arm:${VERSION_ARG} AS build-arm64 FROM build-${TARGETARCH} diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index b8c3cbf..034fd6a 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -264,6 +264,11 @@ <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> <Description>Set Network Location to Home</Description> </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>26</Order> + <Path>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</Path> + <Description>Install VirtIO display driver</Description> + </RunSynchronousCommand> </RunSynchronous> </component> <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -443,16 +448,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</CommandLine> - <Description>Install VirtIO display driver</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index fc8562a..284e510 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -267,6 +267,11 @@ <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> <Description>Set Network Location to Home</Description> </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>26</Order> + <Path>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</Path> + <Description>Install VirtIO display driver</Description> + </RunSynchronousCommand> </RunSynchronous> </component> <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -446,16 +451,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</CommandLine> - <Description>Install VirtIO display driver</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -463,4 +463,3 @@ </component> </settings> </unattend> - diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml index 0de7bb4..46c8bd7 100644 --- a/assets/win11x64-iot.xml +++ b/assets/win11x64-iot.xml @@ -267,6 +267,11 @@ <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> <Description>Set Network Location to Home</Description> </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>26</Order> + <Path>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</Path> + <Description>Install VirtIO display driver</Description> + </RunSynchronousCommand> </RunSynchronous> </component> <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -446,16 +451,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</CommandLine> - <Description>Install VirtIO display driver</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml index 8e42eb6..4d56000 100644 --- a/assets/win11x64-ltsc.xml +++ b/assets/win11x64-ltsc.xml @@ -267,6 +267,11 @@ <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> <Description>Set Network Location to Home</Description> </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>26</Order> + <Path>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</Path> + <Description>Install VirtIO display driver</Description> + </RunSynchronousCommand> </RunSynchronous> </component> <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -446,16 +451,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</CommandLine> - <Description>Install VirtIO display driver</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index 3130bb4..fe14705 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -267,6 +267,11 @@ <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> <Description>Set Network Location to Home</Description> </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>26</Order> + <Path>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</Path> + <Description>Install VirtIO display driver</Description> + </RunSynchronousCommand> </RunSynchronous> </component> <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -446,16 +451,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</CommandLine> - <Description>Install VirtIO display driver</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml index 9d90c77..ebeb7a5 100644 --- a/assets/win2025-eval.xml +++ b/assets/win2025-eval.xml @@ -159,6 +159,11 @@ <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> <Description>Set Network Location to Home</Description> </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>2</Order> + <Path>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</Path> + <Description>Install VirtIO display driver</Description> + </RunSynchronousCommand> </RunSynchronous> </component> <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -337,16 +342,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</CommandLine> - <Description>Install VirtIO display driver</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>22</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2025.xml b/assets/win2025.xml index 7e543a2..6ac67e4 100644 --- a/assets/win2025.xml +++ b/assets/win2025.xml @@ -162,6 +162,11 @@ <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> <Description>Set Network Location to Home</Description> </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>2</Order> + <Path>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</Path> + <Description>Install VirtIO display driver</Description> + </RunSynchronousCommand> </RunSynchronous> </component> <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> @@ -340,16 +345,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>pnputil -i -a C:\Windows\Drivers\viogpudo\viogpudo.inf</CommandLine> - <Description>Install VirtIO display driver</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>22</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/src/define.sh b/src/define.sh index 8607ed2..89ce2cc 100644 --- a/src/define.sh +++ b/src/define.sh @@ -795,13 +795,11 @@ getLink1() { url="11/en-us_windows_11_24h2_x64.iso" ;; "win11x64-iot" | "win11x64-enterprise-iot-eval" ) - [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 size=5144817664 sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" url="11/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" ;; "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) - [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 size=5144817664 sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" url="11/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" From 454cd8db680811eb7b4a78d4c7f10e077a00d3c6 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 12 Mar 2025 12:02:31 +0100 Subject: [PATCH 131/290] docs: Use relative paths (#1102) --- compose.yml | 2 ++ kubernetes.yml | 4 ---- readme.md | 24 +++++++++++++----------- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/compose.yml b/compose.yml index c6721b2..e5b6257 100644 --- a/compose.yml +++ b/compose.yml @@ -13,5 +13,7 @@ services: - 8006:8006 - 3389:3389/tcp - 3389:3389/udp + volumes: + - ./windows:/storage restart: always stop_grace_period: 2m diff --git a/kubernetes.yml b/kubernetes.yml index 0b247df..fa8eef0 100644 --- a/kubernetes.yml +++ b/kubernetes.yml @@ -32,10 +32,6 @@ spec: env: - name: VERSION value: "11" - - name: RAM_SIZE - value: "4G" - - name: CPU_CORES - value: "2" - name: DISK_SIZE value: "64G" ports: diff --git a/readme.md b/readme.md index ef9edfa..ec47ff1 100644 --- a/readme.md +++ b/readme.md @@ -44,6 +44,8 @@ services: - 8006:8006 - 3389:3389/tcp - 3389:3389/udp + volumes: + - ./windows:/storage restart: always stop_grace_period: 2m ``` @@ -51,7 +53,7 @@ services: Via Docker CLI: ```bash -docker run -it --rm -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN --stop-timeout 120 dockurr/windows +docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v ${PWD:-.}/windows:/storage --stop-timeout 120 dockurr/windows ``` Via Kubernetes: @@ -127,10 +129,10 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ```yaml volumes: - - /var/win:/storage + - ./windows:/storage ``` - Replace the example path `/var/win` with the desired storage folder. + Replace the example path `./windows` with the desired storage folder or named volume. ### How do I change the size of the disk? @@ -152,10 +154,10 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ```yaml volumes: - - /home/user/example:/data + - ./example:/data ``` - The example folder `/home/user/example` will be available as ` \\host.lan\Data`. + The example folder `./example` will be available as ` \\host.lan\Data`. > [!TIP] > You can map this path to a drive letter in Windows, for easier access. @@ -173,10 +175,10 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ```yaml volumes: - - /home/user/example.iso:/custom.iso + - ./example.iso:/custom.iso ``` - Replace the example path `/home/user/example.iso` with the filename of your desired ISO file. The value of `VERSION` will be ignored in this case. + Replace the example path `./example.iso` with the filename of your desired ISO file. The value of `VERSION` will be ignored in this case. ### How do I run a script after installation? @@ -186,10 +188,10 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ```yaml volumes: - - /home/user/example:/oem + - ./example:/oem ``` - The example folder `/home/user/example` will be copied to `C:\OEM` and the containing `install.bat` will be executed during the last step of the automatic installation. + The example folder `./example` will be copied to `C:\OEM` and the containing `install.bat` will be executed during the last step of the automatic installation. ### How do I perform a manual installation? @@ -318,8 +320,8 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas DISK2_SIZE: "32G" DISK3_SIZE: "64G" volumes: - - /home/example:/storage2 - - /mnt/data/example:/storage3 + - ./example2:/storage2 + - ./example3:/storage3 ``` ### How do I pass-through a disk? From 64ddb6d774ee0efe1bc492bd684af101fb44e3de Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Mar 2025 21:59:37 +0100 Subject: [PATCH 132/290] build: Update qemu-docker to v6.21 (#1107) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 826680d..70201a3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:6.20 / / +COPY --from=qemux/qemu:6.21 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From b465f7864663d23c9c872b5f72fa8be158e2a332 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 13 Mar 2025 01:59:04 +0100 Subject: [PATCH 133/290] docs: Readme (#1108) --- readme.md | 83 +++++++++++++++++++++++++++---------------------------- 1 file changed, 41 insertions(+), 42 deletions(-) diff --git a/readme.md b/readme.md index ec47ff1..f50fc66 100644 --- a/readme.md +++ b/readme.md @@ -162,48 +162,6 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas > [!TIP] > You can map this path to a drive letter in Windows, for easier access. -### How do I install a custom image? - - In order to download an unsupported ISO image, specify its URL in the `VERSION` environment variable: - - ```yaml - environment: - VERSION: "https://example.com/win.iso" - ``` - - Alternatively, you can also skip the download and use a local file instead, by binding it in your compose file in this way: - - ```yaml - volumes: - - ./example.iso:/custom.iso - ``` - - Replace the example path `./example.iso` with the filename of your desired ISO file. The value of `VERSION` will be ignored in this case. - -### How do I run a script after installation? - - To run your own script after installation, you can create a file called `install.bat` and place it in a folder together with any additional files it needs (software to be installed for example). - - Then bind that folder in your compose file like this: - - ```yaml - volumes: - - ./example:/oem - ``` - - The example folder `./example` will be copied to `C:\OEM` and the containing `install.bat` will be executed during the last step of the automatic installation. - -### How do I perform a manual installation? - - It's best to stick to the automatic installation, as it adjusts various settings to prevent common issues when running Windows inside a virtual environment. - - However, if you insist on performing the installation manually, add the following environment variable to your compose file: - - ```yaml - environment: - MANUAL: "Y" - ``` - ### How do I change the amount of CPU or RAM? By default, the container will be allowed to use a maximum of 2 CPU cores and 4 GB of RAM. @@ -250,6 +208,47 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas REGION: "en-US" KEYBOARD: "en-US" ``` +### How do I install a custom image? + + In order to download an unsupported ISO image, specify its URL in the `VERSION` environment variable: + + ```yaml + environment: + VERSION: "https://example.com/win.iso" + ``` + + Alternatively, you can also skip the download and use a local file instead, by binding it in your compose file in this way: + + ```yaml + volumes: + - ./example.iso:/custom.iso + ``` + + Replace the example path `./example.iso` with the filename of your desired ISO file. The value of `VERSION` will be ignored in this case. + +### How do I run a script after installation? + + To run your own script after installation, you can create a file called `install.bat` and place it in a folder together with any additional files it needs (software to be installed for example). + + Then bind that folder in your compose file like this: + + ```yaml + volumes: + - ./example:/oem + ``` + + The example folder `./example` will be copied to `C:\OEM` and the containing `install.bat` will be executed during the last step of the automatic installation. + +### How do I perform a manual installation? + + It's recommended to stick to the automatic installation, as it adjusts various settings to prevent common issues when running Windows inside a virtual environment. + + However, if you insist on performing the installation manually on your own risk, add the following environment variable to your compose file: + + ```yaml + environment: + MANUAL: "Y" + ``` ### How do I connect using RDP? From 5ab42e940920cf12b5a3571b4d28ea3a884c1ad8 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 13 Mar 2025 12:55:36 +0100 Subject: [PATCH 134/290] feat: Allow product key configuration (#1110) --- readme.md | 14 +++++++-- src/define.sh | 82 +++++++++++++++----------------------------------- src/install.sh | 5 +++ 3 files changed, 42 insertions(+), 59 deletions(-) diff --git a/readme.md b/readme.md index f50fc66..edb7f66 100644 --- a/readme.md +++ b/readme.md @@ -178,7 +178,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas By default, a user called `Docker` (with an empty password) is created during installation. - If you want to use different credentials, you can configure them (only BEFORE installation) in your compose file: + If you want to use different credentials, you can configure them in your compose file (only before installation): ```yaml environment: @@ -201,13 +201,23 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I select the keyboard layout? - If you want to use a keyboard layout or locale that is not the default for your selected language, before installation you can add `KEYBOARD` and `REGION` variables like this: + If you want to use a keyboard layout or locale that is not the default for your selected language, you can add `KEYBOARD` and `REGION` variables like this (before installation): ```yaml environment: REGION: "en-US" KEYBOARD: "en-US" ``` + +### How do I set the product key? + + By default, an evaluation version of Windows will be installed, but if you have product key you can add a `KEY` variable like this (before installation): + + ```yaml + environment: + KEY: "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX" + ``` + ### How do I install a custom image? In order to download an unsupported ISO image, specify its URL in the `VERSION` environment variable: diff --git a/src/define.sh b/src/define.sh index 89ce2cc..04cdf82 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1,6 +1,7 @@ #!/usr/bin/env bash set -Eeuo pipefail +: "${KEY:=""}" : "${WIDTH:=""}" : "${HEIGHT:=""}" : "${VERIFY:=""}" @@ -1175,9 +1176,7 @@ prepareInstall() { local dir="$2" local desc="$3" - local arch="$4" - local key="$5" - local driver="$6" + local driver="$4" local drivers="/tmp/drivers" rm -rf "$drivers" @@ -1196,7 +1195,8 @@ prepareInstall() { error "Failed to extract drivers!" && return 1 fi - local target + local arch target + [ -d "$dir/AMD64" ] && arch="amd64" || arch="x86" [[ "${arch,,}" == "x86" ]] && target="$dir/I386" || target="$dir/AMD64" if [ ! -f "$drivers/viostor/$driver/$arch/viostor.sys" ]; then @@ -1282,6 +1282,24 @@ prepareInstall() { [ -n "$PASSWORD" ] && password="$PASSWORD" [ -n "$USERNAME" ] && username=$(echo "$USERNAME" | sed 's/[^[:alnum:]@!._-]//g') + if [[ "${driver,,}" == "xp" ]]; then + if [[ "${arch,,}" == "x86" ]]; then + # Windows XP Professional x86 generic key (no activation, trial-only) + [ -z "$KEY" ] && KEY="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y" + else + # Windows XP Professional x64 generic key (no activation, trial-only) + [ -z "$KEY" ] && KEY="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G" + fi + else + if [[ "${arch,,}" == "x86" ]]; then + # Windows Server 2003 Standard x86 generic key (no activation, trial-only) + [ -z "$KEY" ] && KEY="QKDCQ-TP2JM-G4MDG-VR6F2-P9C48" + else + # Windows Server 2003 Standard x64 generic key (no activation, trial-only) + [ -z "$KEY" ] && KEY="P4WJG-WK3W7-3HM8W-RWHCK-8JTRY" + fi + fi + find "$target" -maxdepth 1 -type f -iname winnt.sif -exec rm {} \; { echo "[Data]" @@ -1319,7 +1337,7 @@ prepareInstall() { echo " FullName=\"$username\"" echo " ComputerName=\"*\"" echo " OrgName=\"Windows for Docker\"" - echo " ProductKey=$key" + echo " ProductKey=$KEY" echo "" echo "[Identification]" echo " JoinWorkgroup = WORKGROUP" @@ -1465,56 +1483,6 @@ prepareInstall() { return 0 } -prepare2k3() { - - local iso="$1" - local dir="$2" - local desc="$3" - local driver="2k3" - local arch key - - [ -d "$dir/AMD64" ] && arch="amd64" || arch="x86" - - if [[ "${arch,,}" == "x86" ]]; then - # Windows Server 2003 Standard x86 generic key (no activation, trial-only) - # This is not a pirated key, it comes from the official MS documentation. - key="QKDCQ-TP2JM-G4MDG-VR6F2-P9C48" - else - # Windows Server 2003 Standard x64 generic key (no activation, trial-only) - # This is not a pirated key, it comes from the official MS documentation. - key="P4WJG-WK3W7-3HM8W-RWHCK-8JTRY" - fi - - prepareInstall "$iso" "$dir" "$desc" "$arch" "$key" "$driver" || return 1 - - return 0 -} - -prepareXP() { - - local iso="$1" - local dir="$2" - local desc="$3" - local driver="xp" - local arch key - - [ -d "$dir/AMD64" ] && arch="amd64" || arch="x86" - - if [[ "${arch,,}" == "x86" ]]; then - # Windows XP Professional x86 generic key (no activation, trial-only) - # This is not a pirated key, it comes from the official MS documentation. - key="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y" - else - # Windows XP Professional x64 generic key (no activation, trial-only) - # This is not a pirated key, it comes from the official MS documentation. - key="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G" - fi - - prepareInstall "$iso" "$dir" "$desc" "$arch" "$key" "$driver" || return 1 - - return 0 -} - prepareLegacy() { local iso="$1" @@ -1601,11 +1569,11 @@ setMachine() { "win2k"* ) ETFS="[BOOT]/Boot-NoEmul.img" ;; "winxp"* ) - if ! prepareXP "$iso" "$dir" "$desc"; then + if ! prepareInstall "$iso" "$dir" "$desc" "xp"; then error "Failed to prepare $desc ISO!" && return 1 fi ;; "win2003"* ) - if ! prepare2k3 "$iso" "$dir" "$desc"; then + if ! prepareInstall "$iso" "$dir" "$desc" "2k3"; then error "Failed to prepare $desc ISO!" && return 1 fi ;; esac diff --git a/src/install.sh b/src/install.sh index 2a322be..003b302 100644 --- a/src/install.sh +++ b/src/install.sh @@ -681,6 +681,11 @@ updateXML() { sed -i "s/SERVERSTANDARD<\/Value>/SERVER${EDITION^^}<\/Value>/g" "$asset" fi + if [ -n "$KEY" ]; then + sed -i '/<ProductKey>/,/<\/ProductKey>/d' "$asset" + sed -i "s/<\/UserData>/ <ProductKey>\n <Key>${KEY}<\/Key>\n <WillShowUI>OnError<\/WillShowUI>\n <\/ProductKey>\n <\/UserData>/g" "$asset" + fi + return 0 } From e58f21c33db5b0b615ab60ac4a702e6be9507d12 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 14 Mar 2025 12:57:00 +0100 Subject: [PATCH 135/290] build: Update qemu-docker to v6.22 (#1113) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 70201a3..ae17da2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:6.21 / / +COPY --from=qemux/qemu:6.22 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From 8ec6945b545826b826db59996d60ff3c11b70b7e Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 14 Mar 2025 14:00:33 +0100 Subject: [PATCH 136/290] feat: Add Hyper-V Server 2019 (#1114) --- assets/win2019-hv.xml | 341 ++++++++++++++++++++++++++++++++++++++++++ readme.md | 13 +- src/define.sh | 29 +++- src/mido.sh | 5 +- 4 files changed, 380 insertions(+), 8 deletions(-) create mode 100644 assets/win2019-hv.xml diff --git a/assets/win2019-hv.xml b/assets/win2019-hv.xml new file mode 100644 index 0000000..3ce3690 --- /dev/null +++ b/assets/win2019-hv.xml @@ -0,0 +1,341 @@ +<?xml version="1.0" encoding="UTF-8"?> +<unattend xmlns="urn:schemas-microsoft-com:unattend" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State"> + <settings pass="windowsPE"> + <component name="Microsoft-Windows-International-Core-WinPE" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SetupUILanguage> + <UILanguage>en-US</UILanguage> + </SetupUILanguage> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DiskConfiguration> + <Disk wcm:action="add"> + <DiskID>0</DiskID> + <WillWipeDisk>true</WillWipeDisk> + <CreatePartitions> + <!-- System partition (ESP) --> + <CreatePartition wcm:action="add"> + <Order>1</Order> + <Type>EFI</Type> + <Size>128</Size> + </CreatePartition> + <!-- Microsoft reserved partition (MSR) --> + <CreatePartition wcm:action="add"> + <Order>2</Order> + <Type>MSR</Type> + <Size>128</Size> + </CreatePartition> + <!-- Windows partition --> + <CreatePartition wcm:action="add"> + <Order>3</Order> + <Type>Primary</Type> + <Extend>true</Extend> + </CreatePartition> + </CreatePartitions> + <ModifyPartitions> + <!-- System partition (ESP) --> + <ModifyPartition wcm:action="add"> + <Order>1</Order> + <PartitionID>1</PartitionID> + <Label>System</Label> + <Format>FAT32</Format> + </ModifyPartition> + <!-- MSR partition does not need to be modified --> + <ModifyPartition wcm:action="add"> + <Order>2</Order> + <PartitionID>2</PartitionID> + </ModifyPartition> + <!-- Windows partition --> + <ModifyPartition wcm:action="add"> + <Order>3</Order> + <PartitionID>3</PartitionID> + <Label>Windows</Label> + <Letter>C</Letter> + <Format>NTFS</Format> + </ModifyPartition> + </ModifyPartitions> + </Disk> + </DiskConfiguration> + <ImageInstall> + <OSImage> + <InstallFrom> + <MetaData wcm:action="add"> + <Key>/IMAGE/NAME</Key> + <Value>Hyper-V Server 2019 SERVERHYPERCORE</Value> + </MetaData> + </InstallFrom> + <InstallTo> + <DiskID>0</DiskID> + <PartitionID>3</PartitionID> + </InstallTo> + <WillShowUI>OnError</WillShowUI> + <InstallToAvailablePartition>false</InstallToAvailablePartition> + </OSImage> + </ImageInstall> + <DynamicUpdate> + <Enable>true</Enable> + <WillShowUI>Never</WillShowUI> + </DynamicUpdate> + <UpgradeData> + <Upgrade>false</Upgrade> + <WillShowUI>Never</WillShowUI> + </UpgradeData> + <UserData> + <AcceptEula>true</AcceptEula> + <FullName>Docker</FullName> + <Organization>Windows for Docker</Organization> + </UserData> + <EnableFirewall>false</EnableFirewall> + <Diagnostics> + <OptIn>false</OptIn> + </Diagnostics> + </component> + </settings> + <settings pass="offlineServicing"> + <component name="Microsoft-Windows-LUA-Settings" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <EnableLUA>false</EnableLUA> + </component> + </settings> + <settings pass="generalize"> + <component name="Microsoft-Windows-PnPSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PersistAllDeviceInstalls>true</PersistAllDeviceInstalls> + </component> + <component name="Microsoft-Windows-Security-SPP" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipRearm>1</SkipRearm> + </component> + </settings> + <settings pass="specialize"> + <component name="Microsoft-Windows-Security-SPP-UX" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <SkipAutoActivation>true</SkipAutoActivation> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <ComputerName>*</ComputerName> + <OEMInformation> + <Manufacturer>Dockur</Manufacturer> + <Model>Windows for Docker</Model> + <SupportHours>24/7</SupportHours> + <SupportPhone /> + <SupportProvider>Dockur</SupportProvider> + <SupportURL>https://github.com/dockur/windows/issues</SupportURL> + </OEMInformation> + <OEMName>Windows for Docker</OEMName> + </component> + <component name="Microsoft-Windows-ErrorReportingCore" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableWER>1</DisableWER> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-IE-InternetExplorer" processorArchitecture="wow64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableAccelerators>true</DisableAccelerators> + <DisableFirstRunWizard>true</DisableFirstRunWizard> + <Home_Page>https://google.com</Home_Page> + <Help_Page>about:blank</Help_Page> + </component> + <component name="Microsoft-Windows-SQMApi" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <CEIPEnabled>0</CEIPEnabled> + </component> + <component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DisableSR>1</DisableSR> + </component> + <component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <InputLocale>0409:00000409</InputLocale> + <SystemLocale>en-US</SystemLocale> + <UILanguage>en-US</UILanguage> + <UILanguageFallback>en-US</UILanguageFallback> + <UserLocale>en-US</UserLocale> + </component> + <component name="Microsoft-Windows-Deployment" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <RunSynchronous> + <RunSynchronousCommand wcm:action="add"> + <Order>1</Order> + <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> + <Description>Set Network Location to Home</Description> + </RunSynchronousCommand> + </RunSynchronous> + </component> + <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenServerManagerAtLogon>true</DoNotOpenServerManagerAtLogon> + </component> + <component name="Microsoft-Windows-OutOfBoxExperience" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <DoNotOpenInitialConfigurationTasksAtLogon>true</DoNotOpenInitialConfigurationTasksAtLogon> + </component> + <component name="Microsoft-Windows-TerminalServices-LocalSessionManager" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <fDenyTSConnections>false</fDenyTSConnections> + </component> + <component name="Microsoft-Windows-TerminalServices-RDP-WinStationExtensions" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAuthentication>0</UserAuthentication> + </component> + <component name="Networking-MPSSVC-Svc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <FirewallGroups> + <FirewallGroup wcm:action="add" wcm:keyValue="RemoteDesktop"> + <Active>true</Active> + <Profile>all</Profile> + <Group>@FirewallAPI.dll,-28752</Group> + </FirewallGroup> + </FirewallGroups> + </component> + </settings> + <settings pass="oobeSystem"> + <component name="Microsoft-Windows-SecureStartup-FilterDriver" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <PreventDeviceEncryption>true</PreventDeviceEncryption> + </component> + <component name="Microsoft-Windows-EnhancedStorage-Adm" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <TCGSecurityActivationDisabled>1</TCGSecurityActivationDisabled> + </component> + <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> + <UserAccounts> + <LocalAccounts> + <LocalAccount wcm:action="add"> + <Name>Docker</Name> + <Group>Administrators</Group> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </LocalAccount> + </LocalAccounts> + <AdministratorPassword> + <Value>password</Value> + <PlainText>true</PlainText> + </AdministratorPassword> + </UserAccounts> + <AutoLogon> + <Username>Docker</Username> + <Enabled>true</Enabled> + <LogonCount>65432</LogonCount> + <Password> + <Value /> + <PlainText>true</PlainText> + </Password> + </AutoLogon> + <Display> + <ColorDepth>32</ColorDepth> + <HorizontalResolution>1920</HorizontalResolution> + <VerticalResolution>1080</VerticalResolution> + </Display> + <OOBE> + <HideEULAPage>true</HideEULAPage> + <HideLocalAccountScreen>true</HideLocalAccountScreen> + <HideOEMRegistrationScreen>true</HideOEMRegistrationScreen> + <HideOnlineAccountScreens>true</HideOnlineAccountScreens> + <HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE> + <NetworkLocation>Home</NetworkLocation> + <ProtectYourPC>3</ProtectYourPC> + <SkipUserOOBE>true</SkipUserOOBE> + <SkipMachineOOBE>true</SkipMachineOOBE> + </OOBE> + <RegisteredOrganization>Dockur</RegisteredOrganization> + <RegisteredOwner>Windows for Docker</RegisteredOwner> + <FirstLogonCommands> + <SynchronousCommand wcm:action="add"> + <Order>1</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Allow guest access to network shares</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>2</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> + <Description>Allow RDP login with blank password</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>3</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Enable option for passwordless sign-in</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>4</Order> + <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <Description>Password Never Expires</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>5</Order> + <CommandLine>cmd /C POWERCFG -H OFF</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>6</Order> + <CommandLine>cmd /C POWERCFG -X -monitor-timeout-ac 0</CommandLine> + <Description>Disable monitor blanking</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>7</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Edge" /v "HideFirstRunExperience" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable first-run experience in Edge</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>8</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Show file extensions in Explorer</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>9</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Zero Hibernation File</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Disable Hibernation</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>11</Order> + <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> + <Description>Disable Sleep</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>12</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Enable RemoteAPP to launch unlisted programs</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>13</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Search from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Task View from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Widgets from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Remove Chat from the Taskbar</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Turn off Windows Update auto download</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> + <Description>Enable Network Discovery</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> + <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> + <Description>Enable File Sharing</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> + <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> + <Description>Execute custom script from the OEM folder if exists</Description> + </SynchronousCommand> + </FirstLogonCommands> + </component> + </settings> +</unattend> diff --git a/readme.md b/readme.md index edb7f66..9492054 100644 --- a/readme.md +++ b/readme.md @@ -211,11 +211,20 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I set the product key? - By default, an evaluation version of Windows will be installed, but if you have product key you can add a `KEY` variable like this (before installation): + By default, an evaluation version of Windows will be installed, but if you have a product key you can add a `KEY` variable like this (before installation): ```yaml environment: - KEY: "XXXXX-XXXXX-XXXXX-XXXXX-XXXXX" + KEY: "xxxxx-xxxxx-xxxxx-xxxxx-xxxxx" + ``` + +### How do I select the edition? + + Windows Server offers a minimalistic Core edition without a GUI. To select those non-standard editions, you can add a `EDITION` variable like this (before installation): + + ```yaml + environment: + EDITION: "core" ``` ### How do I install a custom image? diff --git a/src/define.sh b/src/define.sh index 04cdf82..1b70ad0 100644 --- a/src/define.sh +++ b/src/define.sh @@ -102,6 +102,9 @@ parseVersion() { "16" | "2016" | "win16" | "win2016" | "windows2016" | "windows 2016" ) VERSION="win2016-eval" ;; + "hv" | "hyperv" | "hyper v" | "hyper-v" | "19hv" | "2019hv" | "win2019hv") + VERSION="win2019-hv" + ;; "2012" | "2012r2" | "win2012" | "win2012r2" | "windows2012" | "windows 2012" ) VERSION="win2012r2-eval" ;; @@ -418,6 +421,7 @@ printVersion() { "win95"* ) desc="Windows 95" ;; "win2k"* ) desc="Windows 2000" ;; "winvista"* ) desc="Windows Vista" ;; + "win2019-hv"* ) desc="Hyper-V Server" ;; "win2003"* ) desc="Windows Server 2003" ;; "win2008"* ) desc="Windows Server 2008" ;; "win2012"* ) desc="Windows Server 2012" ;; @@ -462,6 +466,9 @@ printEdition() { *"-education" ) edition="Education" ;; + *"-hv" ) + edition="2019" + ;; *"-iot" | *"-iot-eval" ) edition="LTSC" ;; @@ -483,11 +490,12 @@ printEdition() { "winvista"* ) edition="Business" ;; - "win2025"* | "win2022"* | "win2019"* | "win2016"* ) - edition="Standard" - ;; - "win2012"* | "win2008"* | "win2003"* ) - edition="Standard" + "win2025"* | "win2022"* | "win2019"* | "win2016"* | "win2012"* | "win2008"* | "win2003"* ) + case "${EDITION^^}" in + *"DATACENTER"* ) edition="Datacenter" ;; + "CORE" | "STANDARDCORE" ) edition="Core" ;; + * ) edition="Standard" ;; + esac ;; esac @@ -550,6 +558,9 @@ fromFile() { "tiny10"* | "tiny_10"* ) id="tiny10" ;; + *"_serverhypercore_"* ) + id="win2019${add}-hv" + ;; *"server2025"* | *"server_2025"* ) id="win2025${add}" ;; @@ -605,6 +616,7 @@ fromName() { *"server 2012"* ) id="win2012r2${add}" ;; *"server 2008"* ) id="win2008r2${add}" ;; *"server 2003"* ) id="win2003r2${add}" ;; + *"hyper-v server"* ) id="win2019${add}" ;; esac echo "$id" @@ -648,6 +660,7 @@ getVersion() { "win2025"* | "win2022"* | "win2019"* | "win2016"* | "win2012"* | "win2008"* | "win2003"* ) case "${name,,}" in *" evaluation"* ) id="$id-eval" ;; + *"hyper-v server"* ) id="$id-hv" ;; esac ;; esac @@ -749,6 +762,11 @@ getMido() { sum="6dae072e7f78f4ccab74a45341de0d6e2d45c39be25f1f5920a2ab4f51d7bcbb" url="https://software-download.microsoft.com/download/pr/17763.737.190906-2324.rs5_release_svc_refresh_SERVER_EVAL_x64FRE_en-us_1.iso" ;; + "win2019-hv" ) + size=3072712704 + sum="48e9b944518e5bbc80876a9a7ff99716f386f404f4be48dca47e16a66ae7872c" + url="https://software-download.microsoft.com/download/pr/17763.557.190612-0019.rs5_release_svc_refresh_SERVERHYPERCORE_OEM_x64FRE_en-us.ISO" + ;; "win2016-eval" ) size=6972221440 sum="1ce702a578a3cb1ac3d14873980838590f06d5b7101c5daaccbac9d73f1fb50f" @@ -1282,6 +1300,7 @@ prepareInstall() { [ -n "$PASSWORD" ] && password="$PASSWORD" [ -n "$USERNAME" ] && username=$(echo "$USERNAME" | sed 's/[^[:alnum:]@!._-]//g') + # These are not pirated keys, they come from the official MS documentation. if [[ "${driver,,}" == "xp" ]]; then if [[ "${arch,,}" == "x86" ]]; then # Windows XP Professional x86 generic key (no activation, trial-only) diff --git a/src/mido.sh b/src/mido.sh index 9e62f25..df6d147 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -208,6 +208,9 @@ download_windows_eval() { "win2022-eval" ) enterprise_type="server" windows_version="windows-server-2022" ;; + "win2019-hv" ) + enterprise_type="server" + windows_version="hyper-v-server-2019" ;; "win2019-eval" ) enterprise_type="server" windows_version="windows-server-2019" ;; @@ -335,7 +338,7 @@ getWindows() { "win11${PLATFORM,,}-enterprise"* | "win10${PLATFORM,,}-enterprise"* ) download_windows_eval "$version" "$lang" "$edition" && return 0 ;; - "win2025-eval" | "win2022-eval" | "win2019-eval" | "win2016-eval" | "win2012r2-eval" ) + "win2025-eval" | "win2022-eval" | "win2019-eval" | "win2019-hv" | "win2016-eval" | "win2012r2-eval" ) download_windows_eval "$version" "$lang" "$edition" && return 0 ;; "win7${PLATFORM,,}"* | "win81${PLATFORM,,}-enterprise"* | "win2008r2" ) From 777af02ed41701ab144cf9662c4cfb372f73b755 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 15 Mar 2025 14:25:11 +0100 Subject: [PATCH 137/290] fix: Format filesizes (#1116) --- Dockerfile | 2 +- readme.md | 4 ++++ src/install.sh | 18 +++++++++--------- src/mido.sh | 8 +++++--- 4 files changed, 19 insertions(+), 13 deletions(-) diff --git a/Dockerfile b/Dockerfile index ae17da2..5360ad1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:6.22 / / +COPY --from=qemux/qemu:7.00 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" diff --git a/readme.md b/readme.md index 9492054..880675d 100644 --- a/readme.md +++ b/readme.md @@ -396,6 +396,10 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas You can use [dockur/macos](https://github.com/dockur/macos) for that. It shares many of the same features, except for the automatic installation. +### How do I run a Linux desktop in a container? + + You can use [qemus/qemu](https://github.com/qemus/qemu) in that case. + ### Is this project legal? Yes, this project contains only open-source code and does not distribute any copyrighted material. Any product keys found in the code are just generic placeholders provided by Microsoft for trial purposes. So under all applicable laws, this project will be considered legal. diff --git a/src/install.sh b/src/install.sh index 003b302..1ff6a0e 100644 --- a/src/install.sh +++ b/src/install.sh @@ -250,12 +250,12 @@ extractESD() { mkdir -p "$dir" size=16106127360 - size_gb=$(( (size + 1073741823)/1073741824 )) + size_gb=$(formatBytes "$size") space=$(df --output=avail -B 1 "$dir" | tail -n 1) - space_gb=$(( (space + 1073741823)/1073741824 )) + space_gb=$(formatBytes "$space") if (( size > space )); then - error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." && return 1 + error "Not enough free space in $STORAGE, have $space_gb available but need at least $size_gb." && return 1 fi local esdImageCount @@ -341,16 +341,16 @@ extractImage() { mkdir -p "$dir" size=$(stat -c%s "$iso") - size_gb=$(( (size + 1073741823)/1073741824 )) + size_gb=$(formatBytes "$size") space=$(df --output=avail -B 1 "$dir" | tail -n 1) - space_gb=$(( (space + 1073741823)/1073741824 )) + space_gb=$(formatBytes "$space") if ((size<100000000)); then error "Invalid ISO file: Size is smaller than 100 MB" && return 1 fi if (( size > space )); then - error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." && return 1 + error "Not enough free space in $STORAGE, have $space_gb available but need at least $size_gb." && return 1 fi rm -rf "$dir" @@ -953,12 +953,12 @@ buildImage() { fi size=$(du -h -b --max-depth=0 "$dir" | cut -f1) - size_gb=$(( (size + 1073741823)/1073741824 )) + size_gb=$(formatBytes "$size") space=$(df --output=avail -B 1 "$TMP" | tail -n 1) - space_gb=$(( (space + 1073741823)/1073741824 )) + space_gb=$(formatBytes "$space") if (( size > space )); then - error "Not enough free space in $STORAGE, have $space_gb GB available but need at least $size_gb GB." && return 1 + error "Not enough free space in $STORAGE, have $space_gb available but need at least $size_gb." && return 1 fi if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then diff --git a/src/mido.sh b/src/mido.sh index df6d147..bbaa5c2 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -516,14 +516,15 @@ downloadFile() { local size="$4" local lang="$5" local desc="$6" - local rc total progress domain dots space folder + local rc total total_gb progress domain dots space folder rm -f "$iso" if [ -n "$size" ] && [[ "$size" != "0" ]]; then folder=$(dirname -- "$iso") space=$(df --output=avail -B 1 "$folder" | tail -n 1) - (( size > space )) && error "Not enough free space left to download file!" && return 1 + total_gb=$(formatBytes "$space") + (( size > space )) && error "Not enough free space to download file, only $total_gb left!" && return 1 fi # Check if running with interactive TTY or redirected to docker log @@ -553,8 +554,9 @@ downloadFile() { if (( rc == 0 )) && [ -f "$iso" ]; then total=$(stat -c%s "$iso") + total_gb=$(formatBytes "$total") if [ "$total" -lt 100000000 ]; then - error "Invalid download link: $url (is only $total bytes?). Please report this at $SUPPORT/issues." && return 1 + error "Invalid download link: $url (is only $total_gb ?). Please report this at $SUPPORT/issues." && return 1 fi verifyFile "$iso" "$size" "$total" "$sum" || return 1 html "Download finished successfully..." && return 0 From 5501437caab291b93b28fac200e74b08bd45e2e8 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 17 Mar 2025 16:46:38 +0100 Subject: [PATCH 138/290] feat: Switch to port 80 (#1121) --- Dockerfile | 3 +-- compose.yml | 2 +- kubernetes.yml | 2 +- readme.md | 4 ++-- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 5360ad1..96077e2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,7 +12,6 @@ RUN set -eu && \ apt-get --no-install-recommends -y install \ bc \ jq \ - curl \ 7zip \ wsdd \ samba \ @@ -38,7 +37,7 @@ ARG VERSION_ARG="0.00" RUN echo "$VERSION_ARG" > /run/version VOLUME /storage -EXPOSE 8006 3389 +EXPOSE 80 3389 ENV VERSION="11" ENV RAM_SIZE="4G" diff --git a/compose.yml b/compose.yml index e5b6257..eda192d 100644 --- a/compose.yml +++ b/compose.yml @@ -10,7 +10,7 @@ services: cap_add: - NET_ADMIN ports: - - 8006:8006 + - 8006:80 - 3389:3389/tcp - 3389:3389/udp volumes: diff --git a/kubernetes.yml b/kubernetes.yml index fa8eef0..5ed913f 100644 --- a/kubernetes.yml +++ b/kubernetes.yml @@ -82,7 +82,7 @@ spec: - name: http port: 8006 protocol: TCP - targetPort: 8006 + targetPort: 80 - name: rdp port: 3389 protocol: TCP diff --git a/readme.md b/readme.md index 880675d..2c93a25 100644 --- a/readme.md +++ b/readme.md @@ -41,7 +41,7 @@ services: cap_add: - NET_ADMIN ports: - - 8006:8006 + - 8006:80 - 3389:3389/tcp - 3389:3389/udp volumes: @@ -53,7 +53,7 @@ services: Via Docker CLI: ```bash -docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v ${PWD:-.}/windows:/storage --stop-timeout 120 dockurr/windows +docker run -it --rm --name windows -p 8006:80 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v ${PWD:-.}/windows:/storage --stop-timeout 120 dockurr/windows ``` Via Kubernetes: From 9ffc4647aab601067bf99fc69a292e5fb4c70ecd Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 18 Mar 2025 04:11:08 +0100 Subject: [PATCH 139/290] build: Update qemu-docker to v7.01 (#1122) --- Dockerfile | 5 ----- readme.md | 2 +- src/power.sh | 2 +- 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index 96077e2..6824f84 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,16 +10,11 @@ ARG DEBCONF_NONINTERACTIVE_SEEN="true" RUN set -eu && \ apt-get update && \ apt-get --no-install-recommends -y install \ - bc \ - jq \ - 7zip \ wsdd \ samba \ - xz-utils \ wimtools \ dos2unix \ cabextract \ - genisoimage \ libxml2-utils \ libarchive-tools && \ apt-get clean && \ diff --git a/readme.md b/readme.md index 2c93a25..9a7485a 100644 --- a/readme.md +++ b/readme.md @@ -78,7 +78,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas Very simple! These are the steps: - - Start the container and connect to [port 8006](http://localhost:8006) using your web browser. + - Start the container and connect to [port 8006](http://127.0.0.1:8006/) using your web browser. - Sit back and relax while the magic happens, the whole installation will be performed fully automatic. diff --git a/src/power.sh b/src/power.sh index e7ceaff..4252dd8 100644 --- a/src/power.sh +++ b/src/power.sh @@ -35,7 +35,7 @@ boot() { grep -Fq "BOOTMGR is missing" "$QEMU_PTY" && fail="y" fi if [ -z "$fail" ]; then - info "Windows started succesfully, visit http://localhost:8006/ to view the screen..." + info "Windows started succesfully, visit http://127.0.0.1:8006/ to view the screen..." return 0 fi fi From 156eaaa2da027d9bbe8c84de7b3ab7819fd133b7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 18 Mar 2025 04:46:27 +0100 Subject: [PATCH 140/290] build: Update qemu-docker to v7.01 (#1123) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 6824f84..0f99039 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.00 / / +COPY --from=qemux/qemu:7.01 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From c9abc7551ab871a6b4086356fc3cd05c5b403047 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 18 Mar 2025 05:19:44 +0100 Subject: [PATCH 141/290] fix: Remove port 80 (#1124) --- Dockerfile | 2 +- compose.yml | 2 +- kubernetes.yml | 2 +- readme.md | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 0f99039..808b127 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,7 +32,7 @@ ARG VERSION_ARG="0.00" RUN echo "$VERSION_ARG" > /run/version VOLUME /storage -EXPOSE 80 3389 +EXPOSE 3389 8006 ENV VERSION="11" ENV RAM_SIZE="4G" diff --git a/compose.yml b/compose.yml index eda192d..e5b6257 100644 --- a/compose.yml +++ b/compose.yml @@ -10,7 +10,7 @@ services: cap_add: - NET_ADMIN ports: - - 8006:80 + - 8006:8006 - 3389:3389/tcp - 3389:3389/udp volumes: diff --git a/kubernetes.yml b/kubernetes.yml index 5ed913f..fa8eef0 100644 --- a/kubernetes.yml +++ b/kubernetes.yml @@ -82,7 +82,7 @@ spec: - name: http port: 8006 protocol: TCP - targetPort: 80 + targetPort: 8006 - name: rdp port: 3389 protocol: TCP diff --git a/readme.md b/readme.md index 9a7485a..f1fe389 100644 --- a/readme.md +++ b/readme.md @@ -41,7 +41,7 @@ services: cap_add: - NET_ADMIN ports: - - 8006:80 + - 8006:8006 - 3389:3389/tcp - 3389:3389/udp volumes: @@ -53,7 +53,7 @@ services: Via Docker CLI: ```bash -docker run -it --rm --name windows -p 8006:80 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v ${PWD:-.}/windows:/storage --stop-timeout 120 dockurr/windows +docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v ${PWD:-.}/windows:/storage --stop-timeout 120 dockurr/windows ``` Via Kubernetes: From d3358f7345de5f99cd332a6e08b37b83cce69be3 Mon Sep 17 00:00:00 2001 From: Riaan Nolan <riaan.nolan@gmail.com> Date: Tue, 18 Mar 2025 20:13:37 +1000 Subject: [PATCH 142/290] fear: Add devcontainer (#1125) --- .devcontainer.json | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .devcontainer.json diff --git a/.devcontainer.json b/.devcontainer.json new file mode 100644 index 0000000..6ca0179 --- /dev/null +++ b/.devcontainer.json @@ -0,0 +1,4 @@ +{ + "service": "windows", + "dockerComposeFile": "compose.yml" +} From a995ecc1742f7a6b57d72ccdd0060447e501fa18 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 18 Mar 2025 11:17:27 +0100 Subject: [PATCH 143/290] feat: Add devcontainer (#1126) --- .devcontainer.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.devcontainer.json b/.devcontainer.json index 6ca0179..7c7b31f 100644 --- a/.devcontainer.json +++ b/.devcontainer.json @@ -1,4 +1,6 @@ { + "name": "windows", "service": "windows", + "forwardPorts": ["8006"], "dockerComposeFile": "compose.yml" } From c31c530f2b6337ed180731e54a00a42e81dfa69f Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 18 Mar 2025 14:02:31 +0100 Subject: [PATCH 144/290] docs: Github Codespaces (#1127) --- readme.md | 15 ++++++++++----- src/entry.sh | 3 ++- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/readme.md b/readme.md index f1fe389..07c7e3f 100644 --- a/readme.md +++ b/readme.md @@ -62,15 +62,20 @@ Via Kubernetes: kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/master/kubernetes.yml ``` +Via Github Codespaces: + +[`Click here to launch this container in the cloud!`](https://github.com/codespaces/new?skip_quickstart=true&machine=basicLinux32gb&repo=743140652&ref=master&devcontainer_path=.devcontainer.json) + ## Compatibility ⚙️ | **Product** | **Platform** | | |---|---|---| -| Docker Engine | Linux| ✅ | -| Docker Desktop | Linux | ❌ | -| Docker Desktop | macOS | ❌ | -| Docker Desktop | Windows 11 | ✅ | -| Docker Desktop | Windows 10 | ❌ | +| Docker Engine | Linux| ✅ | +| Docker Desktop | Linux | ❌ | +| Docker Desktop | macOS | ❌ | +| Docker Desktop | Windows 11 | ✅ | +| Docker Desktop | Windows 10 | ❌ | +| Github Codespaces | Cloud | ✅ | ## FAQ 💬 diff --git a/src/entry.sh b/src/entry.sh index be6335a..88d549f 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -7,9 +7,10 @@ set -Eeuo pipefail cd /run +. utils.sh # Load functions . reset.sh # Initialize system . define.sh # Define versions -. mido.sh # Download code +. mido.sh # Download Windows . install.sh # Run installation . disk.sh # Initialize disks . display.sh # Initialize graphics From 461be96ecd2b89d3a6b850c29dfe045d128461c2 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 18 Mar 2025 14:26:16 +0100 Subject: [PATCH 145/290] docs: Formatting (#1129) --- readme.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/readme.md b/readme.md index 07c7e3f..0c29966 100644 --- a/readme.md +++ b/readme.md @@ -26,7 +26,7 @@ Windows inside a Docker container. ## Usage 🐳 -Via Docker Compose: +##### Via Docker Compose: ```yaml services: @@ -50,19 +50,19 @@ services: stop_grace_period: 2m ``` -Via Docker CLI: +##### Via Docker CLI: ```bash docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v ${PWD:-.}/windows:/storage --stop-timeout 120 dockurr/windows ``` -Via Kubernetes: +##### Via Kubernetes: ```shell kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/master/kubernetes.yml ``` -Via Github Codespaces: +##### Via Github Codespaces: [`Click here to launch this container in the cloud!`](https://github.com/codespaces/new?skip_quickstart=true&machine=basicLinux32gb&repo=743140652&ref=master&devcontainer_path=.devcontainer.json) From f454fa7b34f1cf16498d5afbbf4bd9973fc07e2a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 18 Mar 2025 17:31:00 +0100 Subject: [PATCH 146/290] feat: Add entry to hosts file (#1131) --- assets/win10x64-enterprise-eval.xml | 5 +++++ assets/win10x64-enterprise.xml | 5 +++++ assets/win10x64-iot.xml | 5 +++++ assets/win10x64-ltsc.xml | 5 +++++ assets/win10x64.xml | 5 +++++ assets/win11x64-enterprise-eval.xml | 5 +++++ assets/win11x64-enterprise.xml | 5 +++++ assets/win11x64-iot.xml | 5 +++++ assets/win11x64-ltsc.xml | 5 +++++ assets/win11x64.xml | 5 +++++ assets/win2008r2-eval.xml | 5 +++++ assets/win2008r2.xml | 5 +++++ assets/win2012r2-eval.xml | 5 +++++ assets/win2012r2.xml | 5 +++++ assets/win2016-eval.xml | 5 +++++ assets/win2016.xml | 5 +++++ assets/win2019-eval.xml | 5 +++++ assets/win2019-hv.xml | 5 +++++ assets/win2019.xml | 5 +++++ assets/win2022-eval.xml | 5 +++++ assets/win2022.xml | 5 +++++ assets/win2025-eval.xml | 5 +++++ assets/win2025.xml | 5 +++++ assets/win7x64-enterprise-eval.xml | 5 +++++ assets/win7x64-enterprise.xml | 5 +++++ assets/win7x64-ultimate.xml | 5 +++++ assets/win7x64.xml | 5 +++++ assets/win7x86-enterprise.xml | 5 +++++ assets/win7x86-ultimate.xml | 5 +++++ assets/win7x86.xml | 5 +++++ assets/win81x64-enterprise-eval.xml | 5 +++++ assets/win81x64-enterprise.xml | 5 +++++ assets/win81x64.xml | 5 +++++ assets/winvistax64-enterprise.xml | 5 +++++ assets/winvistax64-ultimate.xml | 5 +++++ assets/winvistax64.xml | 5 +++++ assets/winvistax86-enterprise.xml | 5 +++++ assets/winvistax86-ultimate.xml | 5 +++++ assets/winvistax86.xml | 5 +++++ 39 files changed, 195 insertions(+) diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml index df17cbe..15cf47e 100644 --- a/assets/win10x64-enterprise-eval.xml +++ b/assets/win10x64-enterprise-eval.xml @@ -415,6 +415,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-enterprise.xml b/assets/win10x64-enterprise.xml index 5b60828..8523316 100644 --- a/assets/win10x64-enterprise.xml +++ b/assets/win10x64-enterprise.xml @@ -418,6 +418,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-iot.xml b/assets/win10x64-iot.xml index 9516684..fc80dc5 100644 --- a/assets/win10x64-iot.xml +++ b/assets/win10x64-iot.xml @@ -424,6 +424,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index 108db1f..8cdc2de 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -421,6 +421,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index 0b19f99..dbcbb51 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -418,6 +418,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index 034fd6a..fcfa7b4 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -453,6 +453,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index 284e510..173e091 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -456,6 +456,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml index 46c8bd7..1c35d05 100644 --- a/assets/win11x64-iot.xml +++ b/assets/win11x64-iot.xml @@ -456,6 +456,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml index 4d56000..e52ccc9 100644 --- a/assets/win11x64-ltsc.xml +++ b/assets/win11x64-ltsc.xml @@ -456,6 +456,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index fe14705..e5442ef 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -456,6 +456,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2008r2-eval.xml b/assets/win2008r2-eval.xml index ed35737..bd3d074 100644 --- a/assets/win2008r2-eval.xml +++ b/assets/win2008r2-eval.xml @@ -290,6 +290,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>19</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2008r2.xml b/assets/win2008r2.xml index bd75078..f1e87d6 100644 --- a/assets/win2008r2.xml +++ b/assets/win2008r2.xml @@ -293,6 +293,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>19</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>20</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2012r2-eval.xml b/assets/win2012r2-eval.xml index fcb7c32..b454f2a 100644 --- a/assets/win2012r2-eval.xml +++ b/assets/win2012r2-eval.xml @@ -308,6 +308,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2012r2.xml b/assets/win2012r2.xml index dea2c37..06c8030 100644 --- a/assets/win2012r2.xml +++ b/assets/win2012r2.xml @@ -311,6 +311,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index 66fc244..5a3f668 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -328,6 +328,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2016.xml b/assets/win2016.xml index 1336e3f..7300fed 100644 --- a/assets/win2016.xml +++ b/assets/win2016.xml @@ -331,6 +331,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index e9aebfd..6de9fd1 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -332,6 +332,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2019-hv.xml b/assets/win2019-hv.xml index 3ce3690..0f7990d 100644 --- a/assets/win2019-hv.xml +++ b/assets/win2019-hv.xml @@ -332,6 +332,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2019.xml b/assets/win2019.xml index aa43463..e07ef29 100644 --- a/assets/win2019.xml +++ b/assets/win2019.xml @@ -335,6 +335,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index 782752e..9059ab5 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -332,6 +332,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2022.xml b/assets/win2022.xml index 3b61f90..2cdfb86 100644 --- a/assets/win2022.xml +++ b/assets/win2022.xml @@ -335,6 +335,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml index ebeb7a5..52303b5 100644 --- a/assets/win2025-eval.xml +++ b/assets/win2025-eval.xml @@ -347,6 +347,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2025.xml b/assets/win2025.xml index 6ac67e4..bef8e3f 100644 --- a/assets/win2025.xml +++ b/assets/win2025.xml @@ -350,6 +350,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64-enterprise-eval.xml b/assets/win7x64-enterprise-eval.xml index fdfd002..4b7ce48 100644 --- a/assets/win7x64-enterprise-eval.xml +++ b/assets/win7x64-enterprise-eval.xml @@ -274,6 +274,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64-enterprise.xml b/assets/win7x64-enterprise.xml index 14c4060..f64a076 100644 --- a/assets/win7x64-enterprise.xml +++ b/assets/win7x64-enterprise.xml @@ -278,6 +278,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64-ultimate.xml b/assets/win7x64-ultimate.xml index f3c1ae3..aa8117d 100644 --- a/assets/win7x64-ultimate.xml +++ b/assets/win7x64-ultimate.xml @@ -278,6 +278,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64.xml b/assets/win7x64.xml index b9f2908..f0056e2 100644 --- a/assets/win7x64.xml +++ b/assets/win7x64.xml @@ -278,6 +278,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x86-enterprise.xml b/assets/win7x86-enterprise.xml index ef606e5..acf676f 100644 --- a/assets/win7x86-enterprise.xml +++ b/assets/win7x86-enterprise.xml @@ -278,6 +278,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x86-ultimate.xml b/assets/win7x86-ultimate.xml index f0748cd..c6beb01 100644 --- a/assets/win7x86-ultimate.xml +++ b/assets/win7x86-ultimate.xml @@ -278,6 +278,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x86.xml b/assets/win7x86.xml index c5cd323..74a9064 100644 --- a/assets/win7x86.xml +++ b/assets/win7x86.xml @@ -278,6 +278,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win81x64-enterprise-eval.xml b/assets/win81x64-enterprise-eval.xml index 2fe8c73..7aee42a 100644 --- a/assets/win81x64-enterprise-eval.xml +++ b/assets/win81x64-enterprise-eval.xml @@ -293,6 +293,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win81x64-enterprise.xml b/assets/win81x64-enterprise.xml index d6c72dc..d2d49fc 100644 --- a/assets/win81x64-enterprise.xml +++ b/assets/win81x64-enterprise.xml @@ -296,6 +296,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index e5e268e..d4b9d5c 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -303,6 +303,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax64-enterprise.xml b/assets/winvistax64-enterprise.xml index 50527a0..04a3f5b 100644 --- a/assets/winvistax64-enterprise.xml +++ b/assets/winvistax64-enterprise.xml @@ -252,6 +252,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax64-ultimate.xml b/assets/winvistax64-ultimate.xml index 14c627d..a391a96 100644 --- a/assets/winvistax64-ultimate.xml +++ b/assets/winvistax64-ultimate.xml @@ -252,6 +252,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax64.xml b/assets/winvistax64.xml index f753ea3..a2fda33 100644 --- a/assets/winvistax64.xml +++ b/assets/winvistax64.xml @@ -252,6 +252,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax86-enterprise.xml b/assets/winvistax86-enterprise.xml index d087355..2dc58fa 100644 --- a/assets/winvistax86-enterprise.xml +++ b/assets/winvistax86-enterprise.xml @@ -252,6 +252,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax86-ultimate.xml b/assets/winvistax86-ultimate.xml index 417722e..b7d35cc 100644 --- a/assets/winvistax86-ultimate.xml +++ b/assets/winvistax86-ultimate.xml @@ -252,6 +252,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax86.xml b/assets/winvistax86.xml index 172e5dd..3bec2e6 100644 --- a/assets/winvistax86.xml +++ b/assets/winvistax86.xml @@ -252,6 +252,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> + <Description>Add entry in hosts file</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> From a3a2b3fb095a080b9760e137edae47ff94a2ced3 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 18 Mar 2025 19:27:37 +0100 Subject: [PATCH 147/290] fix: Samba for user-mode networking (#1132) --- src/define.sh | 6 ++++++ src/install.sh | 2 ++ src/samba.sh | 10 ++++++++++ 3 files changed, 18 insertions(+) diff --git a/src/define.sh b/src/define.sh index 1b70ad0..8515790 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1491,6 +1491,12 @@ prepareInstall() { echo "" echo "Call Domain.MoveHere(LocalAdminADsPath, \"$username\")" echo "" + echo "Set oFSO = CreateObject(\"Scripting.FileSystemObject\")" + echo "Set oHosts = oFSO.GetFile(\"C:\Windows\System32\drivers\etc\hosts\")" + echo "Set fileAPPEND = oFSO.OpenTextFile(\"C:\Windows\System32\drivers\etc\hosts\", 8, true)" + echo "fileAPPEND.Write(\"${VM_NET_IP%.*}.1 host.lan\")" + echo "fileAPPEND.Close()" + echo "" } | unix2dos > "$dir/\$OEM\$/admin.vbs" { echo "[COMMANDS]" diff --git a/src/install.sh b/src/install.sh index 1ff6a0e..8a6dfa1 100644 --- a/src/install.sh +++ b/src/install.sh @@ -628,6 +628,8 @@ updateXML() { local language="$2" local culture region user admin pass keyboard + sed -i "s/ 20.20.20.1 / ${VM_NET_IP%.*}.1 /g" "$asset" + [ -z "$HEIGHT" ] && HEIGHT="720" [ -z "$WIDTH" ] && WIDTH="1280" diff --git a/src/samba.sh b/src/samba.sh index 7105a89..2d96326 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -14,6 +14,10 @@ if [[ "$DHCP" == [Yy1]* ]]; then interface="$VM_NET_DEV" fi +if [[ "${NETWORK,,}" == "user"* ]]; then + interface="127.0.0.1" +fi + addShare() { local dir="$1" local name="$2" @@ -107,8 +111,14 @@ done if ! smbd; then error "Samba daemon failed to start!" smbd -i --debug-stdout || true +else + if [[ "${NETWORK,,}" == "user"* ]]; then + NET_OPTS="${NET_OPTS/,hostfwd/,guestfwd=tcp:${VM_NET_IP%.*}.1:445-tcp:127.0.0.1:445,hostfwd}" + fi fi +[[ "${NETWORK,,}" == "user"* ]] && return 0 + if [[ "${BOOT_MODE:-}" == "windows_legacy" ]]; then # Enable NetBIOS on Windows 7 and lower if ! nmbd; then From e5e71f67fa20046a29a5cb60a907f5353b37e54c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 19 Mar 2025 09:23:29 +0100 Subject: [PATCH 148/290] feat: Add devcontainer (#1134) --- .devcontainer.json | 2 +- Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.devcontainer.json b/.devcontainer.json index 7c7b31f..14d70b4 100644 --- a/.devcontainer.json +++ b/.devcontainer.json @@ -1,6 +1,6 @@ { "name": "windows", "service": "windows", - "forwardPorts": ["8006"], + "forwardPorts": [8006], "dockerComposeFile": "compose.yml" } diff --git a/Dockerfile b/Dockerfile index 808b127..8b9c70c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.01 / / +COPY --from=qemux/qemu:7.02 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From 522d646fa38256ed6fe9ce459fd9241268db98e6 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 19 Mar 2025 09:45:08 +0100 Subject: [PATCH 149/290] feat: Check if IP is specified (#1135) --- src/define.sh | 5 ++++- src/install.sh | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/define.sh b/src/define.sh index 8515790..80d1dfe 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1300,6 +1300,9 @@ prepareInstall() { [ -n "$PASSWORD" ] && password="$PASSWORD" [ -n "$USERNAME" ] && username=$(echo "$USERNAME" | sed 's/[^[:alnum:]@!._-]//g') + local ip="20.20.20.1" + [ -n "${VM_NET_IP:-}" ] && ip="${VM_NET_IP%.*}.1" + # These are not pirated keys, they come from the official MS documentation. if [[ "${driver,,}" == "xp" ]]; then if [[ "${arch,,}" == "x86" ]]; then @@ -1494,7 +1497,7 @@ prepareInstall() { echo "Set oFSO = CreateObject(\"Scripting.FileSystemObject\")" echo "Set oHosts = oFSO.GetFile(\"C:\Windows\System32\drivers\etc\hosts\")" echo "Set fileAPPEND = oFSO.OpenTextFile(\"C:\Windows\System32\drivers\etc\hosts\", 8, true)" - echo "fileAPPEND.Write(\"${VM_NET_IP%.*}.1 host.lan\")" + echo "fileAPPEND.Write(\"$ip host.lan\")" echo "fileAPPEND.Close()" echo "" } | unix2dos > "$dir/\$OEM\$/admin.vbs" diff --git a/src/install.sh b/src/install.sh index 8a6dfa1..a473e7b 100644 --- a/src/install.sh +++ b/src/install.sh @@ -628,7 +628,9 @@ updateXML() { local language="$2" local culture region user admin pass keyboard - sed -i "s/ 20.20.20.1 / ${VM_NET_IP%.*}.1 /g" "$asset" + if [ -n "${VM_NET_IP:-}" ]; then + sed -i "s/ 20.20.20.1 / ${VM_NET_IP%.*}.1 /g" "$asset" + fi [ -z "$HEIGHT" ] && HEIGHT="720" [ -z "$WIDTH" ] && WIDTH="1280" From b7ad0d3d88212ef525c145bd0fe669e0b12a1b0b Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 19 Mar 2025 13:58:45 +0100 Subject: [PATCH 150/290] fix: File sharing in user-mode (#1136) --- src/samba.sh | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index 2d96326..cf45311 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -111,14 +111,8 @@ done if ! smbd; then error "Samba daemon failed to start!" smbd -i --debug-stdout || true -else - if [[ "${NETWORK,,}" == "user"* ]]; then - NET_OPTS="${NET_OPTS/,hostfwd/,guestfwd=tcp:${VM_NET_IP%.*}.1:445-tcp:127.0.0.1:445,hostfwd}" - fi fi -[[ "${NETWORK,,}" == "user"* ]] && return 0 - if [[ "${BOOT_MODE:-}" == "windows_legacy" ]]; then # Enable NetBIOS on Windows 7 and lower if ! nmbd; then From 0c8943f5418c4161fe526b5cbec3a51fc5bd5c12 Mon Sep 17 00:00:00 2001 From: sequencerr <45060278+sequencerr@users.noreply.github.com> Date: Wed, 19 Mar 2025 23:42:24 +0100 Subject: [PATCH 151/290] fix: Prevent terminal control sequences (#1139) --- src/entry.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/entry.sh b/src/entry.sh index 88d549f..6fc3b48 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -32,7 +32,7 @@ info "Booting ${APP}${BOOT_DESC} using QEMU v$version..." terminal ( sleep 30; boot ) & tail -fn +0 "$QEMU_LOG" 2>/dev/null & -cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" & +cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" | sed 's/\x1B\[[=0-9;]*[a-z]//gi' & wait $! || : sleep 1 & wait $! From 972240061e3c075e47bbf51bc24a3f85b4ca9987 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 20 Mar 2025 00:41:09 +0100 Subject: [PATCH 152/290] fix: Rename bootmessage (#1140) --- src/entry.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/entry.sh b/src/entry.sh index 6fc3b48..d9c60e0 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -32,7 +32,8 @@ info "Booting ${APP}${BOOT_DESC} using QEMU v$version..." terminal ( sleep 30; boot ) & tail -fn +0 "$QEMU_LOG" 2>/dev/null & -cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" | sed 's/\x1B\[[=0-9;]*[a-z]//gi' & +cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" | \ +sed -e 's/\x1B\[[=0-9;]*[a-z]//gi' -e 's/failed to load Boot/skipped Boot/g' & wait $! || : sleep 1 & wait $! From 5d734616aa11e6629dbc2d873086e7cc9d52889e Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 20 Mar 2025 01:19:05 +0100 Subject: [PATCH 153/290] fix: Disable output buffering (#1141) --- src/entry.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/entry.sh b/src/entry.sh index d9c60e0..0095773 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -33,8 +33,9 @@ terminal ( sleep 30; boot ) & tail -fn +0 "$QEMU_LOG" 2>/dev/null & cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" | \ -sed -e 's/\x1B\[[=0-9;]*[a-z]//gi' -e 's/failed to load Boot/skipped Boot/g' & -wait $! || : +sed -u -e 's/\x1B\[[=0-9;]*[a-z]//gi' \ +-e 's/failed to load Boot/skipped Boot/g' \ +-e 's/0): Not Found/0)/g' & wait $! || : sleep 1 & wait $! [ ! -f "$QEMU_END" ] && finish 0 From e2be4f6d0c289b095ad517d058b1a7edaba75b62 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 20 Mar 2025 11:09:40 +0100 Subject: [PATCH 154/290] feat: Platform variable (#1143) --- Dockerfile | 2 +- src/define.sh | 1 - src/entry.sh | 1 + 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 8b9c70c..393d4a1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.02 / / +COPY --from=qemux/qemu:7.03 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" diff --git a/src/define.sh b/src/define.sh index 80d1dfe..1fbfcda 100644 --- a/src/define.sh +++ b/src/define.sh @@ -17,7 +17,6 @@ set -Eeuo pipefail : "${PASSWORD:=""}" MIRRORS=3 -PLATFORM="x64" parseVersion() { diff --git a/src/entry.sh b/src/entry.sh index 0095773..17b2147 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -2,6 +2,7 @@ set -Eeuo pipefail : "${APP:="Windows"}" +: "${PLATFORM:="x64"}" : "${BOOT_MODE:="windows"}" : "${SUPPORT:="https://github.com/dockur/windows"}" From 839900f495d07a7bcf1d02a54bc37c51fcf87ce6 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 20 Mar 2025 17:42:43 +0100 Subject: [PATCH 155/290] fix: Detect image platform (#1146) --- src/install.sh | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/install.sh b/src/install.sh index a473e7b..c2d423a 100644 --- a/src/install.sh +++ b/src/install.sh @@ -581,6 +581,11 @@ detectImage() { info "Detected: $desc" setXML "" && return 0 + if [[ "$DETECTED" == "win8x86"* ]] || [[ "$DETECTED" == "win81x86"* ]] \ + || [[ "$DETECTED" == "win10x86"* ]] || [[ "$DETECTED" == "win11x86"* ]]; then + error "The 32-bit version of $desc is not supported!" && return 1 + fi + msg="the answer file for $desc was not found ($DETECTED.xml)" local fallback="/run/assets/${DETECTED%%-*}.xml" @@ -726,7 +731,11 @@ addDriver() { if [ -z "$folder" ]; then desc=$(printVersion "$id" "$id") - warn "no \"$driver\" driver available for \"$desc\" !" && return 0 + if [[ "${id,,}" != *"x86"* ]]; then + warn "no \"$driver\" driver available for \"$desc\" !" && return 0 + else + warn "no \"$driver\" driver available for the 32-bit version of \"$desc\" !" && return 0 + fi fi [ ! -d "$path/$driver/$folder" ] && return 0 From 663a6b5da0886aac66d107f9c60142d965b37cfd Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 20 Mar 2025 20:03:51 +0100 Subject: [PATCH 156/290] docs: Add Podman (#1147) --- readme.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index 0c29966..09186b1 100644 --- a/readme.md +++ b/readme.md @@ -70,11 +70,13 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas | **Product** | **Platform** | | |---|---|---| -| Docker Engine | Linux| ✅ | -| Docker Desktop | Linux | ❌ | -| Docker Desktop | macOS | ❌ | +| Docker Engine | Linux | ✅ | +| Docker Desktop | Linux | ❌ | +| Docker Desktop | macOS | ❌ | | Docker Desktop | Windows 11 | ✅ | | Docker Desktop | Windows 10 | ❌ | +| Podman | Linux | ✅ | +| Podman Desktop | Linux | ✅ | | Github Codespaces | Cloud | ✅ | ## FAQ 💬 From 6f604dca8e86ea7312777cfe6c63e6ea2e7fcc10 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 20 Mar 2025 20:11:13 +0100 Subject: [PATCH 157/290] fix: Check image platform (#1148) --- src/install.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/install.sh b/src/install.sh index c2d423a..cc21f9a 100644 --- a/src/install.sh +++ b/src/install.sh @@ -581,8 +581,7 @@ detectImage() { info "Detected: $desc" setXML "" && return 0 - if [[ "$DETECTED" == "win8x86"* ]] || [[ "$DETECTED" == "win81x86"* ]] \ - || [[ "$DETECTED" == "win10x86"* ]] || [[ "$DETECTED" == "win11x86"* ]]; then + if[[ "$DETECTED" == "win81x86"* ]] || [[ "$DETECTED" == "win10x86"* ]]; then error "The 32-bit version of $desc is not supported!" && return 1 fi From 6bf854fc123f336f0343f429eef6f8ab0b387c2f Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 20 Mar 2025 20:15:06 +0100 Subject: [PATCH 158/290] fix: Detect image platform (#1149) --- src/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/install.sh b/src/install.sh index cc21f9a..57e39f7 100644 --- a/src/install.sh +++ b/src/install.sh @@ -581,7 +581,7 @@ detectImage() { info "Detected: $desc" setXML "" && return 0 - if[[ "$DETECTED" == "win81x86"* ]] || [[ "$DETECTED" == "win10x86"* ]]; then + if [[ "$DETECTED" == "win81x86"* ]] || [[ "$DETECTED" == "win10x86"* ]]; then error "The 32-bit version of $desc is not supported!" && return 1 fi From 7b31f538ba44e6a293c10c7d57ec1e6b85e73528 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 20 Mar 2025 23:07:24 +0100 Subject: [PATCH 159/290] docs: Compatibility chart (#1151) --- readme.md | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/readme.md b/readme.md index 09186b1..40d4811 100644 --- a/readme.md +++ b/readme.md @@ -68,16 +68,14 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ## Compatibility ⚙️ -| **Product** | **Platform** | | -|---|---|---| -| Docker Engine | Linux | ✅ | -| Docker Desktop | Linux | ❌ | -| Docker Desktop | macOS | ❌ | -| Docker Desktop | Windows 11 | ✅ | -| Docker Desktop | Windows 10 | ❌ | -| Podman | Linux | ✅ | -| Podman Desktop | Linux | ✅ | -| Github Codespaces | Cloud | ✅ | +| **Product** | **Linux** | **Win11** | **Win10** | **macOS** | +|---|---|---|---|---| +| Docker CLI | ✅ | ✅ | ❌ | ❌ | +| Docker Desktop | ❌ | ✅ | ❌ | ❌ | +| Podman CLI | ✅ | ✅ | ❌ | ❌ | +| Podman Desktop | ✅ | ✅ | ❌ | ❌ | +| Kubernetes | ✅ | ✅ | ❌ | ❌ | +| Github Codespaces | ✅ | ✅ | ✅ | ✅ | ## FAQ 💬 From d570eca629484fb997445de0c60c41702dacb3c6 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 20 Mar 2025 23:21:55 +0100 Subject: [PATCH 160/290] docs: KVM information (#1152) --- readme.md | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/readme.md b/readme.md index 40d4811..0bb2c3f 100644 --- a/readme.md +++ b/readme.md @@ -66,17 +66,6 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas [`Click here to launch this container in the cloud!`](https://github.com/codespaces/new?skip_quickstart=true&machine=basicLinux32gb&repo=743140652&ref=master&devcontainer_path=.devcontainer.json) -## Compatibility ⚙️ - -| **Product** | **Linux** | **Win11** | **Win10** | **macOS** | -|---|---|---|---|---| -| Docker CLI | ✅ | ✅ | ❌ | ❌ | -| Docker Desktop | ❌ | ✅ | ❌ | ❌ | -| Podman CLI | ✅ | ✅ | ❌ | ❌ | -| Podman Desktop | ✅ | ✅ | ❌ | ❌ | -| Kubernetes | ✅ | ✅ | ❌ | ❌ | -| Github Codespaces | ✅ | ✅ | ✅ | ✅ | - ## FAQ 💬 ### How do I use it? @@ -374,9 +363,16 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I verify if my system supports KVM? - Only Linux and Windows 11 support KVM virtualization, macOS and Windows 10 do not unfortunately. - - You can run the following commands in Linux to check your system: + First check if your software is compatible using this chart: + + | **Product** | **Linux** | **Win11** | **Win10** | **macOS** | + |---|---|---|---|---| + | Docker CLI | ✅ | ✅ | ❌ | ❌ | + | Docker Desktop | ❌ | ✅ | ❌ | ❌ | + | Podman CLI | ✅ | ✅ | ❌ | ❌ | + | Podman Desktop | ✅ | ✅ | ❌ | ❌ | + + After that you can run the following commands in Linux to check your system: ```bash sudo apt install cpu-checker @@ -391,11 +387,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas - you are not using a cloud provider, as most of them do not allow nested virtualization for their VPS's. - If you do not receive any error from `kvm-ok` but the container still complains about KVM, please check whether: - - - you are not using "Docker Desktop for Linux" as it does not support KVM, instead make use of Docker Engine directly. - - - it could help to add `privileged: true` to your compose file (or `sudo` to your `docker run` command), to rule out any permission issue. + If you did not receive any error from `kvm-ok` but the container still complains about a missing KVM device, it could help to add `privileged: true` to your compose file (or `sudo` to your `docker` command) to rule out any permission issue. ### How do I run macOS in a container? From 9fd266a09d058761fd22d25bb4f9af90e7a05800 Mon Sep 17 00:00:00 2001 From: Lars The <lars18th@users.noreply.github.com> Date: Fri, 21 Mar 2025 20:57:15 +0100 Subject: [PATCH 161/290] fix: Disable Hyper-V role (#1155) --- assets/win2019-hv.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/assets/win2019-hv.xml b/assets/win2019-hv.xml index 0f7990d..d07259d 100644 --- a/assets/win2019-hv.xml +++ b/assets/win2019-hv.xml @@ -159,6 +159,11 @@ <Path>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\CurrentVersion\NetworkList\Signatures\FirstNetwork" /v Category /t REG_DWORD /d 1 /f</Path> <Description>Set Network Location to Home</Description> </RunSynchronousCommand> + <RunSynchronousCommand wcm:action="add"> + <Order>2</Order> + <Path>dism.exe /online /Disable-Feature /FeatureName:Microsoft-Hyper-V /NoRestart</Path> + <Description>Disable Hyper-V role</Description> + </RunSynchronousCommand> </RunSynchronous> </component> <component name="Microsoft-Windows-ServerManager-SvrMgrNc" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS"> From 77a8e4d26e6957d92e2b317063e599b984ecbf63 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 21 Mar 2025 22:13:13 +0100 Subject: [PATCH 162/290] build: Update qemu-docker to v7.04 (#1157) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 393d4a1..2a9a274 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.03 / / +COPY --from=qemux/qemu:7.04 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From a9e3ffa4132dd96e26f7d1c7408fa33694d6da16 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 24 Mar 2025 14:10:30 +0100 Subject: [PATCH 163/290] fix: Remove non-printable characters (#1160) --- Dockerfile | 2 +- src/install.sh | 13 +++++++++++-- src/mido.sh | 1 + 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2a9a274..d731838 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.04 / / +COPY --from=qemux/qemu:7.05 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" diff --git a/src/install.sh b/src/install.sh index 57e39f7..2281d9e 100644 --- a/src/install.sh +++ b/src/install.sh @@ -16,6 +16,7 @@ skipInstall() { if [ -f "$previous" ]; then previous=$(<"$previous") + previous="${previous//[![:print:]]/}" if [ -n "$previous" ]; then previous="$STORAGE/$previous" if [[ "${previous,,}" != "${iso,,}" ]]; then @@ -1014,19 +1015,27 @@ bootWindows() { if [ -f "$STORAGE/windows.args" ]; then ARGS=$(<"$STORAGE/windows.args") + ARGS="${ARGS//[![:print:]]/}" ARGUMENTS="$ARGS ${ARGUMENTS:-}" fi if [ -s "$STORAGE/windows.type" ] && [ -f "$STORAGE/windows.type" ]; then - [ -z "${DISK_TYPE:-}" ] && DISK_TYPE=$(<"$STORAGE/windows.type") + if [ -z "${DISK_TYPE:-}" ]; then + DISK_TYPE=$(<"$STORAGE/windows.type") + DISK_TYPE="${DISK_TYPE//[![:print:]]/}" + fi fi if [ -s "$STORAGE/windows.mode" ] && [ -f "$STORAGE/windows.mode" ]; then BOOT_MODE=$(<"$STORAGE/windows.mode") + BOOT_MODE="${BOOT_MODE//[![:print:]]/}" fi if [ -s "$STORAGE/windows.old" ] && [ -f "$STORAGE/windows.old" ]; then - [[ "${PLATFORM,,}" == "x64" ]] && MACHINE=$(<"$STORAGE/windows.old") + if [[ "${PLATFORM,,}" == "x64" ]]; then + MACHINE=$(<"$STORAGE/windows.old") + MACHINE="${MACHINE//[![:print:]]/}" + fi fi return 0 diff --git a/src/mido.sh b/src/mido.sh index bbaa5c2..37e075b 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -93,6 +93,7 @@ download_windows() { # uuidgen: For MacOS (installed by default) and other systems (e.g. with no /proc) that don't have a kernel interface for generating random UUIDs session_id=$(cat /proc/sys/kernel/random/uuid 2> /dev/null || uuidgen --random) + session_id="${session_id//[![:print:]]/}" # Get product edition ID for latest release of given Windows version # Product edition ID: This specifies both the Windows release (e.g. 22H2) and edition ("multi-edition" is default, either Home/Pro/Edu/etc., we select "Pro" in the answer files) in one number From db45817a7cc59f649eb4344daecae69671c502aa Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 25 Mar 2025 14:51:59 +0100 Subject: [PATCH 164/290] docs: Github Codespaces (#1165) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 0bb2c3f..8979628 100644 --- a/readme.md +++ b/readme.md @@ -64,7 +64,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ##### Via Github Codespaces: -[`Click here to launch this container in the cloud!`](https://github.com/codespaces/new?skip_quickstart=true&machine=basicLinux32gb&repo=743140652&ref=master&devcontainer_path=.devcontainer.json) +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new?repo=743140652&machine=basicLinux32gb) ## FAQ 💬 From 96fbb26d6f10b5bafd3cc346588154ac83754b49 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 26 Mar 2025 08:33:24 +0100 Subject: [PATCH 165/290] fix: Warn on invalid path (#1168) --- src/install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/install.sh b/src/install.sh index 2281d9e..217403e 100644 --- a/src/install.sh +++ b/src/install.sh @@ -206,7 +206,7 @@ detectCustom() { CUSTOM="" if [ -d "/$fname" ]; then - error "The file /$fname has an invalid path!" && return 1 + error "The file /$fname does not exist, please check that you mapped it to a valid path!" && return 1 fi file=$(find / -maxdepth 1 -type f -iname "$fname" | head -n 1) @@ -495,7 +495,7 @@ setXML() { local file="/custom.xml" if [ -d "$file" ]; then - warn "The file $file has an invalid path!" + warn "The file $file does not exist, please check that you mapped it to a valid path!" fi [ ! -f "$file" ] || [ ! -s "$file" ] && file="$STORAGE/custom.xml" From c081ec26935928c0bd37fa7dcf6d3d94b2abbf22 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 26 Mar 2025 14:45:37 +0100 Subject: [PATCH 166/290] feat: Additional download mirrors (#1170) --- src/define.sh | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/define.sh b/src/define.sh index 1fbfcda..aafd4de 100644 --- a/src/define.sh +++ b/src/define.sh @@ -887,7 +887,7 @@ getLink1() { sum="0b738b55a5ea388ad016535a5c8234daf2e5715a0638488ddd8a228a836055a1" url="7/en_windows_7_with_sp1_x64.iso" ;; - "win7x86" | "win7x86-enterprise" ) + "win7x86" | "win7x86-enterprise" | "win7x86-enterprise-eval" ) size=2434502656 sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad" url="7/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" @@ -971,7 +971,7 @@ getLink2() { sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808" url="Windows%207/en_windows_7_ultimate_with_sp1_x64_dvd_u_677332.iso" ;; - "win7x86" | "win7x86-enterprise" ) + "win7x86" | "win7x86-enterprise" | "win7x86-enterprise-eval" ) size=2434502656 sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad" url="Windows%207/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" @@ -1055,11 +1055,36 @@ getLink3() { sum="a11116c0645d892d6a5a7c585ecc1fa13aa66f8c7cc6b03bf1f27bd16860cc35" url="tiny-10-23-h2/tiny10%20x64%2023h2.iso" ;; + "win7x64" | "win7x64-enterprise" | "win7x64-enterprise-eval" ) + size=3182604288 + sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" + url="en_windows_7_enterprise_with_sp1_x64_dvd_u_677651_202006/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" + ;; + "win7x64-ultimate" ) + size=3320903680 + sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808" + url="win7-ult-sp1-english/Win7_Ult_SP1_English_x64.iso" + ;; + "win7x86" | "win7x86-enterprise" | "win7x86-enterprise-eval" ) + size=2434502656 + sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad" + url="en_windows_7_enterprise_with_sp1_x86_dvd_u_677710_202006/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" + ;; + "win7x86-ultimate" ) + size=2564476928 + sum="e2c009a66d63a742941f5087acae1aa438dcbe87010bddd53884b1af6b22c940" + url="win7-ult-sp1-english/Win7_Ult_SP1_English_x32.iso" + ;; "winxpx86" ) size=617756672 sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46" url="XPPRO_SP3_ENU/en_windows_xp_professional_with_service_pack_3_x86_cd_x14-80428.iso" ;; + "winxpx64" ) + size=614166528 + sum="8fac68e1e56c64ad9a2aa0ad464560282e67fa4f4dd51d09a66f4e548eb0f2d6" + url="windows-xp-all-sp-msdn-iso-files-en-de-ru-tr-x86-x64/en_win_xp_sp1_pro_x64_vl.iso" + ;; esac case "${ret,,}" in From ffcb4834523569449d3ea6f821acd84d914da90b Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 26 Mar 2025 19:55:08 +0100 Subject: [PATCH 167/290] fix: Update download links (#1172) --- Dockerfile | 2 +- src/define.sh | 5 ----- src/install.sh | 4 ++-- src/mido.sh | 4 ++-- 4 files changed, 5 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index d731838..93c3d50 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.05 / / +COPY --from=qemux/qemu:7.06 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" diff --git a/src/define.sh b/src/define.sh index aafd4de..33dabe7 100644 --- a/src/define.sh +++ b/src/define.sh @@ -741,11 +741,6 @@ getMido() { sum="2dedd44c45646c74efc5a028f65336027e14a56f76686a4631cf94ffe37c72f2" url="https://download.microsoft.com/download/B/9/9/B999286E-0A47-406D-8B3D-5B5AD7373A4A/9600.17050.WINBLUE_REFRESH.140317-1640_X64FRE_ENTERPRISE_EVAL_EN-US-IR3_CENA_X64FREE_EN-US_DV9.ISO" ;; - "win7x64" | "win7x64-enterprise-eval" ) - size=3121248256 - sum="2c16c73388a5c02a0ec4cd8b9e5c14ba28b7b45d13d0c9c7d44459feecc0385f" - url="http://care.dlservice.microsoft.com/dl/download/evalx/win7/x64/EN/7600.16385.090713-1255_x64fre_enterprise_en-us_EVAL_Eval_Enterprise-GRMCENXEVAL_EN_DVD.iso" - ;; "win2025-eval" ) size=6014152704 sum="d0ef4502e350e3c6c53c15b1b3020d38a5ded011bf04998e950720ac8579b23d" diff --git a/src/install.sh b/src/install.sh index 217403e..981e625 100644 --- a/src/install.sh +++ b/src/install.sh @@ -206,7 +206,7 @@ detectCustom() { CUSTOM="" if [ -d "/$fname" ]; then - error "The file /$fname does not exist, please check that you mapped it to a valid path!" && return 1 + error "The file /$fname does not exist, please make sure that you mapped it to a valid path!" && return 1 fi file=$(find / -maxdepth 1 -type f -iname "$fname" | head -n 1) @@ -495,7 +495,7 @@ setXML() { local file="/custom.xml" if [ -d "$file" ]; then - warn "The file $file does not exist, please check that you mapped it to a valid path!" + warn "The file $file does not exist, please make sure that you mapped it to a valid path!" fi [ ! -f "$file" ] || [ ! -s "$file" ] && file="$STORAGE/custom.xml" diff --git a/src/mido.sh b/src/mido.sh index 37e075b..a11e8aa 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -314,7 +314,7 @@ getWindows() { info "$msg" && html "$msg" case "${version,,}" in - "win2008r2" | "win7${PLATFORM,,}"* | "win81${PLATFORM,,}"* | "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* ) + "win2008r2" | "win81${PLATFORM,,}"* | "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* ) if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then error "No download in the $language language available for $edition!" MIDO_URL="" && return 1 @@ -342,7 +342,7 @@ getWindows() { "win2025-eval" | "win2022-eval" | "win2019-eval" | "win2019-hv" | "win2016-eval" | "win2012r2-eval" ) download_windows_eval "$version" "$lang" "$edition" && return 0 ;; - "win7${PLATFORM,,}"* | "win81${PLATFORM,,}-enterprise"* | "win2008r2" ) + "win81${PLATFORM,,}-enterprise"* | "win2008r2" ) ;; * ) error "Invalid VERSION specified, value \"$version\" is not recognized!" ;; esac From 90df2d88e36356bb1460a5d84061c1214b5d7d49 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 27 Mar 2025 01:51:12 +0100 Subject: [PATCH 168/290] docs: Github Codespaces (#1173) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 8979628..8c3884e 100644 --- a/readme.md +++ b/readme.md @@ -64,7 +64,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ##### Via Github Codespaces: -[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new?repo=743140652&machine=basicLinux32gb) +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/dockur/windows) ## FAQ 💬 From 81e9fff270a9304750ce42d4b90755304d57dd16 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 28 Mar 2025 20:33:37 +0100 Subject: [PATCH 169/290] build: Update to qemu-docker v7.07 (#1176) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 93c3d50..a483657 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.06 / / +COPY --from=qemux/qemu:7.07 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From 71c9586fb45de1518e148945e28e34a5f7485f31 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 3 Apr 2025 01:45:49 +0200 Subject: [PATCH 170/290] fix: Ignore missing custom .iso after install (#1180) --- src/install.sh | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/src/install.sh b/src/install.sh index 981e625..9c42bd7 100644 --- a/src/install.sh +++ b/src/install.sh @@ -10,6 +10,7 @@ EFISYS="efi/microsoft/boot/efisys_noprompt.bin" skipInstall() { local iso="$1" + local method="" local magic byte local boot="$STORAGE/windows.boot" local previous="$STORAGE/windows.base" @@ -18,14 +19,22 @@ skipInstall() { previous=$(<"$previous") previous="${previous//[![:print:]]/}" if [ -n "$previous" ]; then - previous="$STORAGE/$previous" - if [[ "${previous,,}" != "${iso,,}" ]]; then + if [[ "${STORAGE,,}/${previous,,}" != "${iso,,}" ]]; then if [ -f "$boot" ] && hasDisk; then - info "Detected that the version was changed, but ignoring this because Windows is already installed." - info "Please start with an empty /storage folder, if you want to install a different version of Windows." + if [[ "${iso,,}" == "${STORAGE,,}/windows."* ]]; then + method="your custom .iso file" + else + if [[ "${previous,,}" != "windows."* ]]; then + method="the VERSION variable" + fi + fi + if [ -n "$method" ]; then + info "Detected that $method was changed, but ignoring this because Windows is already installed." + info "Please start with an empty /storage folder, if you want to install a different version of Windows." + fi return 0 fi - [ -f "$previous" ] && rm -f "$previous" + rm -f "$STORAGE/$previous" return 1 fi fi @@ -200,13 +209,19 @@ abortInstall() { detectCustom() { - local file base + local dir file base local fname="custom.iso" + local boot="$STORAGE/windows.boot" CUSTOM="" - if [ -d "/$fname" ]; then - error "The file /$fname does not exist, please make sure that you mapped it to a valid path!" && return 1 + dir=$(find / -maxdepth 1 -type d -iname "$fname" | head -n 1) + [ ! -d "$dir" ] && dir=$(find "$STORAGE" -maxdepth 1 -type d -iname "$fname" | head -n 1) + + if [ -d "$dir" ]; then + if ! hasDisk || [ ! -f "$boot" ]; then + error "The bind $dir maps to a file that does not exist!" && return 1 + fi fi file=$(find / -maxdepth 1 -type f -iname "$fname" | head -n 1) @@ -495,7 +510,7 @@ setXML() { local file="/custom.xml" if [ -d "$file" ]; then - warn "The file $file does not exist, please make sure that you mapped it to a valid path!" + error "The bind $file maps to a file that does not exist!" && exit 67 fi [ ! -f "$file" ] || [ ! -s "$file" ] && file="$STORAGE/custom.xml" From 6c3ef15ffd2e2fea527fd803ddbf63440add689f Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 3 Apr 2025 02:03:46 +0200 Subject: [PATCH 171/290] docs: Manual installation (#1181) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 8c3884e..ea7efa2 100644 --- a/readme.md +++ b/readme.md @@ -256,7 +256,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas It's recommended to stick to the automatic installation, as it adjusts various settings to prevent common issues when running Windows inside a virtual environment. - However, if you insist on performing the installation manually on your own risk, add the following environment variable to your compose file: + However, if you insist on performing the installation manually at your own risk, add the following environment variable to your compose file: ```yaml environment: From 70a92d350313a9c67498c6e049c3022783fe9c0b Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 3 Apr 2025 02:06:22 +0200 Subject: [PATCH 172/290] docs: Product key (#1182) --- readme.md | 9 --------- 1 file changed, 9 deletions(-) diff --git a/readme.md b/readme.md index ea7efa2..6d1ad16 100644 --- a/readme.md +++ b/readme.md @@ -203,15 +203,6 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas KEYBOARD: "en-US" ``` -### How do I set the product key? - - By default, an evaluation version of Windows will be installed, but if you have a product key you can add a `KEY` variable like this (before installation): - - ```yaml - environment: - KEY: "xxxxx-xxxxx-xxxxx-xxxxx-xxxxx" - ``` - ### How do I select the edition? Windows Server offers a minimalistic Core edition without a GUI. To select those non-standard editions, you can add a `EDITION` variable like this (before installation): From aa16eeba6cd6aeb560208cd0f403c2df0e1c6cd7 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 3 Apr 2025 10:28:44 +0200 Subject: [PATCH 173/290] docs: Disk pass-through (#1183) --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 6d1ad16..f3ce933 100644 --- a/readme.md +++ b/readme.md @@ -329,12 +329,12 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I pass-through a disk? - It is possible to pass-through disk devices directly by adding them to your compose file in this way: + It is possible to pass-through disk devices or partitions directly by adding them to your compose file in this way: ```yaml devices: - /dev/sdb:/disk1 - - /dev/sdc:/disk2 + - /dev/sdc1:/disk2 ``` Use `/disk1` if you want it to become your main drive (which will be formatted during installation), and use `/disk2` and higher to add them as secondary drives (which will stay untouched). From de4bda71e235e3be53a89b75bc5360e9aa2ce6af Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 4 Apr 2025 01:29:45 +0200 Subject: [PATCH 174/290] build: Update qemu-docker to v7.08 (#1185) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index a483657..67f6139 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.07 / / +COPY --from=qemux/qemu:7.08 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From fa40d30e5def55c01692662e00e9bae90b536a12 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 6 Apr 2025 00:42:46 +0200 Subject: [PATCH 175/290] feat: Add Windows 2000 support (#1188) --- Dockerfile | 5 +- readme.md | 43 ++++----- src/define.sh | 248 ++++++++++++++++++++++++++++++------------------- src/install.sh | 83 ++++++++++++++--- src/mido.sh | 15 +++ 5 files changed, 263 insertions(+), 131 deletions(-) diff --git a/Dockerfile b/Dockerfile index 67f6139..047cb2e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.08 / / +COPY --from=qemux/qemu:7.09 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" @@ -16,7 +16,8 @@ RUN set -eu && \ dos2unix \ cabextract \ libxml2-utils \ - libarchive-tools && \ + libarchive-tools \ + netcat-openbsd && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* diff --git a/readme.md b/readme.md index f3ce933..dbbd035 100644 --- a/readme.md +++ b/readme.md @@ -91,28 +91,29 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas Select from the values below: - | **Value** | **Version** | **Size** | + | **Value** | **Version** | **Size** | |---|---|---| - | `11` | Windows 11 Pro | 5.4 GB | - | `11l` | Windows 11 LTSC | 4.7 GB | - | `11e` | Windows 11 Enterprise | 4.0 GB | + | `11` | Windows 11 Pro | 5.4 GB | + | `11l` | Windows 11 LTSC | 4.7 GB | + | `11e` | Windows 11 Enterprise | 4.0 GB | |||| - | `10` | Windows 10 Pro | 5.7 GB | - | `10l` | Windows 10 LTSC | 4.6 GB | - | `10e` | Windows 10 Enterprise | 5.2 GB | + | `10` | Windows 10 Pro | 5.7 GB | + | `10l` | Windows 10 LTSC | 4.6 GB | + | `10e` | Windows 10 Enterprise | 5.2 GB | |||| - | `8e` | Windows 8.1 Enterprise | 3.7 GB | - | `7e` | Windows 7 Enterprise | 3.0 GB | - | `ve` | Windows Vista Enterprise | 3.0 GB | - | `xp` | Windows XP Professional | 0.6 GB | - |||| - | `2025` | Windows Server 2025 | 5.6 GB | - | `2022` | Windows Server 2022 | 4.7 GB | - | `2019` | Windows Server 2019 | 5.3 GB | - | `2016` | Windows Server 2016 | 6.5 GB | - | `2012` | Windows Server 2012 | 4.3 GB | - | `2008` | Windows Server 2008 | 3.0 GB | - | `2003` | Windows Server 2003 | 0.6 GB | + | `8e` | Windows 8.1 Enterprise | 3.7 GB | + | `7e` | Windows 7 Enterprise | 3.0 GB | + | `ve` | Windows Vista Enterprise | 3.0 GB | + | `xp` | Windows XP Professional | 0.6 GB | + | `2k` | Windows 2000 Professional | 0.4 GB | + |||| + | `2025` | Windows Server 2025 | 5.6 GB | + | `2022` | Windows Server 2022 | 4.7 GB | + | `2019` | Windows Server 2019 | 5.3 GB | + | `2016` | Windows Server 2016 | 6.5 GB | + | `2012` | Windows Server 2012 | 4.3 GB | + | `2008` | Windows Server 2008 | 3.0 GB | + | `2003` | Windows Server 2003 | 0.6 GB | > [!TIP] > To install ARM64 versions of Windows use [dockur/windows-arm](https://github.com/dockur/windows-arm/). @@ -170,7 +171,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I configure the username and password? - By default, a user called `Docker` (with an empty password) is created during installation. + By default, a user called `Docker` is created during installation and its password is `admin`. If you want to use different credentials, you can configure them in your compose file (only before installation): @@ -258,7 +259,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas The web-viewer is mainly meant to be used during installation, as its picture quality is low, and it has no audio or clipboard for example. - So for a better experience you can connect using any Microsoft Remote Desktop client to the IP of the container, using the username `Docker` and by leaving the password empty. + So for a better experience you can connect using any Microsoft Remote Desktop client to the IP of the container, using the username `Docker` and password `admin`. There is a RDP client for [Android](https://play.google.com/store/apps/details?id=com.microsoft.rdc.androidx) available from the Play Store and one for [iOS](https://apps.apple.com/nl/app/microsoft-remote-desktop/id714464092?l=en-GB) in the Apple Store. For Linux you can use [FreeRDP](https://www.freerdp.com/) and on Windows just type `mstsc` in the search box. diff --git a/src/define.sh b/src/define.sh index 33dabe7..e2a3c1a 100644 --- a/src/define.sh +++ b/src/define.sh @@ -89,6 +89,9 @@ parseVersion() { "xp64" | "xpx64" | "5x64" | "winxp64" | "winxpx64" | "windowsxp64" | "windowsxpx64" ) VERSION="winxpx64" ;; + "2k" | "2000" | "win2k" | "win2000" | "windows2k" | "windows2000" ) + VERSION="win2kx86" + ;; "25" | "2025" | "win25" | "win2025" | "windows2025" | "windows 2025" ) VERSION="win2025-eval" ;; @@ -101,7 +104,7 @@ parseVersion() { "16" | "2016" | "win16" | "win2016" | "windows2016" | "windows 2016" ) VERSION="win2016-eval" ;; - "hv" | "hyperv" | "hyper v" | "hyper-v" | "19hv" | "2019hv" | "win2019hv") + "hv" | "hyperv" | "hyper v" | "hyper-v" | "19hv" | "2019hv" | "win2019hv" ) VERSION="win2019-hv" ;; "2012" | "2012r2" | "win2012" | "win2012r2" | "windows2012" | "windows 2012" ) @@ -912,6 +915,11 @@ getLink1() { sum="8fac68e1e56c64ad9a2aa0ad464560282e67fa4f4dd51d09a66f4e548eb0f2d6" url="xp/professional/en_win_xp_pro_x64_vl.iso" ;; + "win2kx86" ) + size=331701982 + sum="a93251b31f92316411bb48458a695d9051b13cdeba714c46f105012fdda45bf3" + url="2000/5.00.2195.6717_x86fre_client-professional_retail_en-us.7z" + ;; esac case "${ret,,}" in @@ -1080,6 +1088,10 @@ getLink3() { sum="8fac68e1e56c64ad9a2aa0ad464560282e67fa4f4dd51d09a66f4e548eb0f2d6" url="windows-xp-all-sp-msdn-iso-files-en-de-ru-tr-x86-x64/en_win_xp_sp1_pro_x64_vl.iso" ;; + "win2kx86" ) + size=386859008 + sum="e3816f6e80b66ff686ead03eeafffe9daf020a5e4717b8bd4736b7c51733ba22" + url="MicrosoftWindows2000BuildCollection/5.00.2195.6717_x86fre_client-professional_retail_en-us-ZRMPFPP_EN.iso" esac case "${ret,,}" in @@ -1216,89 +1228,104 @@ prepareInstall() { local driver="$4" local drivers="/tmp/drivers" - rm -rf "$drivers" - mkdir -p "$drivers" - ETFS="[BOOT]/Boot-NoEmul.img" if [ ! -f "$dir/$ETFS" ] || [ ! -s "$dir/$ETFS" ]; then error "Failed to locate file \"$ETFS\" in $desc ISO image!" && return 1 fi - local msg="Adding drivers to image..." - info "$msg" && html "$msg" - - if ! bsdtar -xf /drivers.txz -C "$drivers"; then - error "Failed to extract drivers!" && return 1 - fi - local arch target [ -d "$dir/AMD64" ] && arch="amd64" || arch="x86" [[ "${arch,,}" == "x86" ]] && target="$dir/I386" || target="$dir/AMD64" - if [ ! -f "$drivers/viostor/$driver/$arch/viostor.sys" ]; then - error "Failed to locate required storage drivers!" && return 1 + if [ ! -d "$target" ]; then + error "Failed to locate directory \"$target\" in $desc ISO image!" && return 1 fi - cp -L "$drivers/viostor/$driver/$arch/viostor.sys" "$target" || return 1 + if [[ "${driver,,}" == "xp" ]] || [[ "${driver,,}" == "2k3" ]]; then - mkdir -p "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1 - cp -L "$drivers/viostor/$driver/$arch/viostor.cat" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1 - cp -L "$drivers/viostor/$driver/$arch/viostor.inf" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1 - cp -L "$drivers/viostor/$driver/$arch/viostor.sys" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1 + local msg="Adding drivers to image..." + info "$msg" && html "$msg" + + rm -rf "$drivers" + mkdir -p "$drivers" + + if ! bsdtar -xf /drivers.txz -C "$drivers"; then + error "Failed to extract drivers!" && return 1 + fi + + if [ ! -f "$drivers/viostor/$driver/$arch/viostor.sys" ]; then + error "Failed to locate required storage drivers!" && return 1 + fi + + cp -L "$drivers/viostor/$driver/$arch/viostor.sys" "$target" || return 1 + + mkdir -p "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1 + cp -L "$drivers/viostor/$driver/$arch/viostor.cat" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1 + cp -L "$drivers/viostor/$driver/$arch/viostor.inf" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1 + cp -L "$drivers/viostor/$driver/$arch/viostor.sys" "$dir/\$OEM\$/\$1/Drivers/viostor" || return 1 + + if [ ! -f "$drivers/NetKVM/$driver/$arch/netkvm.sys" ]; then + error "Failed to locate required network drivers!" && return 1 + fi + + mkdir -p "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1 + cp -L "$drivers/NetKVM/$driver/$arch/netkvm.cat" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1 + cp -L "$drivers/NetKVM/$driver/$arch/netkvm.inf" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1 + cp -L "$drivers/NetKVM/$driver/$arch/netkvm.sys" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1 + + if [ ! -f "$target/TXTSETUP.SIF" ]; then + error "The file TXTSETUP.SIF could not be found!" && return 1 + fi + + sed -i '/^\[SCSI.Load\]/s/$/\nviostor=viostor.sys,4/' "$target/TXTSETUP.SIF" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\nviostor.sys=1,,,,,,4_,4,1,,,1,4/' "$target/TXTSETUP.SIF" + sed -i '/^\[SCSI\]/s/$/\nviostor=\"Red Hat VirtIO SCSI Disk Device\"/' "$target/TXTSETUP.SIF" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$target/TXTSETUP.SIF" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00020000=\"viostor\"/' "$target/TXTSETUP.SIF" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00021AF4=\"viostor\"/' "$target/TXTSETUP.SIF" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$target/TXTSETUP.SIF" + + if [ ! -d "$drivers/sata/xp/$arch" ]; then + error "Failed to locate required SATA drivers!" && return 1 + fi + + mkdir -p "$dir/\$OEM\$/\$1/Drivers/sata" || return 1 + cp -Lr "$drivers/sata/xp/$arch/." "$dir/\$OEM\$/\$1/Drivers/sata" || return 1 + cp -Lr "$drivers/sata/xp/$arch/." "$target" || return 1 + + sed -i '/^\[SCSI.Load\]/s/$/\niaStor=iaStor.sys,4/' "$target/TXTSETUP.SIF" + sed -i '/^\[FileFlags\]/s/$/\niaStor.sys = 16/' "$target/TXTSETUP.SIF" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.cat = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.inf = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,4_,4,1,,,1,4/' "$target/TXTSETUP.SIF" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaahci.cat = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaAHCI.inf = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" + sed -i '/^\[SCSI\]/s/$/\niaStor=\"Intel\(R\) SATA RAID\/AHCI Controller\"/' "$target/TXTSETUP.SIF" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_8086\&DEV_2922\&CC_0106=\"iaStor\"/' "$target/TXTSETUP.SIF" + + rm -rf "$drivers" - if [ ! -f "$drivers/NetKVM/$driver/$arch/netkvm.sys" ]; then - error "Failed to locate required network drivers!" && return 1 fi - mkdir -p "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1 - cp -L "$drivers/NetKVM/$driver/$arch/netkvm.cat" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1 - cp -L "$drivers/NetKVM/$driver/$arch/netkvm.inf" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1 - cp -L "$drivers/NetKVM/$driver/$arch/netkvm.sys" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1 - - if [ ! -f "$target/TXTSETUP.SIF" ]; then - error "The file TXTSETUP.SIF could not be found!" && return 1 - fi - - sed -i '/^\[SCSI.Load\]/s/$/\nviostor=viostor.sys,4/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\nviostor.sys=1,,,,,,4_,4,1,,,1,4/' "$target/TXTSETUP.SIF" - sed -i '/^\[SCSI\]/s/$/\nviostor=\"Red Hat VirtIO SCSI Disk Device\"/' "$target/TXTSETUP.SIF" - sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$target/TXTSETUP.SIF" - sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00020000=\"viostor\"/' "$target/TXTSETUP.SIF" - sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00021AF4=\"viostor\"/' "$target/TXTSETUP.SIF" - sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$target/TXTSETUP.SIF" - - if [ ! -d "$drivers/sata/xp/$arch" ]; then - error "Failed to locate required SATA drivers!" && return 1 - fi - - mkdir -p "$dir/\$OEM\$/\$1/Drivers/sata" || return 1 - cp -Lr "$drivers/sata/xp/$arch/." "$dir/\$OEM\$/\$1/Drivers/sata" || return 1 - cp -Lr "$drivers/sata/xp/$arch/." "$target" || return 1 - - sed -i '/^\[SCSI.Load\]/s/$/\niaStor=iaStor.sys,4/' "$target/TXTSETUP.SIF" - sed -i '/^\[FileFlags\]/s/$/\niaStor.sys = 16/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.cat = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.inf = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,4_,4,1,,,1,4/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaahci.cat = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaAHCI.inf = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" - sed -i '/^\[SCSI\]/s/$/\niaStor=\"Intel\(R\) SATA RAID\/AHCI Controller\"/' "$target/TXTSETUP.SIF" - sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_8086\&DEV_2922\&CC_0106=\"iaStor\"/' "$target/TXTSETUP.SIF" - - rm -rf "$drivers" - local pid file setup setup=$(find "$target" -maxdepth 1 -type f -iname setupp.ini | head -n 1) - pid=$(<"$setup") - pid="${pid:(-4)}" - pid="${pid:0:3}" - if [[ "$pid" == "270" ]]; then - warn "this version of $desc requires a volume license key (VLK), it will ask for one during installation." + if [ -n "$setup" ]; then + + pid=$(<"$setup") + pid="${pid:(-4)}" + pid="${pid:0:3}" + + if [[ "$pid" == "270" ]]; then + warn "this version of $desc requires a volume license key (VLK), it will ask for one during installation." + fi + fi + mkdir -p "$dir/\$OEM\$" + if ! addFolder "$dir"; then error "Failed to add OEM folder to image!" && return 1 fi @@ -1313,33 +1340,48 @@ prepareInstall() { XHEX=$(printf '%x\n' "$WIDTH") YHEX=$(printf '%x\n' "$HEIGHT") - local username="Docker" - local password="*" + local username="" + local password="" - [ -n "$PASSWORD" ] && password="$PASSWORD" [ -n "$USERNAME" ] && username=$(echo "$USERNAME" | sed 's/[^[:alnum:]@!._-]//g') + [ -z "$username" ] && username="Docker" + + [ -n "$PASSWORD" ] && password=$(echo "$PASSWORD" | sed 's/"//g') + [ -z "$password" ] && password="admin" local ip="20.20.20.1" [ -n "${VM_NET_IP:-}" ] && ip="${VM_NET_IP%.*}.1" # These are not pirated keys, they come from the official MS documentation. - if [[ "${driver,,}" == "xp" ]]; then - if [[ "${arch,,}" == "x86" ]]; then - # Windows XP Professional x86 generic key (no activation, trial-only) - [ -z "$KEY" ] && KEY="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y" - else - # Windows XP Professional x64 generic key (no activation, trial-only) - [ -z "$KEY" ] && KEY="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G" - fi - else - if [[ "${arch,,}" == "x86" ]]; then - # Windows Server 2003 Standard x86 generic key (no activation, trial-only) - [ -z "$KEY" ] && KEY="QKDCQ-TP2JM-G4MDG-VR6F2-P9C48" - else - # Windows Server 2003 Standard x64 generic key (no activation, trial-only) - [ -z "$KEY" ] && KEY="P4WJG-WK3W7-3HM8W-RWHCK-8JTRY" - fi - fi + case "${driver,,}" in + "xp" ) + + if [[ "${arch,,}" == "x86" ]]; then + # Windows XP Professional x86 generic key (no activation, trial-only) + [ -z "$KEY" ] && KEY="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y" + else + # Windows XP Professional x64 generic key (no activation, trial-only) + [ -z "$KEY" ] && KEY="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G" + fi ;; + + "2k3" ) + + if [[ "${arch,,}" == "x86" ]]; then + # Windows Server 2003 Standard x86 generic key (no activation, trial-only) + [ -z "$KEY" ] && KEY="QKDCQ-TP2JM-G4MDG-VR6F2-P9C48" + else + # Windows Server 2003 Standard x64 generic key (no activation, trial-only) + [ -z "$KEY" ] && KEY="P4WJG-WK3W7-3HM8W-RWHCK-8JTRY" + fi ;; + + "2k" ) + + # Windows 2000 Professional x86 generic key + KEY="G74HG-XXQTJ-RTX64-QKP3F-HKHXP" ;; + + * ) error "Unknown version: \"$driver\"" && return 1 ;; + + esac find "$target" -maxdepth 1 -type f -iname winnt.sif -exec rm {} \; @@ -1378,7 +1420,7 @@ prepareInstall() { echo " FullName=\"$username\"" echo " ComputerName=\"*\"" echo " OrgName=\"Windows for Docker\"" - echo " ProductKey=$KEY" + echo " ProductID=$KEY" echo "" echo "[Identification]" echo " JoinWorkgroup = WORKGROUP" @@ -1437,12 +1479,14 @@ prepareInstall() { echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]" echo "\"HideFileExt\"=dword:00000000" echo "" + echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer]" + echo "\"NoWelcomeScreen\"=\"1\"" + echo "" echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]" - echo "\"DefaultUserName\"=\"$username\"" - echo "\"DefaultDomainName\"=\"Dockur\"" - echo "\"AltDefaultUserName\"=\"$username\"" - echo "\"AltDefaultDomainName\"=\"Dockur\"" echo "\"AutoAdminLogon\"=\"1\"" + echo "\"DefaultUserName\"=\"$username\"" + echo "\"DefaultPassword\"=\"$password\"" + echo "\"DefaultDomainName\"=\"Dockur\"" echo "" echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video\{23A77BF7-ED96-40EC-AF06-9B1F4867732A}\0000]" echo "\"DefaultSettings.BitsPerPel\"=dword:00000020" @@ -1513,11 +1557,13 @@ prepareInstall() { echo "" echo "Call Domain.MoveHere(LocalAdminADsPath, \"$username\")" echo "" - echo "Set oFSO = CreateObject(\"Scripting.FileSystemObject\")" - echo "Set oHosts = oFSO.GetFile(\"C:\Windows\System32\drivers\etc\hosts\")" - echo "Set fileAPPEND = oFSO.OpenTextFile(\"C:\Windows\System32\drivers\etc\hosts\", 8, true)" - echo "fileAPPEND.Write(\"$ip host.lan\")" - echo "fileAPPEND.Close()" + echo "With (CreateObject(\"Scripting.FileSystemObject\"))" + echo " SysRoot = WshShell.ExpandEnvironmentStrings(\"%SystemRoot%\")" + echo " Set oFile = .OpenTextFile(SysRoot & \"\system32\drivers\etc\hosts\", 8, true)" + echo " oFile.Write(\"$ip host.lan\")" + echo " oFile.Close()" + echo " Set oFile = Nothing" + echo "End With" echo "" } | unix2dos > "$dir/\$OEM\$/admin.vbs" @@ -1614,7 +1660,9 @@ setMachine() { "win9"* ) ETFS="[BOOT]/Boot-1.44M.img" ;; "win2k"* ) - ETFS="[BOOT]/Boot-NoEmul.img" ;; + if ! prepareInstall "$iso" "$dir" "$desc" "2k"; then + error "Failed to prepare $desc ISO!" && return 1 + fi ;; "winxp"* ) if ! prepareInstall "$iso" "$dir" "$desc" "xp"; then error "Failed to prepare $desc ISO!" && return 1 @@ -1626,10 +1674,20 @@ setMachine() { esac case "${id,,}" in - "win9"* | "win2k"* ) + "win9"* ) + USB="no" + VGA="cirrus" DISK_TYPE="auto" + ADAPTER="rtl8139" MACHINE="pc-i440fx-2.4" BOOT_MODE="windows_legacy" ;; + "win2k"* ) + VGA="cirrus" + MACHINE="pc" + USB="pci-ohci" + DISK_TYPE="auto" + ADAPTER="rtl8139" + BOOT_MODE="windows_legacy" ;; "winxp"* | "win2003"* ) DISK_TYPE="blk" BOOT_MODE="windows_legacy" ;; diff --git a/src/install.sh b/src/install.sh index 9c42bd7..4e2244c 100644 --- a/src/install.sh +++ b/src/install.sh @@ -28,7 +28,7 @@ skipInstall() { method="the VERSION variable" fi fi - if [ -n "$method" ]; then + if [ -n "$method" ]; then info "Detected that $method was changed, but ignoring this because Windows is already installed." info "Please start with an empty /storage folder, if you want to install a different version of Windows." fi @@ -128,6 +128,8 @@ finishInstall() { rm -f "$STORAGE/windows.old" rm -f "$STORAGE/windows.vga" + rm -f "$STORAGE/windows.net" + rm -f "$STORAGE/windows.usb" rm -f "$STORAGE/windows.args" rm -f "$STORAGE/windows.base" rm -f "$STORAGE/windows.boot" @@ -170,10 +172,22 @@ finishInstall() { echo "$ARGS" > "$STORAGE/windows.args" fi + if [ -n "${VGA:-}" ] && [[ "${VGA:-}" != "virtio"* ]]; then + echo "$VGA" > "$STORAGE/windows.vga" + fi + + if [ -n "${USB:-}" ] && [[ "${USB:-}" != "qemu-xhci"* ]]; then + echo "$USB" > "$STORAGE/windows.usb" + fi + if [ -n "${DISK_TYPE:-}" ] && [[ "${DISK_TYPE:-}" != "scsi" ]]; then echo "$DISK_TYPE" > "$STORAGE/windows.type" fi + if [ -n "${ADAPTER:-}" ] && [[ "${ADAPTER:-}" != "virtio-net-pci" ]]; then + echo "$ADAPTER" > "$STORAGE/windows.net" + fi + rm -rf "$TMP" return 0 } @@ -185,6 +199,7 @@ abortInstall() { local efi [[ "${iso,,}" == *".esd" ]] && exit 60 + [[ "${UNPACK:-}" == [Yy1]* ]] && exit 60 efi=$(find "$dir" -maxdepth 1 -type d -iname efi | head -n 1) @@ -336,7 +351,7 @@ extractImage() { local dir="$2" local version="$3" local desc="local ISO" - local size size_gb space space_gb + local file size size_gb space space_gb if [ -z "$CUSTOM" ]; then desc="downloaded ISO" @@ -375,7 +390,26 @@ extractImage() { error "Failed to extract ISO file: $iso" && return 1 fi - LABEL=$(isoinfo -d -i "$iso" | sed -n 's/Volume id: //p') + if [[ "${UNPACK:-}" != [Yy1]* ]]; then + + LABEL=$(isoinfo -d -i "$iso" | sed -n 's/Volume id: //p') + + else + + file=$(find "$dir" -maxdepth 1 -type f -iname "*.iso" | head -n 1) + + if [ -z "$file" ]; then + error "Failed to find any .iso file in archive!" && return 1 + fi + + if ! 7z x "$file" -o"$dir" > /dev/null; then + error "Failed to extract archive!" && return 1 + fi + + LABEL=$(isoinfo -d -i "$file" | sed -n 's/Volume id: //p') + rm -f "$file" + + fi return 0 } @@ -689,16 +723,18 @@ updateXML() { sed -i "s/<Username>Docker<\/Username>/<Username>$user<\/Username>/g" "$asset" fi - if [ -n "$PASSWORD" ]; then - pass=$(printf '%s' "${PASSWORD}Password" | iconv -f utf-8 -t utf-16le | base64 -w 0) - admin=$(printf '%s' "${PASSWORD}AdministratorPassword" | iconv -f utf-8 -t utf-16le | base64 -w 0) - sed -i "s/<Value>password<\/Value>/<Value>$admin<\/Value>/g" "$asset" - sed -i "s/<PlainText>true<\/PlainText>/<PlainText>false<\/PlainText>/g" "$asset" - sed -z "s/<Password>...........<Value \/>/<Password>\n <Value>$pass<\/Value>/g" -i "$asset" - sed -z "s/<Password>...............<Value \/>/<Password>\n <Value>$pass<\/Value>/g" -i "$asset" - sed -z "s/<AdministratorPassword>...........<Value \/>/<AdministratorPassword>\n <Value>$admin<\/Value>/g" -i "$asset" - sed -z "s/<AdministratorPassword>...............<Value \/>/<AdministratorPassword>\n <Value>$admin<\/Value>/g" -i "$asset" - fi + [ -n "$PASSWORD" ] && pass="$PASSWORD" + [ -z "$pass" ] && pass="admin" + + pw=$(printf '%s' "${pass}Password" | iconv -f utf-8 -t utf-16le | base64 -w 0) + admin=$(printf '%s' "${pass}AdministratorPassword" | iconv -f utf-8 -t utf-16le | base64 -w 0) + + sed -i "s/<Value>password<\/Value>/<Value>$admin<\/Value>/g" "$asset" + sed -i "s/<PlainText>true<\/PlainText>/<PlainText>false<\/PlainText>/g" "$asset" + sed -z "s/<Password>...........<Value \/>/<Password>\n <Value>$pw<\/Value>/g" -i "$asset" + sed -z "s/<Password>...............<Value \/>/<Password>\n <Value>$pw<\/Value>/g" -i "$asset" + sed -z "s/<AdministratorPassword>...........<Value \/>/<AdministratorPassword>\n <Value>$admin<\/Value>/g" -i "$asset" + sed -z "s/<AdministratorPassword>...............<Value \/>/<AdministratorPassword>\n <Value>$admin<\/Value>/g" -i "$asset" if [ -n "$EDITION" ]; then [[ "${EDITION^^}" == "CORE" ]] && EDITION="STANDARDCORE" @@ -1034,6 +1070,27 @@ bootWindows() { ARGUMENTS="$ARGS ${ARGUMENTS:-}" fi + if [ -s "$STORAGE/windows.vga" ] && [ -f "$STORAGE/windows.vga" ]; then + if [ -z "${VGA:-}" ]; then + VGA=$(<"$STORAGE/windows.vga") + VGA="${VGA//[![:print:]]/}" + fi + fi + + if [ -s "$STORAGE/windows.usb" ] && [ -f "$STORAGE/windows.usb" ]; then + if [ -z "${USB:-}" ]; then + USB=$(<"$STORAGE/windows.usb") + USB="${USB//[![:print:]]/}" + fi + fi + + if [ -s "$STORAGE/windows.net" ] && [ -f "$STORAGE/windows.net" ]; then + if [ -z "${ADAPTER:-}" ]; then + ADAPTER=$(<"$STORAGE/windows.net") + ADAPTER="${ADAPTER//[![:print:]]/}" + fi + fi + if [ -s "$STORAGE/windows.type" ] && [ -f "$STORAGE/windows.type" ]; then if [ -z "${DISK_TYPE:-}" ]; then DISK_TYPE=$(<"$STORAGE/windows.type") diff --git a/src/mido.sh b/src/mido.sh index a11e8aa..95e92ac 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -472,6 +472,18 @@ getESD() { return 0 } +isCompressed() { + + local file="$1" + + case "${file,,}" in + *".7z" | *".zip" | *".rar" | *".lzma" | *".bz" | *".bz2" ) + return 0 ;; + esac + + return 1 +} + verifyFile() { local iso="$1" @@ -560,6 +572,7 @@ downloadFile() { error "Invalid download link: $url (is only $total_gb ?). Please report this at $SUPPORT/issues." && return 1 fi verifyFile "$iso" "$size" "$total" "$sum" || return 1 + isCompressed "$url" && UNPACK="Y" html "Download finished successfully..." && return 0 fi @@ -584,12 +597,14 @@ downloadImage() { local msg="Will retry after $delay seconds..." if [[ "${version,,}" == "http"* ]]; then + base=$(basename "$iso") desc=$(fromFile "$base") downloadFile "$iso" "$version" "" "" "" "$desc" && return 0 info "$msg" && html "$msg" && sleep "$delay" downloadFile "$iso" "$version" "" "" "" "$desc" && return 0 rm -f "$iso" + return 1 fi From d008b18d1d69d79cef3da2e766e8bcc19691c770 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 6 Apr 2025 08:36:54 +0200 Subject: [PATCH 176/290] feat: Don't display domain (#1190) --- src/install.sh | 3 +-- src/mido.sh | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/install.sh b/src/install.sh index 4e2244c..0ad4449 100644 --- a/src/install.sh +++ b/src/install.sh @@ -723,8 +723,7 @@ updateXML() { sed -i "s/<Username>Docker<\/Username>/<Username>$user<\/Username>/g" "$asset" fi - [ -n "$PASSWORD" ] && pass="$PASSWORD" - [ -z "$pass" ] && pass="admin" + [ -n "$PASSWORD" ] && pass="$PASSWORD" || pass="admin" pw=$(printf '%s' "${pass}Password" | iconv -f utf-8 -t utf-16le | base64 -w 0) admin=$(printf '%s' "${pass}AdministratorPassword" | iconv -f utf-8 -t utf-16le | base64 -w 0) diff --git a/src/mido.sh b/src/mido.sh index 95e92ac..1e4e630 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -529,6 +529,7 @@ downloadFile() { local size="$4" local lang="$5" local desc="$6" + local msg="Downloading $desc" local rc total total_gb progress domain dots space folder rm -f "$iso" @@ -547,8 +548,8 @@ downloadFile() { progress="--progress=dot:giga" fi - local msg="Downloading $desc" html "$msg..." + /run/progress.sh "$iso" "$size" "$msg ([P])..." & domain=$(echo "$url" | awk -F/ '{print $3}') dots=$(echo "$domain" | tr -cd '.' | wc -c) @@ -559,7 +560,6 @@ downloadFile() { fi info "$msg..." - /run/progress.sh "$iso" "$size" "$msg ([P])..." & { wget "$url" -O "$iso" -q --timeout=30 --no-http-keep-alive --show-progress "$progress"; rc=$?; } || : From 995d5eaec1cd25ab1aa8b676c139646fed4be33a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 8 Apr 2025 08:12:53 +0200 Subject: [PATCH 177/290] build: Update qemu-docker to v7.10 (#1195) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 047cb2e..12b784f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.09 / / +COPY --from=qemux/qemu:7.10 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From 67cd5db5bc1f41701a27cfe43ea70d3fce8af2bc Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 9 Apr 2025 08:20:38 +0200 Subject: [PATCH 178/290] fix: Avoid pipe to head on find (#1197) --- src/define.sh | 16 ++++++++-------- src/install.sh | 26 +++++++++++++------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/define.sh b/src/define.sh index e2a3c1a..c809806 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1215,7 +1215,7 @@ addFolder() { cp -Lr "$folder/." "$dest" || return 1 local file - file=$(find "$dest" -maxdepth 1 -type f -iname install.bat | head -n 1) + file=$(find "$dest" -maxdepth 1 -type f -iname install.bat -print -quit) [ -f "$file" ] && unix2dos -q "$file" return 0 @@ -1310,7 +1310,7 @@ prepareInstall() { fi local pid file setup - setup=$(find "$target" -maxdepth 1 -type f -iname setupp.ini | head -n 1) + setup=$(find "$target" -maxdepth 1 -type f -iname setupp.ini -print -quit) if [ -n "$setup" ]; then @@ -1606,20 +1606,20 @@ detectLegacy() { local dir="$1" local find find2 - find=$(find "$dir" -maxdepth 1 -type d -iname win95 | head -n 1) + find=$(find "$dir" -maxdepth 1 -type d -iname win95 -print -quit) [ -n "$find" ] && DETECTED="win95" && return 0 - find=$(find "$dir" -maxdepth 1 -type d -iname win98 | head -n 1) + find=$(find "$dir" -maxdepth 1 -type d -iname win98 -print -quit) [ -n "$find" ] && DETECTED="win98" && return 0 - find=$(find "$dir" -maxdepth 1 -type d -iname win9x | head -n 1) + find=$(find "$dir" -maxdepth 1 -type d -iname win9x -print -quit) [ -n "$find" ] && DETECTED="win9x" && return 0 - find=$(find "$dir" -maxdepth 1 -type f -iname cdrom_nt.5 | head -n 1) + find=$(find "$dir" -maxdepth 1 -type f -iname cdrom_nt.5 -print -quit) [ -n "$find" ] && DETECTED="win2k" && return 0 - find=$(find "$dir" -maxdepth 1 -type d -iname win51 | head -n 1) - find2=$(find "$dir" -maxdepth 1 -type f -iname setupxp.htm | head -n 1) + find=$(find "$dir" -maxdepth 1 -type d -iname win51 -print -quit) + find2=$(find "$dir" -maxdepth 1 -type f -iname setupxp.htm -print -quit) if [ -n "$find" ] || [ -n "$find2" ] || [ -f "$dir/WIN51AP" ] || [ -f "$dir/WIN51IC" ]; then [ -d "$dir/AMD64" ] && DETECTED="winxpx64" && return 0 diff --git a/src/install.sh b/src/install.sh index 0ad4449..1c973f3 100644 --- a/src/install.sh +++ b/src/install.sh @@ -201,7 +201,7 @@ abortInstall() { [[ "${iso,,}" == *".esd" ]] && exit 60 [[ "${UNPACK:-}" == [Yy1]* ]] && exit 60 - efi=$(find "$dir" -maxdepth 1 -type d -iname efi | head -n 1) + efi=$(find "$dir" -maxdepth 1 -type d -iname efi -print -quit) if [ -z "$efi" ]; then [[ "${PLATFORM,,}" == "x64" ]] && BOOT_MODE="windows_legacy" @@ -230,8 +230,8 @@ detectCustom() { CUSTOM="" - dir=$(find / -maxdepth 1 -type d -iname "$fname" | head -n 1) - [ ! -d "$dir" ] && dir=$(find "$STORAGE" -maxdepth 1 -type d -iname "$fname" | head -n 1) + dir=$(find / -maxdepth 1 -type d -iname "$fname" -print -quit) + [ ! -d "$dir" ] && dir=$(find "$STORAGE" -maxdepth 1 -type d -iname "$fname" -print -quit) if [ -d "$dir" ]; then if ! hasDisk || [ ! -f "$boot" ]; then @@ -239,8 +239,8 @@ detectCustom() { fi fi - file=$(find / -maxdepth 1 -type f -iname "$fname" | head -n 1) - [ ! -s "$file" ] && file=$(find "$STORAGE" -maxdepth 1 -type f -iname "$fname" | head -n 1) + file=$(find / -maxdepth 1 -type f -iname "$fname" -print -quit) + [ ! -s "$file" ] && file=$(find "$STORAGE" -maxdepth 1 -type f -iname "$fname" -print -quit) if [ ! -s "$file" ] && [[ "${VERSION,,}" != "http"* ]]; then base=$(basename "$VERSION") @@ -396,7 +396,7 @@ extractImage() { else - file=$(find "$dir" -maxdepth 1 -type f -iname "*.iso" | head -n 1) + file=$(find "$dir" -maxdepth 1 -type f -iname "*.iso" -print -quit) if [ -z "$file" ]; then error "Failed to find any .iso file in archive!" && return 1 @@ -591,14 +591,14 @@ detectImage() { fi local src wim info - src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1) + src=$(find "$dir" -maxdepth 1 -type d -iname sources -print -quit) if [ ! -d "$src" ]; then warn "failed to locate 'sources' folder in ISO image, $FB" && return 1 fi - wim=$(find "$src" -maxdepth 1 -type f -iname install.wim | head -n 1) - [ ! -f "$wim" ] && wim=$(find "$src" -maxdepth 1 -type f -iname install.esd | head -n 1) + wim=$(find "$src" -maxdepth 1 -type f -iname install.wim -print -quit) + [ ! -f "$wim" ] && wim=$(find "$src" -maxdepth 1 -type f -iname install.esd -print -quit) if [ ! -f "$wim" ]; then warn "failed to locate 'install.wim' or 'install.esd' in ISO image, $FB" && return 1 @@ -892,14 +892,14 @@ updateImage() { rm -rf "$tmp" mkdir -p "$tmp" - src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1) + src=$(find "$dir" -maxdepth 1 -type d -iname sources -print -quit) if [ ! -d "$src" ]; then error "failed to locate 'sources' folder in ISO image, $FB" && return 1 fi - wim=$(find "$src" -maxdepth 1 -type f -iname boot.wim | head -n 1) - [ ! -f "$wim" ] && wim=$(find "$src" -maxdepth 1 -type f -iname boot.esd | head -n 1) + wim=$(find "$src" -maxdepth 1 -type f -iname boot.wim -print -quit) + [ ! -f "$wim" ] && wim=$(find "$src" -maxdepth 1 -type f -iname boot.esd -print -quit) if [ ! -f "$wim" ]; then error "failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB" && return 1 @@ -962,7 +962,7 @@ updateImage() { local find="$file" [[ "$MANUAL" == [Yy1]* ]] && find="$org" - path=$(find "$dir" -maxdepth 1 -type f -iname "$find" | head -n 1) + path=$(find "$dir" -maxdepth 1 -type f -iname "$find" -print -quit) if [ -f "$path" ]; then if [[ "$MANUAL" != [Yy1]* ]]; then From fda0d7fbf9d617cf7a5675122fb1c10310e5132e Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 9 Apr 2025 09:33:42 +0200 Subject: [PATCH 179/290] feat: Check shared folder permissions (#1199) --- src/samba.sh | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index cf45311..10960b3 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -24,10 +24,11 @@ addShare() { local comment="$3" mkdir -p "$dir" || return 1 + ls -A "$dir" >/dev/null 2>&1 || return 1 if [ -z "$(ls -A "$dir")" ]; then - chmod 777 "$dir" + chmod 777 "$dir" || return 1 { echo "--------------------------------------------------------" echo " $APP for Docker v$(</run/version)..." @@ -91,10 +92,17 @@ share="/data" [ ! -d "$share" ] && [ -d "/shared" ] && share="/shared" [ ! -d "$share" ] && [ -d "$STORAGE/shared" ] && share="$STORAGE/shared" -addShare "$share" "Data" "Shared" || error "Failed to create shared folder!" +if ! addShare "$share" "Data" "Shared"; then + error "Failed to add shared folder '$share'. Please check its permissions." && return 0 +fi -[ -d "/data2" ] && addShare "/data2" "Data2" "Shared" -[ -d "/data3" ] && addShare "/data3" "Data3" "Shared" +if [ -d "/data2" ]; then + addShare "/data2" "Data2" "Shared" || error "Failed to add shared folder '/data2'. Please check its permissions." +fi + +if [ -d "/data3" ]; then + addShare "/data3" "Data3" "Shared" || error "Failed to add shared folder '/data3'. Please check its permissions." +fi IFS=',' read -r -a dirs <<< "${SHARES:-}" for dir in "${dirs[@]}"; do From a1e68622e9e5a25dde63b0e0e218a42f24f986ec Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 14 Apr 2025 12:46:21 +0200 Subject: [PATCH 180/290] fix: Disallow RDP login with blank password (#1202) --- assets/win10x64-enterprise-eval.xml | 5 ----- assets/win10x64-enterprise.xml | 5 ----- assets/win10x64-iot.xml | 5 ----- assets/win10x64-ltsc.xml | 5 ----- assets/win10x64.xml | 5 ----- assets/win11x64-enterprise-eval.xml | 5 ----- assets/win11x64-enterprise.xml | 5 ----- assets/win11x64-iot.xml | 5 ----- assets/win11x64-ltsc.xml | 5 ----- assets/win11x64.xml | 5 ----- assets/win2008r2-eval.xml | 5 ----- assets/win2008r2.xml | 5 ----- assets/win2012r2-eval.xml | 5 ----- assets/win2012r2.xml | 5 ----- assets/win2016-eval.xml | 5 ----- assets/win2016.xml | 5 ----- assets/win2019-eval.xml | 5 ----- assets/win2019-hv.xml | 5 ----- assets/win2019.xml | 5 ----- assets/win2022-eval.xml | 5 ----- assets/win2022.xml | 5 ----- assets/win2025-eval.xml | 5 ----- assets/win2025.xml | 5 ----- assets/win7x64-enterprise-eval.xml | 5 ----- assets/win7x64-enterprise.xml | 5 ----- assets/win7x64-ultimate.xml | 5 ----- assets/win7x64.xml | 5 ----- assets/win7x86-enterprise.xml | 5 ----- assets/win7x86-ultimate.xml | 5 ----- assets/win7x86.xml | 5 ----- assets/win81x64-enterprise-eval.xml | 5 ----- assets/win81x64-enterprise.xml | 5 ----- assets/win81x64.xml | 5 ----- assets/winvistax64-enterprise.xml | 5 ----- assets/winvistax64-ultimate.xml | 5 ----- assets/winvistax64.xml | 5 ----- assets/winvistax86-enterprise.xml | 5 ----- assets/winvistax86-ultimate.xml | 5 ----- assets/winvistax86.xml | 5 ----- src/define.sh | 3 --- 40 files changed, 198 deletions(-) diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml index 15cf47e..f91811f 100644 --- a/assets/win10x64-enterprise-eval.xml +++ b/assets/win10x64-enterprise-eval.xml @@ -323,11 +323,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win10x64-enterprise.xml b/assets/win10x64-enterprise.xml index 8523316..dc0b0d7 100644 --- a/assets/win10x64-enterprise.xml +++ b/assets/win10x64-enterprise.xml @@ -326,11 +326,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win10x64-iot.xml b/assets/win10x64-iot.xml index fc80dc5..08741af 100644 --- a/assets/win10x64-iot.xml +++ b/assets/win10x64-iot.xml @@ -332,11 +332,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index 8cdc2de..e3823a9 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -329,11 +329,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index dbcbb51..969ffe3 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -326,11 +326,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index fcfa7b4..39caac3 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -351,11 +351,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable SMB signing requirement</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>3</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index 173e091..1c18bf7 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -354,11 +354,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable SMB signing requirement</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>3</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml index 1c35d05..3ee4107 100644 --- a/assets/win11x64-iot.xml +++ b/assets/win11x64-iot.xml @@ -354,11 +354,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable SMB signing requirement</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>3</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml index e52ccc9..5bc5187 100644 --- a/assets/win11x64-ltsc.xml +++ b/assets/win11x64-ltsc.xml @@ -354,11 +354,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable SMB signing requirement</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>3</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index e5442ef..f3fc68c 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -354,11 +354,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable SMB signing requirement</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>3</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win2008r2-eval.xml b/assets/win2008r2-eval.xml index bd3d074..84467bd 100644 --- a/assets/win2008r2-eval.xml +++ b/assets/win2008r2-eval.xml @@ -203,11 +203,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win2008r2.xml b/assets/win2008r2.xml index f1e87d6..9ab119f 100644 --- a/assets/win2008r2.xml +++ b/assets/win2008r2.xml @@ -206,11 +206,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win2012r2-eval.xml b/assets/win2012r2-eval.xml index b454f2a..84bf8be 100644 --- a/assets/win2012r2-eval.xml +++ b/assets/win2012r2-eval.xml @@ -236,11 +236,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win2012r2.xml b/assets/win2012r2.xml index 06c8030..5eef789 100644 --- a/assets/win2012r2.xml +++ b/assets/win2012r2.xml @@ -239,11 +239,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index 5a3f668..45c1d82 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -236,11 +236,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win2016.xml b/assets/win2016.xml index 7300fed..019cd1c 100644 --- a/assets/win2016.xml +++ b/assets/win2016.xml @@ -239,11 +239,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index 6de9fd1..e6db2d9 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -240,11 +240,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win2019-hv.xml b/assets/win2019-hv.xml index d07259d..bb87975 100644 --- a/assets/win2019-hv.xml +++ b/assets/win2019-hv.xml @@ -245,11 +245,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win2019.xml b/assets/win2019.xml index e07ef29..5051f9f 100644 --- a/assets/win2019.xml +++ b/assets/win2019.xml @@ -243,11 +243,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index 9059ab5..a4ed208 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -240,11 +240,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win2022.xml b/assets/win2022.xml index 2cdfb86..71c07c9 100644 --- a/assets/win2022.xml +++ b/assets/win2022.xml @@ -243,11 +243,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml index 52303b5..d86f152 100644 --- a/assets/win2025-eval.xml +++ b/assets/win2025-eval.xml @@ -250,11 +250,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable SMB signing requirement</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>3</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win2025.xml b/assets/win2025.xml index bef8e3f..d488ae2 100644 --- a/assets/win2025.xml +++ b/assets/win2025.xml @@ -253,11 +253,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "RequireSecuritySignature" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable SMB signing requirement</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>3</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>4</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win7x64-enterprise-eval.xml b/assets/win7x64-enterprise-eval.xml index 4b7ce48..85b69e4 100644 --- a/assets/win7x64-enterprise-eval.xml +++ b/assets/win7x64-enterprise-eval.xml @@ -197,11 +197,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> diff --git a/assets/win7x64-enterprise.xml b/assets/win7x64-enterprise.xml index f64a076..84c873e 100644 --- a/assets/win7x64-enterprise.xml +++ b/assets/win7x64-enterprise.xml @@ -201,11 +201,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> diff --git a/assets/win7x64-ultimate.xml b/assets/win7x64-ultimate.xml index aa8117d..f17fb0e 100644 --- a/assets/win7x64-ultimate.xml +++ b/assets/win7x64-ultimate.xml @@ -201,11 +201,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> diff --git a/assets/win7x64.xml b/assets/win7x64.xml index f0056e2..be1f3a8 100644 --- a/assets/win7x64.xml +++ b/assets/win7x64.xml @@ -201,11 +201,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> diff --git a/assets/win7x86-enterprise.xml b/assets/win7x86-enterprise.xml index acf676f..e96e5a7 100644 --- a/assets/win7x86-enterprise.xml +++ b/assets/win7x86-enterprise.xml @@ -201,11 +201,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> diff --git a/assets/win7x86-ultimate.xml b/assets/win7x86-ultimate.xml index c6beb01..ce81d12 100644 --- a/assets/win7x86-ultimate.xml +++ b/assets/win7x86-ultimate.xml @@ -201,11 +201,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> diff --git a/assets/win7x86.xml b/assets/win7x86.xml index 74a9064..314c2ee 100644 --- a/assets/win7x86.xml +++ b/assets/win7x86.xml @@ -201,11 +201,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> diff --git a/assets/win81x64-enterprise-eval.xml b/assets/win81x64-enterprise-eval.xml index 7aee42a..f3a61e9 100644 --- a/assets/win81x64-enterprise-eval.xml +++ b/assets/win81x64-enterprise-eval.xml @@ -221,11 +221,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win81x64-enterprise.xml b/assets/win81x64-enterprise.xml index d2d49fc..bf927cc 100644 --- a/assets/win81x64-enterprise.xml +++ b/assets/win81x64-enterprise.xml @@ -224,11 +224,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index d4b9d5c..290e923 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -231,11 +231,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device" /v "DevicePasswordLessBuildVersion" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/winvistax64-enterprise.xml b/assets/winvistax64-enterprise.xml index 04a3f5b..1e3709c 100644 --- a/assets/winvistax64-enterprise.xml +++ b/assets/winvistax64-enterprise.xml @@ -150,11 +150,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> diff --git a/assets/winvistax64-ultimate.xml b/assets/winvistax64-ultimate.xml index a391a96..cb1d1c1 100644 --- a/assets/winvistax64-ultimate.xml +++ b/assets/winvistax64-ultimate.xml @@ -150,11 +150,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> diff --git a/assets/winvistax64.xml b/assets/winvistax64.xml index a2fda33..729e568 100644 --- a/assets/winvistax64.xml +++ b/assets/winvistax64.xml @@ -150,11 +150,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> diff --git a/assets/winvistax86-enterprise.xml b/assets/winvistax86-enterprise.xml index 2dc58fa..66efdf3 100644 --- a/assets/winvistax86-enterprise.xml +++ b/assets/winvistax86-enterprise.xml @@ -150,11 +150,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> diff --git a/assets/winvistax86-ultimate.xml b/assets/winvistax86-ultimate.xml index b7d35cc..5231d50 100644 --- a/assets/winvistax86-ultimate.xml +++ b/assets/winvistax86-ultimate.xml @@ -150,11 +150,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> diff --git a/assets/winvistax86.xml b/assets/winvistax86.xml index 3bec2e6..ef0ed47 100644 --- a/assets/winvistax86.xml +++ b/assets/winvistax86.xml @@ -150,11 +150,6 @@ <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" /v "AllowInsecureGuestAuth" /t REG_DWORD /d 1 /f</CommandLine> <Description>Allow guest access to network shares</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>2</Order> - <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v LimitBlankPasswordUse /t REG_DWORD /d 0 /f</CommandLine> - <Description>Allow RDP login with blank password</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>3</Order> <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> diff --git a/src/define.sh b/src/define.sh index c809806..5e497f0 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1470,9 +1470,6 @@ prepareInstall() { echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\GloballyOpenPorts\List]" echo "\"3389:TCP\"=\"3389:TCP:*:Enabled:@xpsp2res.dll,-22009\"" echo "" - echo "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]" - echo "\"LimitBlankPasswordUse\"=dword:00000000" - echo "" echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Tour]" echo "\"RunCount\"=dword:00000000" echo "" From 46a9295e204a8aaee0ab8dcebf83422d651136a4 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 14 Apr 2025 13:44:42 +0200 Subject: [PATCH 181/290] feat: Skip internet connection wizard on Windows 2000 (#1203) --- src/define.sh | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/src/define.sh b/src/define.sh index 5e497f0..e265142 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1315,11 +1315,19 @@ prepareInstall() { if [ -n "$setup" ]; then pid=$(<"$setup") - pid="${pid:(-4)}" - pid="${pid:0:3}" - if [[ "$pid" == "270" ]]; then - warn "this version of $desc requires a volume license key (VLK), it will ask for one during installation." + if [[ "$driver" == "2k" ]]; then + + echo "${pid:0:$((${#pid})) - 4}270" > "$setup" + + else + + pid="${pid:(-4)}" + + if [[ "${pid:0:3}" == "270" ]]; then + warn "this version of $desc requires a volume license key (VLK), it will ask for one during installation." + fi + fi fi @@ -1376,13 +1384,14 @@ prepareInstall() { "2k" ) - # Windows 2000 Professional x86 generic key - KEY="G74HG-XXQTJ-RTX64-QKP3F-HKHXP" ;; + KEY="" ;; * ) error "Unknown version: \"$driver\"" && return 1 ;; esac + [ -n "$KEY" ] && KEY="ProductID=$KEY" + find "$target" -maxdepth 1 -type f -iname winnt.sif -exec rm {} \; { echo "[Data]" @@ -1420,7 +1429,7 @@ prepareInstall() { echo " FullName=\"$username\"" echo " ComputerName=\"*\"" echo " OrgName=\"Windows for Docker\"" - echo " ProductID=$KEY" + echo " $KEY" echo "" echo "[Identification]" echo " JoinWorkgroup = WORKGROUP" @@ -1479,6 +1488,10 @@ prepareInstall() { echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer]" echo "\"NoWelcomeScreen\"=\"1\"" echo "" + echo "[HKEY_CURRENT_USER\Software\Microsoft\Internet Connection Wizard]" + echo "\"Completed\"=\"1\"" + echo "\"Desktopchanged\"=\"1\"" + echo "" echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]" echo "\"AutoAdminLogon\"=\"1\"" echo "\"DefaultUserName\"=\"$username\"" @@ -1502,11 +1515,18 @@ prepareInstall() { echo "" } | unix2dos > "$dir/\$OEM\$/install.reg" + if [[ "$driver" == "2k" ]]; then + { echo "[HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Runonce]" + echo "\"^SetupICWDesktop\"=-" + echo "" + } | unix2dos >> "$dir/\$OEM\$/install.reg" + fi + if [[ "$driver" == "2k3" ]]; then { echo "[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\srvWiz]" echo "@=dword:00000000" echo "" - echo "[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ServerOOBE\SecurityOOBE]" + echo "[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ServerOOBE\SecurityOOBE]" echo "\"DontLaunchSecurityOOBE\"=dword:00000000" echo "" } | unix2dos >> "$dir/\$OEM\$/install.reg" From 2d065f092d95f49e46bee80305c0494287880336 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 14 Apr 2025 20:12:37 +0200 Subject: [PATCH 182/290] feat: Support boot.iso files (#1204) --- readme.md | 2 +- src/install.sh | 21 ++++++++++++++++----- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/readme.md b/readme.md index dbbd035..95b128e 100644 --- a/readme.md +++ b/readme.md @@ -226,7 +226,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ```yaml volumes: - - ./example.iso:/custom.iso + - ./example.iso:/boot.iso ``` Replace the example path `./example.iso` with the filename of your desired ISO file. The value of `VERSION` will be ignored in this case. diff --git a/src/install.sh b/src/install.sh index 1c973f3..cb07df7 100644 --- a/src/install.sh +++ b/src/install.sh @@ -222,14 +222,12 @@ abortInstall() { return 1 } -detectCustom() { +findFile() { local dir file base - local fname="custom.iso" + local fname="$1" local boot="$STORAGE/windows.boot" - CUSTOM="" - dir=$(find / -maxdepth 1 -type d -iname "$fname" -print -quit) [ ! -d "$dir" ] && dir=$(find "$STORAGE" -maxdepth 1 -type d -iname "$fname" -print -quit) @@ -256,12 +254,25 @@ detectCustom() { [ -z "$size" ] || [[ "$size" == "0" ]] && return 0 ISO="$file" - CUSTOM="$ISO" + CUSTOM="$file" BOOT="$STORAGE/windows.$size.iso" return 0 } +detectCustom() { + + CUSTOM="" + + ! findFile "custom.iso" && return 1 + [ -n "$CUSTOM" ] && return 0 + + ! findFile "boot.iso" && return 1 + [ -n "$CUSTOM" ] && return 0 + + return 0 +} + extractESD() { local iso="$1" From a33a5f56dc0c6193bd3ad1175fc1639410228096 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 14 Apr 2025 21:00:29 +0200 Subject: [PATCH 183/290] build: Update qemu-docker to v7.11 (#1205) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 12b784f..588612d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.10 / / +COPY --from=qemux/qemu:7.11 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From 2bacbac1f9f48475540074527066bc5ea76b064d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 16 Apr 2025 12:00:38 +0200 Subject: [PATCH 184/290] docs: Add quotes around $PWD (#1206) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 95b128e..4189cc1 100644 --- a/readme.md +++ b/readme.md @@ -53,7 +53,7 @@ services: ##### Via Docker CLI: ```bash -docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v ${PWD:-.}/windows:/storage --stop-timeout 120 dockurr/windows +docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v "${PWD:-.}/windows:/storage" --stop-timeout 120 dockurr/windows ``` ##### Via Kubernetes: From 87f3fd119b00ef1c49c47e02958a5456abde4932 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 20 Apr 2025 11:38:21 +0200 Subject: [PATCH 185/290] feat: Set user agent for downloads (#1209) --- src/mido.sh | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/mido.sh b/src/mido.sh index 1e4e630..f2f9a94 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -530,9 +530,10 @@ downloadFile() { local lang="$5" local desc="$6" local msg="Downloading $desc" - local rc total total_gb progress domain dots space folder + local rc total total_gb progress domain dots agent space folder rm -f "$iso" + agent=$(get_agent) if [ -n "$size" ] && [[ "$size" != "0" ]]; then folder=$(dirname -- "$iso") @@ -561,7 +562,7 @@ downloadFile() { info "$msg..." - { wget "$url" -O "$iso" -q --timeout=30 --no-http-keep-alive --show-progress "$progress"; rc=$?; } || : + { wget "$url" -O "$iso" -q --timeout=30 --no-http-keep-alive --user-agent "$agent" --show-progress "$progress"; rc=$?; } || : fKill "progress.sh" @@ -569,7 +570,7 @@ downloadFile() { total=$(stat -c%s "$iso") total_gb=$(formatBytes "$total") if [ "$total" -lt 100000000 ]; then - error "Invalid download link: $url (is only $total_gb ?). Please report this at $SUPPORT/issues." && return 1 + error "Invalid download link: $url (is only $total_gb ?). Please report this at $SUPPORT/issues" && return 1 fi verifyFile "$iso" "$size" "$total" "$sum" || return 1 isCompressed "$url" && UNPACK="Y" @@ -579,7 +580,7 @@ downloadFile() { msg="Failed to download $url" (( rc == 3 )) && error "$msg , cannot write file (disk full?)" && return 1 (( rc == 4 )) && error "$msg , network failure!" && return 1 - (( rc == 8 )) && error "$msg , server issued an error response! Please report this at $SUPPORT/issues." && return 1 + (( rc == 8 )) && error "$msg , server issued an error response! Please report this at $SUPPORT/issues" && return 1 error "$msg , reason: $rc" return 1 From 366305a4b19bd69578a178f6966917b5c99e3ca0 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 20 Apr 2025 12:45:47 +0200 Subject: [PATCH 186/290] feat: Additional download mirrors (#1210) --- readme.md | 4 +- src/define.sh | 136 ++++++++++++++++++++++++++++++-------------------- 2 files changed, 84 insertions(+), 56 deletions(-) diff --git a/readme.md b/readme.md index 4189cc1..f628066 100644 --- a/readme.md +++ b/readme.md @@ -102,8 +102,8 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas | `10e` | Windows 10 Enterprise | 5.2 GB | |||| | `8e` | Windows 8.1 Enterprise | 3.7 GB | - | `7e` | Windows 7 Enterprise | 3.0 GB | - | `ve` | Windows Vista Enterprise | 3.0 GB | + | `7u` | Windows 7 Ultimate | 3.1 GB | + | `vu` | Windows Vista Ultimate | 3.0 GB | | `xp` | Windows XP Professional | 0.6 GB | | `2k` | Windows 2000 Professional | 0.4 GB | |||| diff --git a/src/define.sh b/src/define.sh index e265142..388b0ad 100644 --- a/src/define.sh +++ b/src/define.sh @@ -61,27 +61,45 @@ parseVersion() { "8e" | "81e" | "8.1e" | "win8e" | "win81e" | "windows 8e" ) VERSION="win81x64-enterprise-eval" ;; - "7" | "7e" | "win7" | "win7e" | "windows7" | "windows 7" ) + "7" | "win7" | "windows7" | "windows 7" ) VERSION="win7x64" - [ -z "$DETECTED" ] && DETECTED="win7x64-enterprise-eval" + [ -z "$DETECTED" ] && DETECTED="win7x64-ultimate" ;; "7u" | "win7u" | "windows7u" | "windows 7u" ) VERSION="win7x64-ultimate" ;; - "7x86" | "win7x86" | "windows7x86" | "win7x86-enterprise" ) + "7e" | "win7e" | "windows7e" | "windows 7e" ) + VERSION="win7x64-enterprise" + ;; + "7x86" | "win7x86" | "win732" | "windows7x86" ) VERSION="win7x86" - [ -z "$DETECTED" ] && DETECTED="win7x86-enterprise" + [ -z "$DETECTED" ] && DETECTED="win7x86-ultimate" ;; - "vista" | "ve" | "6" | "winvista" | "windowsvista" | "windows vista" ) + "7ux86" | "7u32" | "win7x86-ultimate" ) + VERSION="win7x86-ultimate" + ;; + "7ex86" | "7e32" | "win7x86-enterprise" ) + VERSION="win7x86-enterprise" + ;; + "vista" | "vs" | "6" | "winvista" | "windowsvista" | "windows vista" ) VERSION="winvistax64" - [ -z "$DETECTED" ] && DETECTED="winvistax64-enterprise" + [ -z "$DETECTED" ] && DETECTED="winvistax64-ultimate" ;; - "vistu" | "vu" | "6u" | "winvistu" | "windowsvistu" | "windows vistu" ) + "vistu" | "vu" | "6u" | "winvistu" ) VERSION="winvistax64-ultimate" ;; - "vistax86" | "vex86" | "6x86" | "winvistax86" | "windowsvistax86" | "winvistax86-enterprise" ) + "viste" | "ve" | "6e" | "winviste" ) + VERSION="winvistax64-enterprise" + ;; + "vistax86" | "vista32" | "6x86" | "winvistax86" | "windowsvistax86" ) VERSION="winvistax86" - [ -z "$DETECTED" ] && DETECTED="winvistax86-enterprise" + [ -z "$DETECTED" ] && DETECTED="winvistax86-ultimate" + ;; + "vux86" | "vu32" | "winvistax86-ultimate" ) + VERSION="winvistax86-ultimate" + ;; + "vex86" | "ve32" | "winvistax86-enterprise" ) + VERSION="winvistax86-enterprise" ;; "xp" | "xp32" | "xpx86" | "5" | "5x86" | "winxp" | "winxp86" | "windowsxp" | "windows xp" ) VERSION="winxpx86" @@ -875,32 +893,32 @@ getLink1() { sum="dfd9890881b7e832a927c38310fb415b7ea62ac5a896671f2ce2a111998f0df8" url="server/2008r2/en_windows_server_2008_r2_with_sp1_x64_dvd_617601-018.iso" ;; - "win7x64" | "win7x64-enterprise" | "win7x64-enterprise-eval" ) - size=3182604288 - sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" - url="7/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" - ;; - "win7x64-ultimate" ) + "win7x64" | "win7x64-ultimate" ) size=3320836096 sum="0b738b55a5ea388ad016535a5c8234daf2e5715a0638488ddd8a228a836055a1" url="7/en_windows_7_with_sp1_x64.iso" ;; - "win7x86" | "win7x86-enterprise" | "win7x86-enterprise-eval" ) - size=2434502656 - sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad" - url="7/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" + "win7x64-enterprise" | "win7x64-enterprise-eval" ) + size=3182604288 + sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" + url="7/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" ;; - "win7x86-ultimate" ) + "win7x86" | "win7x86-ultimate" ) size=2564411392 sum="99f3369c90160816be07093dbb0ac053e0a84e52d6ed1395c92ae208ccdf67e5" url="7/en_windows_7_with_sp1_x86.iso" ;; - "winvistax64-ultimate" ) + "win7x86-enterprise" | "win7x86-enterprise-eval" ) + size=2434502656 + sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad" + url="7/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" + ;; + "winvistax64" | "winvistax64-ultimate" ) size=3861460992 sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78" url="vista/en_windows_vista_sp2_x64_dvd_342267.iso" ;; - "winvistax86-ultimate" ) + "winvistax86" | "winvistax86-ultimate" ) size=3243413504 sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c" url="vista/en_windows_vista_with_sp2_x86_dvd_342266.iso" @@ -964,46 +982,46 @@ getLink2() { sum="dfd9890881b7e832a927c38310fb415b7ea62ac5a896671f2ce2a111998f0df8" url="Windows%20Server%202008%20R2/en_windows_server_2008_r2_with_sp1_x64_dvd_617601.iso" ;; - "win7x64" | "win7x64-enterprise" | "win7x64-enterprise-eval" ) - size=3182604288 - sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" - url="Windows%207/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" - ;; - "win7x64-ultimate" ) + "win7x64" | "win7x64-ultimate" ) size=3320903680 sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808" url="Windows%207/en_windows_7_ultimate_with_sp1_x64_dvd_u_677332.iso" ;; - "win7x86" | "win7x86-enterprise" | "win7x86-enterprise-eval" ) - size=2434502656 - sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad" - url="Windows%207/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" + "win7x64-enterprise" | "win7x64-enterprise-eval" ) + size=3182604288 + sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" + url="Windows%207/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" ;; - "win7x86-ultimate" ) + "win7x86" | "win7x86-ultimate" ) size=2564476928 sum="e2c009a66d63a742941f5087acae1aa438dcbe87010bddd53884b1af6b22c940" url="Windows%207/en_windows_7_ultimate_with_sp1_x86_dvd_u_677460.iso" ;; - "winvistax64" | "winvistax64-enterprise" ) - size=3205953536 - sum="0a0cd511b3eac95c6f081419c9c65b12317b9d6a8d9707f89d646c910e788016" - url="Windows%20Vista/en_windows_vista_enterprise_sp2_x64_dvd_342332.iso" + "win7x86-enterprise" | "win7x86-enterprise-eval" ) + size=2434502656 + sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad" + url="Windows%207/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" ;; - "winvistax64-ultimate" ) + "winvistax64" | "winvistax64-ultimate" ) size=3861460992 sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78" url="Windows%20Vista/en_windows_vista_sp2_x64_dvd_342267.iso" ;; - "winvistax86" | "winvistax86-enterprise" ) - size=2420981760 - sum="54e2720004041e7db988a391543ea5228b0affc28efcf9303d2d0ff9402067f5" - url="Windows%20Vista/en_windows_vista_enterprise_sp2_x86_dvd_342329.iso" + "winvistax64-enterprise" ) + size=3205953536 + sum="0a0cd511b3eac95c6f081419c9c65b12317b9d6a8d9707f89d646c910e788016" + url="Windows%20Vista/en_windows_vista_enterprise_sp2_x64_dvd_342332.iso" ;; - "winvistax86-ultimate" ) + "winvistax86" | "winvistax86-ultimate" ) size=3243413504 sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c" url="Windows%20Vista/en_windows_vista_with_sp2_x86_dvd_342266.iso" ;; + "winvistax86-enterprise" ) + size=2420981760 + sum="54e2720004041e7db988a391543ea5228b0affc28efcf9303d2d0ff9402067f5" + url="Windows%20Vista/en_windows_vista_enterprise_sp2_x86_dvd_342329.iso" + ;; "win2003r2" ) size=652367872 sum="74245cba888f935b138b106c2744bec7f392925b472358960a0b5643cd6abb32" @@ -1058,25 +1076,35 @@ getLink3() { sum="a11116c0645d892d6a5a7c585ecc1fa13aa66f8c7cc6b03bf1f27bd16860cc35" url="tiny-10-23-h2/tiny10%20x64%2023h2.iso" ;; - "win7x64" | "win7x64-enterprise" | "win7x64-enterprise-eval" ) - size=3182604288 - sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" - url="en_windows_7_enterprise_with_sp1_x64_dvd_u_677651_202006/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" - ;; - "win7x64-ultimate" ) + "win7x64" | "win7x64-ultimate" ) size=3320903680 sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808" url="win7-ult-sp1-english/Win7_Ult_SP1_English_x64.iso" ;; - "win7x86" | "win7x86-enterprise" | "win7x86-enterprise-eval" ) + "win7x64-enterprise" | "win7x64-enterprise-eval" ) + size=3182604288 + sum="ee69f3e9b86ff973f632db8e01700c5724ef78420b175d25bae6ead90f6805a7" + url="en_windows_7_enterprise_with_sp1_x64_dvd_u_677651_202006/en_windows_7_enterprise_with_sp1_x64_dvd_u_677651.iso" + ;; + "win7x86" | "win7x86-ultimate" ) + size=2564476928 + sum="e2c009a66d63a742941f5087acae1aa438dcbe87010bddd53884b1af6b22c940" + url="win7-ult-sp1-english/Win7_Ult_SP1_English_x32.iso" + ;; + "win7x86-enterprise" | "win7x86-enterprise-eval" ) size=2434502656 sum="8bdd46ff8cb8b8de9c4aba02706629c8983c45e87da110e64e13be17c8434dad" url="en_windows_7_enterprise_with_sp1_x86_dvd_u_677710_202006/en_windows_7_enterprise_with_sp1_x86_dvd_u_677710.iso" ;; - "win7x86-ultimate" ) - size=2564476928 - sum="e2c009a66d63a742941f5087acae1aa438dcbe87010bddd53884b1af6b22c940" - url="win7-ult-sp1-english/Win7_Ult_SP1_English_x32.iso" + "winvistax64" | "winvistax64-ultimate" ) + size=3861460992 + sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78" + url="en_windows_vista_sp2_x64_dvd_342267_202010/en_windows_vista_sp2_x64_dvd_342267.iso" + ;; + "winvistax86" | "winvistax86-ultimate" ) + size=3243413504 + sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c" + url="en_windows_vista_sp2_x86_dvd_342266/en_windows_vista_sp2_x86_dvd_342266.iso" ;; "winxpx86" ) size=617756672 From 338d857e56babec4f4fc92344f31043199549299 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 20 Apr 2025 19:31:27 +0200 Subject: [PATCH 187/290] feat: Additional download mirrors (#1212) --- Dockerfile | 2 +- src/define.sh | 109 +++++++++++++++++++++++++++++++++++-------------- src/install.sh | 2 +- 3 files changed, 80 insertions(+), 33 deletions(-) diff --git a/Dockerfile b/Dockerfile index 588612d..3e580f9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,7 +24,7 @@ RUN set -eu && \ COPY --chmod=755 ./src /run/ COPY --chmod=755 ./assets /run/assets -ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.45-0/virtio-win-1.9.45.tar.xz /drivers.txz +ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.45-0/virtio-win-1.9.45.tar.xz /var/drivers.txz FROM dockurr/windows-arm:${VERSION_ARG} AS build-arm64 FROM build-${TARGETARCH} diff --git a/src/define.sh b/src/define.sh index 388b0ad..c978f84 100644 --- a/src/define.sh +++ b/src/define.sh @@ -16,7 +16,7 @@ set -Eeuo pipefail : "${USERNAME:=""}" : "${PASSWORD:=""}" -MIRRORS=3 +MIRRORS=4 parseVersion() { @@ -1050,6 +1050,49 @@ getLink2() { getLink3() { + local id="$1" + local lang="$2" + local ret="$3" + local url="" + local sum="" + local size="" + local host="https://nixsys.com/drivers" + + [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 + + case "${id,,}" in + "win7x64" | "win7x64-ultimate" ) + size=3319478272 + sum="3286963e1476082ba882a5058c205c264772bead9e99e15cd1cb255f04b72900" + url="WINDOWS764_EN_DVD.iso" + ;; + "win7x86" | "win7x86-ultimate" ) + size=2564784128 + sum="bd4c03c917d00a40222d92a6fab04981a7bd46140bda1888eb961a322e3c5d89" + url="WINDOWS732_EN_DVD.iso" + ;; + "winxpx86" ) + size=618065920 + sum="8177d0137dfe4e8296a85793f140806c9250a5992c8e0e50158c742767ad1182" + url="WinXPsp3.iso" + ;; + "win2kx86" ) + size=387424256 + sum="08b11c3897eb38d1e6566a17cec5cdf2b3c620444e160e3db200a7e223aabbd8" + url="Windows_2000_SP4.iso" + esac + + case "${ret,,}" in + "sum" ) echo "$sum" ;; + "size" ) echo "$size" ;; + *) [ -n "$url" ] && echo "$host/$url";; + esac + + return 0 +} + +getLink4() { + local id="$1" local lang="$2" local ret="$3" @@ -1251,6 +1294,7 @@ addFolder() { prepareInstall() { + local pid="" local dir="$2" local desc="$3" local driver="$4" @@ -1278,7 +1322,7 @@ prepareInstall() { rm -rf "$drivers" mkdir -p "$drivers" - if ! bsdtar -xf /drivers.txz -C "$drivers"; then + if ! bsdtar -xf /var/drivers.txz -C "$drivers"; then error "Failed to extract drivers!" && return 1 fi @@ -1337,27 +1381,32 @@ prepareInstall() { fi - local pid file setup + local setup setup=$(find "$target" -maxdepth 1 -type f -iname setupp.ini -print -quit) if [ -n "$setup" ]; then pid=$(<"$setup") + pid="${pid%$'\r'}" + + case "$pid" in + *"000" | *"270" | *"OEM" ) ;; + * ) warn "unknown PID found in image: \"${pid:(-3)}\"" ;; + esac if [[ "$driver" == "2k" ]]; then - echo "${pid:0:$((${#pid})) - 4}270" > "$setup" + echo "${pid:0:$((${#pid})) - 3}270" > "$setup" else - pid="${pid:(-4)}" - - if [[ "${pid:0:3}" == "270" ]]; then + if [[ "$pid" != *"270" ]]; then + echo "${pid:0:$((${#pid})) - 3}000" > "$setup" + else warn "this version of $desc requires a volume license key (VLK), it will ask for one during installation." fi fi - fi mkdir -p "$dir/\$OEM\$" @@ -1388,35 +1437,33 @@ prepareInstall() { local ip="20.20.20.1" [ -n "${VM_NET_IP:-}" ] && ip="${VM_NET_IP%.*}.1" - # These are not pirated keys, they come from the official MS documentation. - case "${driver,,}" in - "xp" ) + if [ -z "$KEY" ] && [[ "$pid" != *"270" ]]; then - if [[ "${arch,,}" == "x86" ]]; then - # Windows XP Professional x86 generic key (no activation, trial-only) - [ -z "$KEY" ] && KEY="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y" - else - # Windows XP Professional x64 generic key (no activation, trial-only) - [ -z "$KEY" ] && KEY="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G" - fi ;; + # These are not pirated keys, they come from the official MS documentation. + case "${driver,,}" in + "xp" ) - "2k3" ) + if [[ "${arch,,}" == "x86" ]]; then + # Windows XP Professional x86 generic key (no activation, trial-only) + KEY="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y" + else + # Windows XP Professional x64 generic key (no activation, trial-only) + KEY="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G" + fi ;; - if [[ "${arch,,}" == "x86" ]]; then - # Windows Server 2003 Standard x86 generic key (no activation, trial-only) - [ -z "$KEY" ] && KEY="QKDCQ-TP2JM-G4MDG-VR6F2-P9C48" - else - # Windows Server 2003 Standard x64 generic key (no activation, trial-only) - [ -z "$KEY" ] && KEY="P4WJG-WK3W7-3HM8W-RWHCK-8JTRY" - fi ;; + "2k3" ) - "2k" ) + if [[ "${arch,,}" == "x86" ]]; then + # Windows Server 2003 Standard x86 generic key (no activation, trial-only) + KEY="QKDCQ-TP2JM-G4MDG-VR6F2-P9C48" + else + # Windows Server 2003 Standard x64 generic key (no activation, trial-only) + KEY="P4WJG-WK3W7-3HM8W-RWHCK-8JTRY" + fi ;; - KEY="" ;; + esac - * ) error "Unknown version: \"$driver\"" && return 1 ;; - - esac + fi [ -n "$KEY" ] && KEY="ProductID=$KEY" diff --git a/src/install.sh b/src/install.sh index cb07df7..5376cbc 100644 --- a/src/install.sh +++ b/src/install.sh @@ -834,7 +834,7 @@ addDrivers() { warn "Windows version unknown, falling back to Windows 11 drivers..." fi - if ! bsdtar -xf /drivers.txz -C "$drivers"; then + if ! bsdtar -xf /var/drivers.txz -C "$drivers"; then error "Failed to extract drivers from archive!" && return 1 fi From 196afb48ae65d18100853526d9b27e125ac69bcd Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 20 Apr 2025 20:32:57 +0200 Subject: [PATCH 188/290] feat: Additional download mirrors (#1213) --- src/define.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/define.sh b/src/define.sh index c978f84..4f09413 100644 --- a/src/define.sh +++ b/src/define.sh @@ -923,6 +923,11 @@ getLink1() { sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c" url="vista/en_windows_vista_with_sp2_x86_dvd_342266.iso" ;; + "win2003r2" ) + size=731650535 + sum="6b64bbae7eb00fd000cc887ffdc9f224d00c557daad7f756cfa373950b880dc8" + url="server/2003r2/en_win_srv_2003_r2_standard_x64_with_sp2_cd1_cd2.zip" + ;; "winxpx86" ) size=617756672 sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46" @@ -1149,6 +1154,11 @@ getLink4() { sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c" url="en_windows_vista_sp2_x86_dvd_342266/en_windows_vista_sp2_x86_dvd_342266.iso" ;; + "win2003r2" ) + size=652367872 + sum="74245cba888f935b138b106c2744bec7f392925b472358960a0b5643cd6abb32" + url="en_win_srv_2003_r2_standard_x64_with_sp2_cd1_x13-05757/en_win_srv_2003_r2_standard_x64_with_sp2_cd1_x13-05757.iso" + ;; "winxpx86" ) size=617756672 sum="62b6c91563bad6cd12a352aa018627c314cfc5162d8e9f8af0756a642e602a46" From bfb9c4b172498f968c3108689be961d2fad3270d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 21 Apr 2025 01:23:31 +0200 Subject: [PATCH 189/290] feat: Additional download mirrors (#1214) --- src/define.sh | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/src/define.sh b/src/define.sh index 4f09413..233f43d 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1124,6 +1124,76 @@ getLink4() { sum="a11116c0645d892d6a5a7c585ecc1fa13aa66f8c7cc6b03bf1f27bd16860cc35" url="tiny-10-23-h2/tiny10%20x64%2023h2.iso" ;; + "win11x64" ) + size=5819484160 + sum="b56b911bf18a2ceaeb3904d87e7c770bdf92d3099599d61ac2497b91bf190b11" + url="windows-11-24h2-x64/Windows%2011%2024H2%20x64.iso" + ;; + "win11x64-enterprise" | "win11x64-enterprise-eval" ) + size=6209064960 + sum="c8dbc96b61d04c8b01faf6ce0794fdf33965c7b350eaa3eb1e6697019902945c" + url="Windows11Enterprise23H2x64/22631.2428.231001-0608.23H2_NI_RELEASE_SVC_REFRESH_CLIENTENTERPRISEEVAL_OEMRET_x64FRE_en-us.iso" + ;; + "win11x64-iot" | "win11x64-enterprise-iot-eval" ) + size=5144817664 + sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" + url="Windows11LTSC/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" + ;; + "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) + size=5144817664 + sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" + url="Windows11LTSC/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" + ;; + "win10x64" | "win10x64-enterprise" | "win10x64-enterprise-eval" ) + size=6978310144 + sum="7847abd6f39abd02dc8089c4177d354f9eb66fa0ee2fe8ae20e596e675d1ab67" + url="Windows-10-22H2-July-2024-64-bit-DVD-English/en-us_windows_10_business_editions_version_22h2_updated_july_2024_x64_dvd_c004521a.iso" + ;; + "win10x64-iot" | "win10x64-enterprise-iot-eval" ) + size=4851668992 + sum="a0334f31ea7a3e6932b9ad7206608248f0bd40698bfb8fc65f14fc5e4976c160" + url="en-us_windows_10_iot_enterprise_ltsc_2021_x64_dvd_257ad90f_202411/en-us_windows_10_iot_enterprise_ltsc_2021_x64_dvd_257ad90f.iso" + ;; + "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) + size=4899461120 + sum="c90a6df8997bf49e56b9673982f3e80745058723a707aef8f22998ae6479597d" + url="en-us_windows_10_enterprise_ltsc_2021_x64_dvd_d289cf96_202302/en-us_windows_10_enterprise_ltsc_2021_x64_dvd_d289cf96.iso" + ;; + "win81x64" ) + size=4320526336 + sum="d8333cf427eb3318ff6ab755eb1dd9d433f0e2ae43745312c1cd23e83ca1ce51" + url="en_windows_8.1_with_update_x64_dvd_6051480/en_windows_8.1_with_update_x64_dvd_6051480.iso" + ;; + "win81x64-enterprise" | "win81x64-enterprise-eval" ) + size=4139163648 + sum="c3c604c03677504e8905090a8ce5bb1dde76b6fd58e10f32e3a25bef21b2abe1" + url="en_windows_8.1_enterprise_with_update_x64_dvd/en_windows_8.1_enterprise_with_update_x64_dvd_6054382.iso" + ;; + "win2022" | "win2022-eval" ) + size=5365624832 + sum="c3c57bb2cf723973a7dcfb1a21e97dfa035753a7f111e348ad918bb64b3114db" + url="win-server-2022/2227-January_2024/en-us_windows_server_2022_updated_jan_2024_x64_dvd_2b7a0c9f.iso" + ;; + "win2019" | "win2019-eval" ) + size=5575774208 + sum="0067afe7fdc4e61f677bd8c35a209082aa917df9c117527fc4b2b52a447e89bb" + url="sw-dvd-9-win-server-std-core-2019-1809.18-64-bit-english-dc-std-mlf-x-22-74330/SW_DVD9_Win_Server_STD_CORE_2019_1809.18_64Bit_English_DC_STD_MLF_X22-74330.ISO" + ;; + "win2016" | "win2016-eval" ) + size=6006587392 + sum="af06e5483c786c023123e325cea4775050324d9e1366f46850b515ae43f764be" + url="en_windows_server_2016_updated_feb_2018_x64_dvd_11636692/en_windows_server_2016_updated_feb_2018_x64_dvd_11636692.iso" + ;; + "win2012r2" | "win2012r2-eval" ) + size=5397889024 + sum="f351e89eb88a96af4626ceb3450248b8573e3ed5924a4e19ea891e6003b62e4e" + url="en_windows_server_2012_r2_with_update_x64_dvd_6052708_202006/en_windows_server_2012_r2_with_update_x64_dvd_6052708.iso" + ;; + "win2008r2" | "win2008r2-eval" ) + size=3166584832 + sum="dfd9890881b7e832a927c38310fb415b7ea62ac5a896671f2ce2a111998f0df8" + url="en_windows_server_2008_r2_with_sp1_x64_dvd_617601_202006/en_windows_server_2008_r2_with_sp1_x64_dvd_617601.iso" + ;; "win7x64" | "win7x64-ultimate" ) size=3320903680 sum="36f4fa2416d0982697ab106e3a72d2e120dbcdb6cc54fd3906d06120d0653808" @@ -1149,11 +1219,21 @@ getLink4() { sum="edf9f947c5791469fd7d2d40a5dcce663efa754f91847aa1d28ed7f585675b78" url="en_windows_vista_sp2_x64_dvd_342267_202010/en_windows_vista_sp2_x64_dvd_342267.iso" ;; + "winvistax64-enterprise" ) + size=3205953536 + sum="0a0cd511b3eac95c6f081419c9c65b12317b9d6a8d9707f89d646c910e788016" + url="en_windows_vista_enterprise_sp2_x64_dvd_342332_202007/en_windows_vista_enterprise_sp2_x64_dvd_342332.iso" + ;; "winvistax86" | "winvistax86-ultimate" ) size=3243413504 sum="9c36fed4255bd05a8506b2da88f9aad73643395e155e609398aacd2b5276289c" url="en_windows_vista_sp2_x86_dvd_342266/en_windows_vista_sp2_x86_dvd_342266.iso" ;; + "winvistax86-enterprise" ) + size=2420981760 + sum="54e2720004041e7db988a391543ea5228b0affc28efcf9303d2d0ff9402067f5" + url="en_windows_vista_enterprise_sp2_x86_dvd_342329_202007/en_windows_vista_enterprise_sp2_x86_dvd_342329.iso" + ;; "win2003r2" ) size=652367872 sum="74245cba888f935b138b106c2744bec7f392925b472358960a0b5643cd6abb32" From 5814473fe1384a11710f0ca20f8c3feddf0edbc6 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 22 Apr 2025 19:09:23 +0200 Subject: [PATCH 190/290] feat: Improve OS detection (#1219) --- src/define.sh | 205 +++++++++++++++++++++++++++++++------------------ src/install.sh | 2 +- 2 files changed, 130 insertions(+), 77 deletions(-) diff --git a/src/define.sh b/src/define.sh index 233f43d..bd41f80 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1385,6 +1385,7 @@ addFolder() { prepareInstall() { local pid="" + local file="" local dir="$2" local desc="$3" local driver="$4" @@ -1436,17 +1437,19 @@ prepareInstall() { cp -L "$drivers/NetKVM/$driver/$arch/netkvm.inf" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1 cp -L "$drivers/NetKVM/$driver/$arch/netkvm.sys" "$dir/\$OEM\$/\$1/Drivers/NetKVM" || return 1 - if [ ! -f "$target/TXTSETUP.SIF" ]; then + file=$(find "$target" -maxdepth 1 -type f -iname TXTSETUP.SIF -print -quit) + + if [ -z "$file" ]; then error "The file TXTSETUP.SIF could not be found!" && return 1 fi - sed -i '/^\[SCSI.Load\]/s/$/\nviostor=viostor.sys,4/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\nviostor.sys=1,,,,,,4_,4,1,,,1,4/' "$target/TXTSETUP.SIF" - sed -i '/^\[SCSI\]/s/$/\nviostor=\"Red Hat VirtIO SCSI Disk Device\"/' "$target/TXTSETUP.SIF" - sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$target/TXTSETUP.SIF" - sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00020000=\"viostor\"/' "$target/TXTSETUP.SIF" - sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00021AF4=\"viostor\"/' "$target/TXTSETUP.SIF" - sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$target/TXTSETUP.SIF" + sed -i '/^\[SCSI.Load\]/s/$/\nviostor=viostor.sys,4/' "$file" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\nviostor.sys=1,,,,,,4_,4,1,,,1,4/' "$file" + sed -i '/^\[SCSI\]/s/$/\nviostor=\"Red Hat VirtIO SCSI Disk Device\"/' "$file" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$file" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00020000=\"viostor\"/' "$file" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00021AF4=\"viostor\"/' "$file" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_1AF4\&DEV_1001\&SUBSYS_00000000=\"viostor\"/' "$file" if [ ! -d "$drivers/sata/xp/$arch" ]; then error "Failed to locate required SATA drivers!" && return 1 @@ -1456,49 +1459,104 @@ prepareInstall() { cp -Lr "$drivers/sata/xp/$arch/." "$dir/\$OEM\$/\$1/Drivers/sata" || return 1 cp -Lr "$drivers/sata/xp/$arch/." "$target" || return 1 - sed -i '/^\[SCSI.Load\]/s/$/\niaStor=iaStor.sys,4/' "$target/TXTSETUP.SIF" - sed -i '/^\[FileFlags\]/s/$/\niaStor.sys = 16/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.cat = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.inf = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,4_,4,1,,,1,4/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaahci.cat = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" - sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaAHCI.inf = 1,,,,,,,1,0,0/' "$target/TXTSETUP.SIF" - sed -i '/^\[SCSI\]/s/$/\niaStor=\"Intel\(R\) SATA RAID\/AHCI Controller\"/' "$target/TXTSETUP.SIF" - sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_8086\&DEV_2922\&CC_0106=\"iaStor\"/' "$target/TXTSETUP.SIF" + sed -i '/^\[SCSI.Load\]/s/$/\niaStor=iaStor.sys,4/' "$file" + sed -i '/^\[FileFlags\]/s/$/\niaStor.sys = 16/' "$file" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.cat = 1,,,,,,,1,0,0/' "$file" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.inf = 1,,,,,,,1,0,0/' "$file" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,4_,4,1,,,1,4/' "$file" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaStor.sys = 1,,,,,,,1,0,0/' "$file" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaahci.cat = 1,,,,,,,1,0,0/' "$file" + sed -i '/^\[SourceDisksFiles.'"$arch"'\]/s/$/\niaAHCI.inf = 1,,,,,,,1,0,0/' "$file" + sed -i '/^\[SCSI\]/s/$/\niaStor=\"Intel\(R\) SATA RAID\/AHCI Controller\"/' "$file" + sed -i '/^\[HardwareIdsDatabase\]/s/$/\nPCI\\VEN_8086\&DEV_2922\&CC_0106=\"iaStor\"/' "$file" rm -rf "$drivers" fi - local setup + local key setup setup=$(find "$target" -maxdepth 1 -type f -iname setupp.ini -print -quit) - if [ -n "$setup" ]; then + if [ -n "$setup" ] && [ -z "$KEY" ]; then pid=$(<"$setup") pid="${pid%$'\r'}" - case "$pid" in - *"000" | *"270" | *"OEM" ) ;; - * ) warn "unknown PID found in image: \"${pid:(-3)}\"" ;; - esac - if [[ "$driver" == "2k" ]]; then echo "${pid:0:$((${#pid})) - 3}270" > "$setup" else - if [[ "$pid" != *"270" ]]; then - echo "${pid:0:$((${#pid})) - 3}000" > "$setup" - else - warn "this version of $desc requires a volume license key (VLK), it will ask for one during installation." - fi + if [[ "$pid" == *"270" ]]; then + warn "this version of $desc requires a volume license key (VLK), it will ask for one during installation." + + else + + file=$(find "$target" -maxdepth 1 -type f -iname PID.INF -print -quit) + + if [ -n "$file" ]; then + + if [[ "$driver" == "2k3" ]]; then + + key=$(grep -i -A 2 "StagingKey" "$file" | tail -n 2 | head -n 1) + + else + + key="${pid:$((${#pid})) - 8:5}" + if [[ "${pid^^}" == *"OEM" ]]; then + key=$(grep -i -A 2 "$key" "$file" | tail -n 2 | head -n 1) + else + key=$(grep -i -m 1 -A 2 "$key" "$file" | tail -n 2 | head -n 1) + fi + key="${key#*= }" + + fi + + key="${key%$'\r'}" + [[ "${#key}" == "29" ]] && KEY="$key" + + fi + + if [ -z "$KEY" ]; then + + # These are NOT pirated keys, they come from official MS documentation. + + case "${driver,,}" in + "xp" ) + + if [[ "${arch,,}" == "x86" ]]; then + # Windows XP Professional x86 generic trial key (no activation) + KEY="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y" + else + # Windows XP Professional x64 generic trial key (no activation) + KEY="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G" + fi ;; + + "2k3" ) + + if [[ "${arch,,}" == "x86" ]]; then + # Windows Server 2003 Standard x86 generic trial key (no activation) + KEY="QKDCQ-TP2JM-G4MDG-VR6F2-P9C48" + else + # Windows Server 2003 Standard x64 generic trial key (no activation) + KEY="P4WJG-WK3W7-3HM8W-RWHCK-8JTRY" + fi ;; + + esac + + echo "${pid:0:$((${#pid})) - 3}000" > "$setup" + + fi + + fi fi + fi + [ -n "$KEY" ] && KEY="ProductID=$KEY" + mkdir -p "$dir/\$OEM\$" if ! addFolder "$dir"; then @@ -1527,36 +1585,6 @@ prepareInstall() { local ip="20.20.20.1" [ -n "${VM_NET_IP:-}" ] && ip="${VM_NET_IP%.*}.1" - if [ -z "$KEY" ] && [[ "$pid" != *"270" ]]; then - - # These are not pirated keys, they come from the official MS documentation. - case "${driver,,}" in - "xp" ) - - if [[ "${arch,,}" == "x86" ]]; then - # Windows XP Professional x86 generic key (no activation, trial-only) - KEY="DR8GV-C8V6J-BYXHG-7PYJR-DB66Y" - else - # Windows XP Professional x64 generic key (no activation, trial-only) - KEY="B2RBK-7KPT9-4JP6X-QQFWM-PJD6G" - fi ;; - - "2k3" ) - - if [[ "${arch,,}" == "x86" ]]; then - # Windows Server 2003 Standard x86 generic key (no activation, trial-only) - KEY="QKDCQ-TP2JM-G4MDG-VR6F2-P9C48" - else - # Windows Server 2003 Standard x64 generic key (no activation, trial-only) - KEY="P4WJG-WK3W7-3HM8W-RWHCK-8JTRY" - fi ;; - - esac - - fi - - [ -n "$KEY" ] && KEY="ProductID=$KEY" - find "$target" -maxdepth 1 -type f -iname winnt.sif -exec rm {} \; { echo "[Data]" @@ -1786,34 +1814,59 @@ prepareLegacy() { detectLegacy() { local dir="$1" - local find find2 + local find - find=$(find "$dir" -maxdepth 1 -type d -iname win95 -print -quit) + find=$(find "$dir" -maxdepth 1 -type d -iname WIN95 -print -quit) [ -n "$find" ] && DETECTED="win95" && return 0 - find=$(find "$dir" -maxdepth 1 -type d -iname win98 -print -quit) + find=$(find "$dir" -maxdepth 1 -type d -iname WIN98 -print -quit) [ -n "$find" ] && DETECTED="win98" && return 0 - find=$(find "$dir" -maxdepth 1 -type d -iname win9x -print -quit) + find=$(find "$dir" -maxdepth 1 -type d -iname WIN9X -print -quit) [ -n "$find" ] && DETECTED="win9x" && return 0 - find=$(find "$dir" -maxdepth 1 -type f -iname cdrom_nt.5 -print -quit) - [ -n "$find" ] && DETECTED="win2k" && return 0 + find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_W.40 -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_S.40 -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_TS.40 -print -quit) + [ -n "$find" ] && DETECTED="winnt4" && return 0 - find=$(find "$dir" -maxdepth 1 -type d -iname win51 -print -quit) - find2=$(find "$dir" -maxdepth 1 -type f -iname setupxp.htm -print -quit) + find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_NT.5 -print -quit) + + if [ -n "$find" ]; then + + find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_IA.5 -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_ID.5 -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_IP.5 -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname CDROM_IS.5 -print -quit) + [ -n "$find" ] && DETECTED="win2k" && return 0 - if [ -n "$find" ] || [ -n "$find2" ] || [ -f "$dir/WIN51AP" ] || [ -f "$dir/WIN51IC" ]; then - [ -d "$dir/AMD64" ] && DETECTED="winxpx64" && return 0 - DETECTED="winxpx86" && return 0 fi - if [ -f "$dir/WIN51IA" ] || [ -f "$dir/WIN51IB" ] || [ -f "$dir/WIN51ID" ] || [ -f "$dir/WIN51IL" ] || [ -f "$dir/WIN51IS" ]; then - DETECTED="win2003r2" && return 0 - fi + find=$(find "$dir" -maxdepth 1 -iname WIN51 -print -quit) + + if [ -n "$find" ]; then + + find=$(find "$dir" -maxdepth 1 -type f -iname WIN51AP -print -quit) + [ -n "$find" ] && DETECTED="winxpx64" && return 0 + + find=$(find "$dir" -maxdepth 1 -type f -iname WIN51IC -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51IP -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname setupxp.htm -print -quit) + [ -n "$find" ] && DETECTED="winxpx86" && return 0 + + find=$(find "$dir" -maxdepth 1 -type f -iname WIN51IS -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51IA -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51IB -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51ID -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51IL -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51IS -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51AA -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51AD -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51AS -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51MA -print -quit) + [ -z "$find" ] && find=$(find "$dir" -maxdepth 1 -type f -iname WIN51MD -print -quit) + [ -n "$find" ] && DETECTED="win2003r2" && return 0 - if [ -f "$dir/WIN51AA" ] || [ -f "$dir/WIN51AD" ] || [ -f "$dir/WIN51AS" ] || [ -f "$dir/WIN51MA" ] || [ -f "$dir/WIN51MD" ]; then - DETECTED="win2003r2" && return 0 fi return 1 diff --git a/src/install.sh b/src/install.sh index 5376cbc..e0be8f8 100644 --- a/src/install.sh +++ b/src/install.sh @@ -266,7 +266,7 @@ detectCustom() { ! findFile "custom.iso" && return 1 [ -n "$CUSTOM" ] && return 0 - + ! findFile "boot.iso" && return 1 [ -n "$CUSTOM" ] && return 0 From 56fa5288cd21bc40b1e01839b9eba5e6858c7da5 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 23 Apr 2025 13:02:04 +0200 Subject: [PATCH 191/290] docs: Add input types (#1221) --- .github/ISSUE_TEMPLATE/1-issue.yml | 2 ++ .github/ISSUE_TEMPLATE/3-bug.yml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/1-issue.yml b/.github/ISSUE_TEMPLATE/1-issue.yml index 68f19b7..87860c9 100644 --- a/.github/ISSUE_TEMPLATE/1-issue.yml +++ b/.github/ISSUE_TEMPLATE/1-issue.yml @@ -21,6 +21,7 @@ body: attributes: label: Docker compose description: The compose file (or otherwise the `docker run` command used). + render: yaml validations: required: true - type: textarea @@ -28,6 +29,7 @@ body: attributes: label: Docker log description: The logfile of the container (as shown by `docker logs windows`). + render: shell validations: required: true - type: textarea diff --git a/.github/ISSUE_TEMPLATE/3-bug.yml b/.github/ISSUE_TEMPLATE/3-bug.yml index 131742c..f614f27 100644 --- a/.github/ISSUE_TEMPLATE/3-bug.yml +++ b/.github/ISSUE_TEMPLATE/3-bug.yml @@ -23,6 +23,7 @@ body: attributes: label: Docker compose description: The compose file (or otherwise the `docker run` command used). + render: yaml validations: required: true - type: textarea @@ -30,6 +31,7 @@ body: attributes: label: Docker log description: The logfile of the container (as shown by `docker logs windows`). + render: shell validations: required: true - type: textarea From 868c8af289a1012cd7c8bf2c9a2bba298eeb8dee Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 May 2025 06:50:22 +0200 Subject: [PATCH 192/290] chore(deps): update qemux/qemu docker tag to v7.12 (#1229) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 3e580f9..f48df31 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.11 / / +COPY --from=qemux/qemu:7.12 / / ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" From 50f6467deaef20bb34eaa314afa67619a4e60f34 Mon Sep 17 00:00:00 2001 From: Levvie - she/her <11600822+ItzLevvie@users.noreply.github.com> Date: Mon, 26 May 2025 23:52:50 +0100 Subject: [PATCH 193/290] fix: Spelling mistake of successfully (#1251) --- src/mido.sh | 2 +- src/power.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mido.sh b/src/mido.sh index f2f9a94..75e2e5e 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -514,7 +514,7 @@ verifyFile() { fi if [[ "$hash" == "$check" ]]; then - info "Succesfully verified ISO!" && return 0 + info "Successfully verified ISO!" && return 0 fi error "The downloaded file has an unknown $algo checksum: $hash , as the expected value was: $check. Please report this at $SUPPORT/issues" diff --git a/src/power.sh b/src/power.sh index 4252dd8..9ca5583 100644 --- a/src/power.sh +++ b/src/power.sh @@ -35,7 +35,7 @@ boot() { grep -Fq "BOOTMGR is missing" "$QEMU_PTY" && fail="y" fi if [ -z "$fail" ]; then - info "Windows started succesfully, visit http://127.0.0.1:8006/ to view the screen..." + info "Windows started successfully, visit http://127.0.0.1:8006/ to view the screen..." return 0 fi fi From 945e27f72c7db7381a7b5076aaa2bfaf6284befa Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 7 Jul 2025 13:31:22 +0200 Subject: [PATCH 194/290] build: Update VirtIO drivers to v1.9.47 (#1297) --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index f48df31..c9ad591 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,7 +10,6 @@ ARG DEBCONF_NONINTERACTIVE_SEEN="true" RUN set -eu && \ apt-get update && \ apt-get --no-install-recommends -y install \ - wsdd \ samba \ wimtools \ dos2unix \ @@ -24,7 +23,8 @@ RUN set -eu && \ COPY --chmod=755 ./src /run/ COPY --chmod=755 ./assets /run/assets -ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.45-0/virtio-win-1.9.45.tar.xz /var/drivers.txz +ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/refs/tags/v0.9/src/wsdd.py /usr/sbin/wsdd +ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.47-0/virtio-win-1.9.47.tar.xz /var/drivers.txz FROM dockurr/windows-arm:${VERSION_ARG} AS build-arm64 FROM build-${TARGETARCH} From 21f533ece8210657bb335e6b858eae7ee82cf04c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 27 Aug 2025 21:07:39 +0200 Subject: [PATCH 195/290] chore(deps): update actions/checkout action to v5 (#1334) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 2 +- .github/workflows/check.yml | 2 +- .github/workflows/hub.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8731ab4..c552d6b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -32,7 +32,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: fetch-depth: 0 - diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index b132f31..e347f8d 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -7,7 +7,7 @@ jobs: name: shellcheck runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Run ShellCheck uses: ludeeus/action-shellcheck@master env: diff --git a/.github/workflows/hub.yml b/.github/workflows/hub.yml index 0e0bcd1..263e97c 100644 --- a/.github/workflows/hub.yml +++ b/.github/workflows/hub.yml @@ -12,7 +12,7 @@ jobs: dockerHubDescription: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Docker Hub Description uses: peter-evans/dockerhub-description@v4 From 032d7a31a4a02cdb7eeab29c68c9764449d3878a Mon Sep 17 00:00:00 2001 From: Jam Balaya <jambalaya.pyoncafe@outlook.jp> Date: Thu, 28 Aug 2025 04:11:40 +0900 Subject: [PATCH 196/290] build: Add `syntax` parser directive to Dockerfile (#1323) * build: Add `syntax` parser directive to Dockerfile --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index c9ad591..3a1ce53 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,5 @@ +# syntax=docker/dockerfile:1 + ARG VERSION_ARG="latest" FROM scratch AS build-amd64 From 5248397845afaba559ab7c5a9e09bac48d1a3a1c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 2 Sep 2025 14:32:52 +0200 Subject: [PATCH 197/290] docs: Remove Stars section from README (#1361) Removed the Stars section from the README. --- readme.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/readme.md b/readme.md index f628066..c777869 100644 --- a/readme.md +++ b/readme.md @@ -393,9 +393,6 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas Yes, this project contains only open-source code and does not distribute any copyrighted material. Any product keys found in the code are just generic placeholders provided by Microsoft for trial purposes. So under all applicable laws, this project will be considered legal. -## Stars 🌟 -[![Stars](https://starchart.cc/dockur/windows.svg?variant=adaptive)](https://starchart.cc/dockur/windows) - ## Disclaimer ⚖️ *The product names, logos, brands, and other trademarks referred to within this project are the property of their respective trademark holders. This project is not affiliated, sponsored, or endorsed by Microsoft Corporation.* From 0b7e8f01becd950eb22c478c7220612b967336ed Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 3 Sep 2025 16:42:46 +0200 Subject: [PATCH 198/290] chore(deps): update hadolint/hadolint-action action to v3.2.0 (#1365) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index e347f8d..71c2d33 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -18,7 +18,7 @@ jobs: path: "assets" file-endings: ".xml" - name: Lint Dockerfile - uses: hadolint/hadolint-action@v3.1.0 + uses: hadolint/hadolint-action@v3.2.0 with: dockerfile: Dockerfile ignore: DL3006,DL3008 From 53b0c9ad027d2ef205b76eeb63cd866fb93b2eff Mon Sep 17 00:00:00 2001 From: Alexandre Beaujour <alexandre.beaujour@hotmail.fr> Date: Sat, 13 Sep 2025 13:43:45 +0200 Subject: [PATCH 199/290] docs: Clarify disk resizing (#1383) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index c777869..7f4fa38 100644 --- a/readme.md +++ b/readme.md @@ -139,7 +139,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ``` > [!TIP] -> This can also be used to resize the existing disk to a larger capacity without any data loss. +> This can also be used to resize the existing disk to a larger capacity without any data loss. However you will need to [manually extend the disk partition](https://learn.microsoft.com/en-us/windows-server/storage/disk-management/extend-a-basic-volume?tabs=disk-management) since the added disk space will appear as unallocated. ### How do I share files with the host? From da308b7e89ce3ddafcd6b8237ed77b199a3415e0 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 13 Sep 2025 20:08:38 +0200 Subject: [PATCH 200/290] feat: Replace wsdd with wsddn for Web Service Discovery (#1385) --- Dockerfile | 3 ++- src/samba.sh | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3a1ce53..2eb04bd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,13 +19,14 @@ RUN set -eu && \ libxml2-utils \ libarchive-tools \ netcat-openbsd && \ + wget "https://github.com/gershnik/wsdd-native/releases/download/v1.21/wsddn_1.21_amd64.deb" -O /tmp/wsddn.deb -q && \ + dpkg -i /tmp/wsddn.deb && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* COPY --chmod=755 ./src /run/ COPY --chmod=755 ./assets /run/assets -ADD --chmod=755 https://raw.githubusercontent.com/christgau/wsdd/refs/tags/v0.9/src/wsdd.py /usr/sbin/wsdd ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.47-0/virtio-win-1.9.47.tar.xz /var/drivers.txz FROM dockurr/windows-arm:${VERSION_ARG} AS build-arm64 diff --git a/src/samba.sh b/src/samba.sh index 10960b3..e5b4442 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -129,8 +129,7 @@ if [[ "${BOOT_MODE:-}" == "windows_legacy" ]]; then fi else # Enable Web Service Discovery on Vista and up - wsdd -i "$interface" -p -n "$hostname" & - echo "$!" > /var/run/wsdd.pid + wsddn -i "$interface" -H "$hostname" --pid-file=/var/run/wsdd.pid >/dev/null & fi return 0 From 22235bf48ecd172b894e9843c601f8e32cca9160 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 14 Sep 2025 11:52:06 +0200 Subject: [PATCH 201/290] build: Disable automatic builds (#1386) Removed push trigger and paths to ignore from build workflow. --- .github/workflows/build.yml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c552d6b..27c6385 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,16 +2,6 @@ name: Build on: workflow_dispatch: - push: - branches: - - master - paths-ignore: - - '**/*.md' - - '**/*.yml' - - '.gitignore' - - '.dockerignore' - - '.github/**' - - '.github/workflows/**' concurrency: group: build From 2983b2b67747ebddb6c46f12bb2fe623ef8f5a1d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 14 Sep 2025 20:51:49 +0200 Subject: [PATCH 202/290] fix: Windows Enterprise download was broken (#1387) --- readme.md | 2 +- src/define.sh | 8 +++-- src/mido.sh | 89 ++++++++++++++++++++++++++++++++++++--------------- 3 files changed, 70 insertions(+), 29 deletions(-) diff --git a/readme.md b/readme.md index 7f4fa38..b33a405 100644 --- a/readme.md +++ b/readme.md @@ -95,7 +95,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas |---|---|---| | `11` | Windows 11 Pro | 5.4 GB | | `11l` | Windows 11 LTSC | 4.7 GB | - | `11e` | Windows 11 Enterprise | 4.0 GB | + | `11e` | Windows 11 Enterprise | 5.3 GB | |||| | `10` | Windows 10 Pro | 5.7 GB | | `10l` | Windows 10 LTSC | 4.6 GB | diff --git a/src/define.sh b/src/define.sh index bd41f80..4bc9730 100644 --- a/src/define.sh +++ b/src/define.sh @@ -734,8 +734,8 @@ getMido() { sum="b56b911bf18a2ceaeb3904d87e7c770bdf92d3099599d61ac2497b91bf190b11" ;; "win11x64-enterprise-eval" ) - size=4295096320 - sum="dad633276073f14f3e0373ef7e787569e216d54942ce522b39451c8f2d38ad43" + size=5387960320 + sum="755a90d43e826a74b9e1932a34788b898e028272439b777e5593dee8d53622ae" url="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_CLIENTENTERPRISEEVAL_OEMRET_A64FRE_en-us.iso" ;; "win11x64-enterprise-iot-eval" | "win11x64-enterprise-ltsc-eval" ) @@ -1313,6 +1313,8 @@ isMido() { local lang="$2" local sum + [[ "${MIDO:-}" == [Nn]* ]] && return 1 + sum=$(getMido "$id" "en" "sum") [ -n "$sum" ] && return 0 @@ -1324,6 +1326,8 @@ isESD() { local id="$1" local lang="$2" + [[ "${ESD:-}" == [Nn]* ]] && return 1 + case "${id,,}" in "win11${PLATFORM,,}" | "win10${PLATFORM,,}" ) return 0 diff --git a/src/mido.sh b/src/mido.sh index 75e2e5e..9e86600 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -264,23 +264,34 @@ download_windows_eval() { } case "$enterprise_type" in + "iot" | "ltsc" ) + case "${PLATFORM,,}" in + "x64" ) + if [[ "$windows_version" != "windows-10"* ]]; then + iso_download_link=$(echo "$iso_download_links" | head -n 1) + else + iso_download_link=$(echo "$iso_download_links" | head -n 4 | tail -n 1) + fi ;; + "arm64" ) + iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1) ;; + * ) + error "Invalid platform specified, value \"$PLATFORM\" is not recognized!" && return 1 ;; + esac ;; "enterprise" ) - iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1) - ;; - "iot" ) - if [[ "${PLATFORM,,}" == "x64" ]]; then - iso_download_link=$(echo "$iso_download_links" | head -n 1) - fi - if [[ "${PLATFORM,,}" == "arm64" ]]; then - iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1) - fi - ;; - "ltsc" ) - iso_download_link=$(echo "$iso_download_links" | head -n 4 | tail -n 1) - ;; + case "${PLATFORM,,}" in + "x64" ) + if [[ "$windows_version" != "windows-10"* ]]; then + iso_download_link=$(echo "$iso_download_links" | head -n 1) + else + iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1) + fi ;; + "arm64" ) + iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1) ;; + * ) + error "Invalid platform specified, value \"$PLATFORM\" is not recognized!" && return 1 ;; + esac ;; "server" ) - iso_download_link=$(echo "$iso_download_links" | head -n 1) - ;; + iso_download_link=$(echo "$iso_download_links" | head -n 1) ;; * ) error "Invalid type specified, value \"$enterprise_type\" is not recognized!" && return 1 ;; esac @@ -323,8 +334,7 @@ getWindows() { case "${version,,}" in "win11${PLATFORM,,}" ) ;; - "win11${PLATFORM,,}-enterprise-iot"* ) ;; - "win11${PLATFORM,,}-enterprise-ltsc"* ) ;; + "win11${PLATFORM,,}-enterprise"* ) ;; * ) if [[ "${PLATFORM,,}" != "x64" ]]; then error "No download for the ${PLATFORM^^} platform available for $edition!" @@ -396,10 +406,11 @@ getESD() { local version="$2" local lang="$3" local desc="$4" + local result local culture local language local editionName - local winCatalog size + local winCatalog culture=$(getLanguage "$lang" "culture") winCatalog=$(getCatalog "$version" "url") @@ -441,32 +452,57 @@ getESD() { error "Failed to find $xFile in $wFile!" && return 1 fi - local edQuery='//File[Architecture="'${PLATFORM}'"][Edition="'${editionName}'"]' + local edQuery='//File[Architecture="'${PLATFORM,,}'"][Edition="'${editionName}'"]' + result=$(xmllint --nonet --xpath "${edQuery}" "$dir/$xFile" 2>/dev/null) + + if [ -z "$result" ]; then + + edQuery='//File[Architecture="'${PLATFORM^^}'"][Edition="'${editionName}'"]' + result=$(xmllint --nonet --xpath "${edQuery}" "$dir/$xFile" 2>/dev/null) + + if [ -z "$result" ]; then + + desc=$(printEdition "$version" "$desc") + language=$(getLanguage "$lang" "desc") + error "No download link available for $desc!" && return 1 + fi + + fi echo -e '<Catalog>' > "$dir/$fFile" - xmllint --nonet --xpath "${edQuery}" "$dir/$xFile" >> "$dir/$fFile" 2>/dev/null + echo "$result" >> "$dir/$fFile" echo -e '</Catalog>'>> "$dir/$fFile" - xmllint --nonet --xpath "//File[LanguageCode=\"${culture,,}\"]" "$dir/$fFile" >"$dir/$eFile" + result=$(xmllint --nonet --xpath "//File[LanguageCode=\"${culture,,}\"]" "$dir/$fFile" 2>/dev/null) - size=$(stat -c%s "$dir/$eFile") - if ((size<20)); then + if [ -z "$result" ]; then desc=$(printEdition "$version" "$desc") language=$(getLanguage "$lang" "desc") error "No download in the $language language available for $desc!" && return 1 fi + echo "$result" > "$dir/$eFile" + local tag="FilePath" - ESD=$(xmllint --nonet --xpath "//$tag" "$dir/$eFile" | sed -E -e "s/<[\/]?$tag>//g") + ESD=$(xmllint --nonet --xpath "//$tag" "$dir/$eFile" | sed -E -e "s/<[\/]?$tag>//g" 2>/dev/null) if [ -z "$ESD" ]; then error "Failed to find ESD URL in $eFile!" && return 1 fi tag="Sha1" - ESD_SUM=$(xmllint --nonet --xpath "//$tag" "$dir/$eFile" | sed -E -e "s/<[\/]?$tag>//g") + ESD_SUM=$(xmllint --nonet --xpath "//$tag" "$dir/$eFile" | sed -E -e "s/<[\/]?$tag>//g" 2>/dev/null) + + if [ -z "$ESD_SUM" ]; then + error "Failed to find ESD checksum in $eFile!" && return 1 + fi + tag="Size" - ESD_SIZE=$(xmllint --nonet --xpath "//$tag" "$dir/$eFile" | sed -E -e "s/<[\/]?$tag>//g") + ESD_SIZE=$(xmllint --nonet --xpath "//$tag" "$dir/$eFile" | sed -E -e "s/<[\/]?$tag>//g" 2>/dev/null) + + if [ -z "$ESD_SIZE" ]; then + error "Failed to find ESD filesize in $eFile!" && return 1 + fi rm -rf "$dir" return 0 @@ -561,6 +597,7 @@ downloadFile() { fi info "$msg..." + [[ "$DEBUG" == [Yy1]* ]] && echo "Downloading $url" { wget "$url" -O "$iso" -q --timeout=30 --no-http-keep-alive --user-agent "$agent" --show-progress "$progress"; rc=$?; } || : From 36e69fba7229a29095cc2798ae6c5c2c12f64257 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 15 Sep 2025 00:36:40 +0200 Subject: [PATCH 203/290] fix: Updated checksums for mirror (#1388) --- Dockerfile | 3 ++- src/define.sh | 59 ++++++++++++++++++--------------------------------- src/mido.sh | 3 ++- 3 files changed, 25 insertions(+), 40 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2eb04bd..f7473b5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,6 +5,7 @@ FROM scratch AS build-amd64 COPY --from=qemux/qemu:7.12 / / +ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" ARG DEBIAN_FRONTEND="noninteractive" ARG DEBCONF_NONINTERACTIVE_SEEN="true" @@ -19,7 +20,7 @@ RUN set -eu && \ libxml2-utils \ libarchive-tools \ netcat-openbsd && \ - wget "https://github.com/gershnik/wsdd-native/releases/download/v1.21/wsddn_1.21_amd64.deb" -O /tmp/wsddn.deb -q && \ + wget "https://github.com/gershnik/wsdd-native/releases/download/v1.21/wsddn_1.21_${TARGETARCH}.deb" -O /tmp/wsddn.deb -q && \ dpkg -i /tmp/wsddn.deb && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* diff --git a/src/define.sh b/src/define.sh index 4bc9730..9b47786 100644 --- a/src/define.sh +++ b/src/define.sh @@ -33,11 +33,11 @@ parseVersion() { "11e" | "win11e" | "windows11e" | "windows 11e" ) VERSION="win11x64-enterprise-eval" ;; - "11i" | "11iot" | "iot11" | "win11i" | "win11-iot" | "win11x64-iot" | "win11x64-enterprise-iot-eval" ) + "11i" | "11iot" | "iot11" | "win11i" | "win11-iot" | "win11x64-iot" ) VERSION="win11x64-enterprise-iot-eval" [ -z "$DETECTED" ] && DETECTED="win11x64-iot" ;; - "11l" | "11ltsc" | "ltsc11" | "win11l" | "win11-ltsc" | "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) + "11l" | "11ltsc" | "ltsc11" | "win11l" | "win11-ltsc" | "win11x64-ltsc" ) VERSION="win11x64-enterprise-ltsc-eval" [ -z "$DETECTED" ] && DETECTED="win11x64-ltsc" ;; @@ -47,11 +47,11 @@ parseVersion() { "10e" | "win10e" | "windows10e" | "windows 10e" ) VERSION="win10x64-enterprise-eval" ;; - "10i" | "10iot" | "iot10" | "win10i" | "win10-iot" | "win10x64-iot" | "win10x64-enterprise-iot-eval" ) + "10i" | "10iot" | "iot10" | "win10i" | "win10-iot" | "win10x64-iot" ) VERSION="win10x64-enterprise-iot-eval" [ -z "$DETECTED" ] && DETECTED="win10x64-iot" ;; - "10l" | "10ltsc" | "ltsc10" | "win10l" | "win10-ltsc" | "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) + "10l" | "10ltsc" | "ltsc10" | "win10l" | "win10-ltsc" | "win10x64-ltsc" ) VERSION="win10x64-enterprise-ltsc-eval" [ -z "$DETECTED" ] && DETECTED="win10x64-ltsc" ;; @@ -693,26 +693,9 @@ switchEdition() { local id="$1" - case "${id,,}" in - "win11${PLATFORM,,}-enterprise-eval" ) - DETECTED="win11${PLATFORM,,}-enterprise" - ;; - "win10${PLATFORM,,}-enterprise-eval" ) - DETECTED="win10${PLATFORM,,}-enterprise" - ;; - "win81${PLATFORM,,}-enterprise-eval" ) - DETECTED="win81${PLATFORM,,}-enterprise" - ;; - "win7${PLATFORM,,}" | "win7${PLATFORM,,}-enterprise-eval" ) - DETECTED="win7${PLATFORM,,}-enterprise" - ;; - "win2025-eval" ) DETECTED="win2025" ;; - "win2022-eval" ) DETECTED="win2022" ;; - "win2019-eval" ) DETECTED="win2019" ;; - "win2016-eval" ) DETECTED="win2016" ;; - "win2012r2-eval" ) DETECTED="win2012r2" ;; - "win2008r2-eval" ) DETECTED="win2008r2" ;; - esac + if [[ "${id,,}" == *"-eval" ]]; then + [ -z "$DETECTED" ] && DETECTED="${id::-5}" + fi return 0 } @@ -828,12 +811,12 @@ getLink1() { sum="aa1ad990f930d907b7a34ea897abbb0dfbe47552ca8acc146f92e40381839e05" url="11/en-us_windows_11_24h2_x64.iso" ;; - "win11x64-iot" | "win11x64-enterprise-iot-eval" ) + "win11x64-iot" | "win11x64-enterprise-iot" | "win11x64-enterprise-iot-eval" ) size=5144817664 sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" url="11/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" ;; - "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) + "win11x64-ltsc" | "win11x64-enterprise-ltsc" | "win11x64-enterprise-ltsc-eval" ) size=5144817664 sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" url="11/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" @@ -843,12 +826,12 @@ getLink1() { sum="557871965263d0fd0a1ea50b5d0d0d7cb04a279148ca905c1c675c9bc0d5486c" url="10/en-us_windows_10_22h2_x64.iso" ;; - "win10x64-iot" | "win10x64-enterprise-iot-eval" ) + "win10x64-iot" | "win10x64-enterprise-iot" | "win10x64-enterprise-iot-eval" ) size=4851668992 sum="a0334f31ea7a3e6932b9ad7206608248f0bd40698bfb8fc65f14fc5e4976c160" url="10/en-us_windows_10_iot_enterprise_ltsc_2021_x64_dvd_257ad90f.iso" ;; - "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) + "win10x64-ltsc" | "win10x64-enterprise-ltsc" | "win10x64-enterprise-ltsc-eval" ) size=4899461120 sum="c90a6df8997bf49e56b9673982f3e80745058723a707aef8f22998ae6479597d" url="10/en-us_windows_10_enterprise_ltsc_2021_x64_dvd_d289cf96.iso" @@ -864,14 +847,14 @@ getLink1() { url="8.x/8.1/en_windows_8.1_enterprise_with_update_x64_dvd_6054382.iso" ;; "win2025" | "win2025-eval" ) - size=5307176960 - sum="2293897341febdcea599f5412300b470b5288c6fd2b89666a7b27d283e8d3cf3" - url="server/2025/en-us_windows_server_2025_preview_x64_dvd_ce9eb1a5.iso" + size=6786627584 + sum="bf3ef0849c7cb5e818e1035b7466d206af5aa227ace1a3f4b0de2bf00d2e2144" + url="server/2025/en-us_windows_server_2025_updated_april_2025_x64_dvd_ea86301d.iso" ;; "win2022" | "win2022-eval" ) - size=5365624832 - sum="c3c57bb2cf723973a7dcfb1a21e97dfa035753a7f111e348ad918bb64b3114db" - url="server/2022/en-us_windows_server_2022_updated_jan_2024_x64_dvd_2b7a0c9f.iso" + size=6005706752 + sum="cea2cb2c09de9910c236e64eae3a801c55e9c77ec25e8d81585e3a4581d24bfb" + url="server/2022/en-us_windows_server_2022_updated_april_2025_x64_dvd_3f755ec1.iso" ;; "win2019" | "win2019-eval" ) size=5575774208 @@ -1134,12 +1117,12 @@ getLink4() { sum="c8dbc96b61d04c8b01faf6ce0794fdf33965c7b350eaa3eb1e6697019902945c" url="Windows11Enterprise23H2x64/22631.2428.231001-0608.23H2_NI_RELEASE_SVC_REFRESH_CLIENTENTERPRISEEVAL_OEMRET_x64FRE_en-us.iso" ;; - "win11x64-iot" | "win11x64-enterprise-iot-eval" ) + "win11x64-iot" | "win11x64-enterprise-iot" | "win11x64-enterprise-iot-eval" ) size=5144817664 sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" url="Windows11LTSC/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" ;; - "win11x64-ltsc" | "win11x64-enterprise-ltsc-eval" ) + "win11x64-ltsc" | "win11x64-enterprise-ltsc" | "win11x64-enterprise-ltsc-eval" ) size=5144817664 sum="4f59662a96fc1da48c1b415d6c369d08af55ddd64e8f1c84e0166d9e50405d7a" url="Windows11LTSC/X23-81951_26100.1742.240906-0331.ge_release_svc_refresh_CLIENT_ENTERPRISES_OEM_x64FRE_en-us.iso" @@ -1149,12 +1132,12 @@ getLink4() { sum="7847abd6f39abd02dc8089c4177d354f9eb66fa0ee2fe8ae20e596e675d1ab67" url="Windows-10-22H2-July-2024-64-bit-DVD-English/en-us_windows_10_business_editions_version_22h2_updated_july_2024_x64_dvd_c004521a.iso" ;; - "win10x64-iot" | "win10x64-enterprise-iot-eval" ) + "win10x64-iot" | "win10x64-enterprise-iot" | "win10x64-enterprise-iot-eval" ) size=4851668992 sum="a0334f31ea7a3e6932b9ad7206608248f0bd40698bfb8fc65f14fc5e4976c160" url="en-us_windows_10_iot_enterprise_ltsc_2021_x64_dvd_257ad90f_202411/en-us_windows_10_iot_enterprise_ltsc_2021_x64_dvd_257ad90f.iso" ;; - "win10x64-ltsc" | "win10x64-enterprise-ltsc-eval" ) + "win10x64-ltsc" | "win10x64-enterprise-ltsc" | "win10x64-enterprise-ltsc-eval" ) size=4899461120 sum="c90a6df8997bf49e56b9673982f3e80745058723a707aef8f22998ae6479597d" url="en-us_windows_10_enterprise_ltsc_2021_x64_dvd_d289cf96_202302/en-us_windows_10_enterprise_ltsc_2021_x64_dvd_d289cf96.iso" diff --git a/src/mido.sh b/src/mido.sh index 9e86600..4971b11 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -297,6 +297,7 @@ download_windows_eval() { esac [[ "$DEBUG" == [Yy1]* ]] && echo "Found download link: $iso_download_link" + [ -z "$iso_download_link" ] && error "Could not parse download link from page!" && return 1 # Follow redirect so proceeding log message is useful # This is a request we make that Fido doesn't @@ -597,7 +598,7 @@ downloadFile() { fi info "$msg..." - [[ "$DEBUG" == [Yy1]* ]] && echo "Downloading $url" + [[ "$DEBUG" == [Yy1]* ]] && echo "Downloading: $url" { wget "$url" -O "$iso" -q --timeout=30 --no-http-keep-alive --user-agent "$agent" --show-progress "$progress"; rc=$?; } || : From d0ac685a8101652c5a7ccbc03431b324c458c933 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 15 Sep 2025 01:00:17 +0200 Subject: [PATCH 204/290] build: Remove netcat-openbsd package (#1389) --- Dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index f7473b5..cb8715c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,8 +18,7 @@ RUN set -eu && \ dos2unix \ cabextract \ libxml2-utils \ - libarchive-tools \ - netcat-openbsd && \ + libarchive-tools && \ wget "https://github.com/gershnik/wsdd-native/releases/download/v1.21/wsddn_1.21_${TARGETARCH}.deb" -O /tmp/wsddn.deb -q && \ dpkg -i /tmp/wsddn.deb && \ apt-get clean && \ From 22511b16ae1dfc69e5129d58d989b80e29fdc8cd Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 15 Sep 2025 01:05:12 +0200 Subject: [PATCH 205/290] docs: Update image sizes (#1390) --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index b33a405..1c41efa 100644 --- a/readme.md +++ b/readme.md @@ -107,8 +107,8 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas | `xp` | Windows XP Professional | 0.6 GB | | `2k` | Windows 2000 Professional | 0.4 GB | |||| - | `2025` | Windows Server 2025 | 5.6 GB | - | `2022` | Windows Server 2022 | 4.7 GB | + | `2025` | Windows Server 2025 | 6.7 GB | + | `2022` | Windows Server 2022 | 6.0 GB | | `2019` | Windows Server 2019 | 5.3 GB | | `2016` | Windows Server 2016 | 6.5 GB | | `2012` | Windows Server 2012 | 4.3 GB | From e3dc889601b987c9b152eb8385a7f9ef0100821e Mon Sep 17 00:00:00 2001 From: mauxadoor <183605014+mauxadoor@users.noreply.github.com> Date: Mon, 15 Sep 2025 01:49:04 +0200 Subject: [PATCH 206/290] fix: wimlib-imagex info returns UTF-16LE but is interpreted as UTF8 (#1293) --- src/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/install.sh b/src/install.sh index e0be8f8..1c11cea 100644 --- a/src/install.sh +++ b/src/install.sh @@ -615,7 +615,7 @@ detectImage() { warn "failed to locate 'install.wim' or 'install.esd' in ISO image, $FB" && return 1 fi - info=$(wimlib-imagex info -xml "$wim" | tr -d '\000') + info=$(wimlib-imagex info -xml "$wim" | iconv -f UTF-16LE -t UTF-8) checkPlatform "$info" || exit 67 DETECTED=$(detectVersion "$info") From 1ebb4c8d586883b36b21aa794fc1ab1046cd6182 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 15 Sep 2025 02:09:31 +0200 Subject: [PATCH 207/290] fix: Check image count in ESD file (#1391) --- src/install.sh | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/install.sh b/src/install.sh index 1c11cea..818f52f 100644 --- a/src/install.sh +++ b/src/install.sh @@ -301,7 +301,11 @@ extractESD() { fi local esdImageCount - esdImageCount=$(wimlib-imagex info "$iso" | awk '/Image Count:/ {print $3}') + esdImageCount=$(wimlib-imagex info "$iso" | iconv -f UTF-16LE -t UTF-8 | awk '/Image Count:/ {print $3}') + + if [ -z "$esdImageCount" ]; then + error "Cannot read the image count in ESD file!" && return 1 + fi wimlib-imagex apply "$iso" 1 "$dir" --quiet 2>/dev/null || { retVal=$? @@ -344,7 +348,7 @@ extractESD() { fi for (( imageIndex=4; imageIndex<=esdImageCount; imageIndex++ )); do - imageEdition=$(wimlib-imagex info "$iso" ${imageIndex} | grep '^Description:' | sed 's/Description:[ \t]*//') + imageEdition=$(wimlib-imagex info "$iso" ${imageIndex} | iconv -f UTF-16LE -t UTF-8 | grep '^Description:' | sed 's/Description:[ \t]*//') [[ "${imageEdition,,}" != "${edition,,}" ]] && continue wimlib-imagex export "$iso" ${imageIndex} "$installWimFile" --compress=LZMS --chunk-size 128K --quiet || { retVal=$? @@ -917,7 +921,7 @@ updateImage() { fi index="1" - result=$(wimlib-imagex info -xml "$wim" | tr -d '\000') + result=$(wimlib-imagex info -xml "$wim" | iconv -f UTF-16LE -t UTF-8) if [[ "${result^^}" == *"<IMAGE INDEX=\"2\">"* ]]; then index="2" From 1c15df95aced287ca58a112224c0aaf4ae9eeee1 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 15 Sep 2025 14:20:29 +0200 Subject: [PATCH 208/290] feat: Remove leading and trailing spaces from VERSION (#1392) --- src/define.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/define.sh b/src/define.sh index 9b47786..ae32c24 100644 --- a/src/define.sh +++ b/src/define.sh @@ -23,7 +23,8 @@ parseVersion() { if [[ "${VERSION}" == \"*\" || "${VERSION}" == \'*\' ]]; then VERSION="${VERSION:1:-1}" fi - + + VERSION=`expr "$VERSION" : "^\ *\(.*[^ ]\)\ *$"` [ -z "$VERSION" ] && VERSION="win11" case "${VERSION,,}" in From 05330ff64ced60064f1762a7df7a6f9fcdc299cf Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 15 Sep 2025 17:39:29 +0200 Subject: [PATCH 209/290] fix: Shellcheck warning (#1393) --- src/define.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/define.sh b/src/define.sh index ae32c24..7bbe4f3 100644 --- a/src/define.sh +++ b/src/define.sh @@ -24,7 +24,7 @@ parseVersion() { VERSION="${VERSION:1:-1}" fi - VERSION=`expr "$VERSION" : "^\ *\(.*[^ ]\)\ *$"` + VERSION=$(expr "$VERSION" : "^\ *\(.*[^ ]\)\ *$") [ -z "$VERSION" ] && VERSION="win11" case "${VERSION,,}" in From 2239792fa93664d0ae354a1856f7fc155800bb7a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 17 Sep 2025 16:17:42 +0200 Subject: [PATCH 210/290] feat: Allow for easier switching between versions (#1398) When the VERSION variable is changed, it will now automaticly clean the /storage folder instead of warning the user to manually do it. --- src/define.sh | 2 +- src/install.sh | 86 ++++++++++++++++++++++++++++++-------------------- 2 files changed, 53 insertions(+), 35 deletions(-) diff --git a/src/define.sh b/src/define.sh index 7bbe4f3..4884f5d 100644 --- a/src/define.sh +++ b/src/define.sh @@ -23,7 +23,7 @@ parseVersion() { if [[ "${VERSION}" == \"*\" || "${VERSION}" == \'*\' ]]; then VERSION="${VERSION:1:-1}" fi - + VERSION=$(expr "$VERSION" : "^\ *\(.*[^ ]\)\ *$") [ -z "$VERSION" ] && VERSION="win11" diff --git a/src/install.sh b/src/install.sh index 818f52f..8f93973 100644 --- a/src/install.sh +++ b/src/install.sh @@ -1,10 +1,8 @@ #!/usr/bin/env bash set -Eeuo pipefail -TMP="$STORAGE/tmp" -DIR="$TMP/unpack" -FB="falling back to manual installation!" ETFS="boot/etfsboot.com" +FB="falling back to manual installation!" EFISYS="efi/microsoft/boot/efisys_noprompt.bin" skipInstall() { @@ -16,28 +14,52 @@ skipInstall() { local previous="$STORAGE/windows.base" if [ -f "$previous" ]; then + previous=$(<"$previous") previous="${previous//[![:print:]]/}" + if [ -n "$previous" ]; then if [[ "${STORAGE,,}/${previous,,}" != "${iso,,}" ]]; then - if [ -f "$boot" ] && hasDisk; then - if [[ "${iso,,}" == "${STORAGE,,}/windows."* ]]; then - method="your custom .iso file" - else - if [[ "${previous,,}" != "windows."* ]]; then - method="the VERSION variable" - fi - fi - if [ -n "$method" ]; then - info "Detected that $method was changed, but ignoring this because Windows is already installed." - info "Please start with an empty /storage folder, if you want to install a different version of Windows." - fi - return 0 + + if ! hasDisk; then + + rm -f "$STORAGE/$previous" + return 1 + fi - rm -f "$STORAGE/$previous" + + if [[ "${iso,,}" == "${STORAGE,,}/windows."* ]]; then + method="your custom .iso file was changed" + else + if [[ "${previous,,}" != "windows."* ]]; then + method="the VERSION variable was changed" + else + method="your custom .iso file was removed" + + if [ -f "$boot" ]; then + info "Detected that $method, will be ignored." + return 0 + fi + + fi + fi + + info "Detected that $method, creating a backup of your previous installation..." + + local dir="$STORAGE/${previous%.*}.old" + + rm -rf "$dir" + mkdir -p "$dir" + + [ -f "$STORAGE/$previous" ] && mv -f "$STORAGE/$previous" "$dir/" + find "$STORAGE" -maxdepth 1 -type f -iname 'windows.*' -exec mv -n {} "$dir/" \; + find "$STORAGE" -maxdepth 1 -type f \( -iname '*.rom' -or -iname '*.vars' \) -exec mv -n {} "$dir/" \; + return 1 + fi fi + fi [ -f "$boot" ] && hasDisk && return 0 @@ -51,8 +73,10 @@ skipInstall() { byte="16" && [[ "$MANUAL" == [Yy1]* ]] && byte="17" if [[ "$magic" != "$byte" ]]; then + info "The ISO will be processed again because the configuration was changed..." return 1 + fi return 0 @@ -88,9 +112,11 @@ startInstall() { fi + TMP="$STORAGE/tmp" + rm -rf "$TMP" + skipInstall "$BOOT" && return 1 - rm -rf "$TMP" mkdir -p "$TMP" if [ -z "$CUSTOM" ]; then @@ -105,6 +131,10 @@ startInstall() { fi rm -f "$BOOT" + + find "$STORAGE" -maxdepth 1 -type f -iname 'windows.*' -not -iname '*.iso' -delete + find "$STORAGE" -maxdepth 1 -type f \( -iname '*.rom' -or -iname '*.vars' \) -delete + return 0 } @@ -126,16 +156,6 @@ finishInstall() { fi fi - rm -f "$STORAGE/windows.old" - rm -f "$STORAGE/windows.vga" - rm -f "$STORAGE/windows.net" - rm -f "$STORAGE/windows.usb" - rm -f "$STORAGE/windows.args" - rm -f "$STORAGE/windows.base" - rm -f "$STORAGE/windows.boot" - rm -f "$STORAGE/windows.mode" - rm -f "$STORAGE/windows.type" - cp -f /run/version "$STORAGE/windows.ver" if [[ "$iso" == "$STORAGE/"* ]]; then @@ -612,8 +632,7 @@ detectImage() { warn "failed to locate 'sources' folder in ISO image, $FB" && return 1 fi - wim=$(find "$src" -maxdepth 1 -type f -iname install.wim -print -quit) - [ ! -f "$wim" ] && wim=$(find "$src" -maxdepth 1 -type f -iname install.esd -print -quit) + wim=$(find "$src" -maxdepth 1 -type f \( -iname install.wim -or -iname install.esd \) -print -quit) if [ ! -f "$wim" ]; then warn "failed to locate 'install.wim' or 'install.esd' in ISO image, $FB" && return 1 @@ -913,8 +932,7 @@ updateImage() { error "failed to locate 'sources' folder in ISO image, $FB" && return 1 fi - wim=$(find "$src" -maxdepth 1 -type f -iname boot.wim -print -quit) - [ ! -f "$wim" ] && wim=$(find "$src" -maxdepth 1 -type f -iname boot.esd -print -quit) + wim=$(find "$src" -maxdepth 1 -type f \( -iname boot.wim -or -iname boot.esd \) -print -quit) if [ ! -f "$wim" ]; then error "failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB" && return 1 @@ -1076,8 +1094,6 @@ buildImage() { bootWindows() { - rm -rf "$TMP" - if [ -f "$STORAGE/windows.args" ]; then ARGS=$(<"$STORAGE/windows.args") ARGS="${ARGS//[![:print:]]/}" @@ -1145,6 +1161,8 @@ if [ ! -s "$ISO" ] || [ ! -f "$ISO" ]; then fi fi +DIR="$TMP/unpack" + if ! extractImage "$ISO" "$DIR" "$VERSION"; then rm -f "$ISO" 2> /dev/null || true exit 62 From d08b7aeb27387c41c2e0ba47872c95cd8f41a1b7 Mon Sep 17 00:00:00 2001 From: Sultaniiazov David <x1z53@yandex.ru> Date: Wed, 17 Sep 2025 17:18:53 +0300 Subject: [PATCH 211/290] fix: Typo (#1397) --- src/mido.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mido.sh b/src/mido.sh index 4971b11..be21509 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -689,7 +689,7 @@ downloadImage() { if isESD "$version" "$lang"; then if [[ "$tried" != "n" ]]; then - info "Failed to download $desc, will try a diferent method now..." + info "Failed to download $desc, will try a different method now..." fi tried="y" From 0903fad26b617ac68e469ee88ff5b7898d539434 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 17 Sep 2025 17:24:41 +0200 Subject: [PATCH 212/290] feat: Backup disk image (#1399) --- src/install.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/install.sh b/src/install.sh index 8f93973..3c37693 100644 --- a/src/install.sh +++ b/src/install.sh @@ -44,7 +44,7 @@ skipInstall() { fi fi - info "Detected that $method, creating a backup of your previous installation..." + info "Detected that $method, a backup of your previous installation will be saved..." local dir="$STORAGE/${previous%.*}.old" @@ -52,8 +52,8 @@ skipInstall() { mkdir -p "$dir" [ -f "$STORAGE/$previous" ] && mv -f "$STORAGE/$previous" "$dir/" - find "$STORAGE" -maxdepth 1 -type f -iname 'windows.*' -exec mv -n {} "$dir/" \; find "$STORAGE" -maxdepth 1 -type f \( -iname '*.rom' -or -iname '*.vars' \) -exec mv -n {} "$dir/" \; + find "$STORAGE" -maxdepth 1 -type f \( -iname 'data.*' -or -iname 'windows.*' \) -exec mv -n {} "$dir/" \; return 1 @@ -132,6 +132,7 @@ startInstall() { rm -f "$BOOT" + find "$STORAGE" -maxdepth 1 -type f -iname 'data.*' -delete find "$STORAGE" -maxdepth 1 -type f -iname 'windows.*' -not -iname '*.iso' -delete find "$STORAGE" -maxdepth 1 -type f \( -iname '*.rom' -or -iname '*.vars' \) -delete From ef850e98373945e81fd64e8436d4363dfa1de9fd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 17 Sep 2025 19:20:08 +0200 Subject: [PATCH 213/290] chore(deps): update qemux/qemu docker tag to v7.13 (#1400) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index cb8715c..e8c991f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.12 / / +COPY --from=qemux/qemu:7.13 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" From d25e18c0c52c637f87531043919f0bd47d516afd Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 18 Sep 2025 12:10:53 +0200 Subject: [PATCH 214/290] feat: Backup installation when switching versions (#1402) --- src/define.sh | 13 +++++++++++ src/install.sh | 62 ++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 63 insertions(+), 12 deletions(-) diff --git a/src/define.sh b/src/define.sh index 4884f5d..33d1d45 100644 --- a/src/define.sh +++ b/src/define.sh @@ -135,6 +135,10 @@ parseVersion() { "2003" | "2003r2" | "win2003" | "win2003r2" | "windows2003" | "windows 2003" ) VERSION="win2003r2" ;; + "nano11" | "nano 11" ) + VERSION="nano11" + [ -z "$DETECTED" ] && DETECTED="win11x64" + ;; "core11" | "core 11" ) VERSION="core11" [ -z "$DETECTED" ] && DETECTED="win11x64" @@ -432,6 +436,7 @@ printVersion() { "tiny11"* ) desc="Tiny 11" ;; "tiny10"* ) desc="Tiny 10" ;; "core11"* ) desc="Core 11" ;; + "nano11"* ) desc="Nano 11" ;; "win7"* ) desc="Windows 7" ;; "win8"* ) desc="Windows 8" ;; "win10"* ) desc="Windows 10" ;; @@ -570,6 +575,9 @@ fromFile() { *"winvista"* | *"win_vista"* | *"windowsvista"* | *"windows_vista"* ) id="winvista${arch}" ;; + "nano11"* | "nano_11"* ) + id="nano11" + ;; "tiny11core"* | "tiny11_core"* | "tiny_11_core"* ) id="core11" ;; @@ -1093,6 +1101,11 @@ getLink4() { [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 case "${id,,}" in + "nano11" ) + size=2463565824 + sum="a1e0614372768cbe2d24de74b78a4a97bc1017ea5080dfed1d2125e4a527eb1a" + url="nano11_25h2/nano11%2025h2.iso" + ;; "core11" ) size=2159738880 sum="78f0f44444ff95b97125b43e560a72e0d6ce0a665cf9f5573bf268191e5510c1" diff --git a/src/install.sh b/src/install.sh index 3c37693..dc8cc0a 100644 --- a/src/install.sh +++ b/src/install.sh @@ -5,6 +5,48 @@ ETFS="boot/etfsboot.com" FB="falling back to manual installation!" EFISYS="efi/microsoft/boot/efisys_noprompt.bin" +backup () { + + local count=1 + local iso="$1" + local name="unknown" + local root="$STORAGE/backups" + local previous="$STORAGE/windows.base" + + if [ -f "$previous" ]; then + + previous=$(<"$previous") + previous="${previous//[![:print:]]/}" + + [ -n "$previous" ] && name="${previous%.*}" + + fi + + mkdir -p "$root" + local folder="$name" + local dir="$root/$folder" + + while [ -d "$dir" ] + do + count=$((count+1)) + folder="${name}.${count}" + dir="$root/$folder" + done + + rm -rf "$dir" + mkdir -p "$dir" + + [ -f "$iso" ] && mv -f "$iso" "$dir/" + find "$STORAGE" -maxdepth 1 -type f -iname 'data.*' -not -iname '*.iso' -exec mv -n {} "$dir/" \; + find "$STORAGE" -maxdepth 1 -type f -iname 'windows.*' -not -iname '*.iso' -exec mv -n {} "$dir/" \; + find "$STORAGE" -maxdepth 1 -type f \( -iname '*.rom' -or -iname '*.vars' \) -exec mv -n {} "$dir/" \; + + [ -z "$(ls -A "$dir")" ] && rm -rf "$dir" + [ -z "$(ls -A "$root")" ] && rm -rf "$root" + + return 0 +} + skipInstall() { local iso="$1" @@ -45,15 +87,7 @@ skipInstall() { fi info "Detected that $method, a backup of your previous installation will be saved..." - - local dir="$STORAGE/${previous%.*}.old" - - rm -rf "$dir" - mkdir -p "$dir" - - [ -f "$STORAGE/$previous" ] && mv -f "$STORAGE/$previous" "$dir/" - find "$STORAGE" -maxdepth 1 -type f \( -iname '*.rom' -or -iname '*.vars' \) -exec mv -n {} "$dir/" \; - find "$STORAGE" -maxdepth 1 -type f \( -iname 'data.*' -or -iname 'windows.*' \) -exec mv -n {} "$dir/" \; + ! backup "$STORAGE/$previous" && error "Backup failed!" return 1 @@ -117,6 +151,10 @@ startInstall() { skipInstall "$BOOT" && return 1 + if hasDisk; then + ! backup "" && error "Backup failed!" + fi + mkdir -p "$TMP" if [ -z "$CUSTOM" ]; then @@ -132,7 +170,7 @@ startInstall() { rm -f "$BOOT" - find "$STORAGE" -maxdepth 1 -type f -iname 'data.*' -delete + find "$STORAGE" -maxdepth 1 -type f -iname 'data.*' -not -iname '*.iso' -delete find "$STORAGE" -maxdepth 1 -type f -iname 'windows.*' -not -iname '*.iso' -delete find "$STORAGE" -maxdepth 1 -type f \( -iname '*.rom' -or -iname '*.vars' \) -delete @@ -322,7 +360,7 @@ extractESD() { fi local esdImageCount - esdImageCount=$(wimlib-imagex info "$iso" | iconv -f UTF-16LE -t UTF-8 | awk '/Image Count:/ {print $3}') + esdImageCount=$(wimlib-imagex info "$iso" | awk '/Image Count:/ {print $3}') if [ -z "$esdImageCount" ]; then error "Cannot read the image count in ESD file!" && return 1 @@ -369,7 +407,7 @@ extractESD() { fi for (( imageIndex=4; imageIndex<=esdImageCount; imageIndex++ )); do - imageEdition=$(wimlib-imagex info "$iso" ${imageIndex} | iconv -f UTF-16LE -t UTF-8 | grep '^Description:' | sed 's/Description:[ \t]*//') + imageEdition=$(wimlib-imagex info "$iso" ${imageIndex} | grep '^Description:' | sed 's/Description:[ \t]*//') [[ "${imageEdition,,}" != "${edition,,}" ]] && continue wimlib-imagex export "$iso" ${imageIndex} "$installWimFile" --compress=LZMS --chunk-size 128K --quiet || { retVal=$? From d9211a77df67a659bac9458636da76a96a31d4a4 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 18 Sep 2025 22:53:16 +0200 Subject: [PATCH 215/290] feat: Update command to set user password policy (#1407) --- assets/win11x64-enterprise-eval.xml | 2 +- assets/win11x64-enterprise.xml | 2 +- assets/win11x64-iot.xml | 2 +- assets/win11x64-ltsc.xml | 2 +- assets/win11x64.xml | 2 +- assets/win2025-eval.xml | 2 +- assets/win2025.xml | 2 +- src/install.sh | 1 + 8 files changed, 8 insertions(+), 7 deletions(-) diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index 39caac3..a354801 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -358,7 +358,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>5</Order> - <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <CommandLine>powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index 1c18bf7..99d86a5 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -361,7 +361,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>5</Order> - <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <CommandLine>powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml index 3ee4107..699d176 100644 --- a/assets/win11x64-iot.xml +++ b/assets/win11x64-iot.xml @@ -361,7 +361,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>5</Order> - <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <CommandLine>powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml index 5bc5187..20cbfd4 100644 --- a/assets/win11x64-ltsc.xml +++ b/assets/win11x64-ltsc.xml @@ -361,7 +361,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>5</Order> - <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <CommandLine>powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index f3fc68c..4919df1 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -361,7 +361,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>5</Order> - <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <CommandLine>powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml index d86f152..d781af7 100644 --- a/assets/win2025-eval.xml +++ b/assets/win2025-eval.xml @@ -257,7 +257,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>5</Order> - <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <CommandLine>powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/assets/win2025.xml b/assets/win2025.xml index d488ae2..f6974f6 100644 --- a/assets/win2025.xml +++ b/assets/win2025.xml @@ -260,7 +260,7 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>5</Order> - <CommandLine>cmd /C wmic useraccount where name="Docker" set PasswordExpires=false</CommandLine> + <CommandLine>powershell.exe -ExecutionPolicy Unrestricted -NoLogo -NoProfile -NonInteractive set-localuser -name "Docker" -passwordneverexpires 1</CommandLine> <Description>Password Never Expires</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> diff --git a/src/install.sh b/src/install.sh index dc8cc0a..46bc3fd 100644 --- a/src/install.sh +++ b/src/install.sh @@ -790,6 +790,7 @@ updateXML() { user=$(echo "$USERNAME" | sed 's/[^[:alnum:]@!._-]//g') if [ -n "$user" ]; then + sed -i "s/-name \"Docker\"/-name \"$user\"/g" "$asset" sed -i "s/<Name>Docker<\/Name>/<Name>$user<\/Name>/g" "$asset" sed -i "s/where name=\"Docker\"/where name=\"$user\"/g" "$asset" sed -i "s/<FullName>Docker<\/FullName>/<FullName>$user<\/FullName>/g" "$asset" From 9b4cd5a74553050fd5fdad0db15d8ff390aa52d5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 18 Sep 2025 22:57:39 +0200 Subject: [PATCH 216/290] chore(deps): update qemux/qemu docker tag to v7.14 (#1408) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index e8c991f..149b0a3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.13 / / +COPY --from=qemux/qemu:7.14 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" From 06518d8eb375d68b0e25801e4eee63e2d3fa7aca Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 20 Sep 2025 13:51:51 +0200 Subject: [PATCH 217/290] feat: Resume failed downloads (#1410) --- src/mido.sh | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/mido.sh b/src/mido.sh index be21509..25aec22 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -569,7 +569,6 @@ downloadFile() { local msg="Downloading $desc" local rc total total_gb progress domain dots agent space folder - rm -f "$iso" agent=$(get_agent) if [ -n "$size" ] && [[ "$size" != "0" ]]; then @@ -600,7 +599,7 @@ downloadFile() { info "$msg..." [[ "$DEBUG" == [Yy1]* ]] && echo "Downloading: $url" - { wget "$url" -O "$iso" -q --timeout=30 --no-http-keep-alive --user-agent "$agent" --show-progress "$progress"; rc=$?; } || : + { wget "$url" -O "$iso" --continue -q --timeout=30 --no-http-keep-alive --user-agent "$agent" --show-progress "$progress"; rc=$?; } || : fKill "progress.sh" @@ -639,6 +638,8 @@ downloadImage() { base=$(basename "$iso") desc=$(fromFile "$base") + + rm -f "$iso" downloadFile "$iso" "$version" "" "" "" "$desc" && return 0 info "$msg" && html "$msg" && sleep "$delay" downloadFile "$iso" "$version" "" "" "" "$desc" && return 0 @@ -677,6 +678,8 @@ downloadImage() { if [[ "$success" == "y" ]]; then size=$(getMido "$version" "$lang" "size" ) sum=$(getMido "$version" "$lang" "sum") + + rm -f "$iso" downloadFile "$iso" "$MIDO_URL" "$sum" "$size" "$lang" "$desc" && return 0 info "$msg" && html "$msg" && sleep "$delay" downloadFile "$iso" "$MIDO_URL" "$sum" "$size" "$lang" "$desc" && return 0 @@ -704,6 +707,8 @@ downloadImage() { if [[ "$success" == "y" ]]; then ISO="${ISO%.*}.esd" + + rm -f "$ISO" downloadFile "$ISO" "$ESD" "$ESD_SUM" "$ESD_SIZE" "$lang" "$desc" && return 0 info "$msg" && html "$msg" && sleep "$delay" downloadFile "$ISO" "$ESD" "$ESD_SUM" "$ESD_SIZE" "$lang" "$desc" && return 0 @@ -718,12 +723,16 @@ downloadImage() { url=$(getLink "$i" "$version" "$lang") if [ -n "$url" ]; then + if [[ "$tried" != "n" ]]; then info "Failed to download $desc, will try another mirror now..." fi + tried="y" size=$(getSize "$i" "$version" "$lang") sum=$(getHash "$i" "$version" "$lang") + + rm -f "$iso" downloadFile "$iso" "$url" "$sum" "$size" "$lang" "$desc" && return 0 info "$msg" && html "$msg" && sleep "$delay" downloadFile "$iso" "$url" "$sum" "$size" "$lang" "$desc" && return 0 From ea3003dec5f03e5b1abde64130318bdf006a1db6 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 20 Sep 2025 23:54:03 +0200 Subject: [PATCH 218/290] fix: Simplify conditional checks (#1411) --- src/define.sh | 12 ++++++------ src/install.sh | 6 +++--- src/mido.sh | 10 +++++----- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/define.sh b/src/define.sh index 33d1d45..31df027 100644 --- a/src/define.sh +++ b/src/define.sh @@ -718,7 +718,7 @@ getMido() { local sum="" local size="" - [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 + [[ "${lang,,}" != "en" && "${lang,,}" != "en-us" ]] && return 0 case "${id,,}" in "win11x64" ) @@ -812,7 +812,7 @@ getLink1() { local size="" local host="https://dl.bobpony.com/windows" - [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 + [[ "${lang,,}" != "en" && "${lang,,}" != "en-us" ]] && return 0 case "${id,,}" in "win11x64" | "win11x64-enterprise" | "win11x64-enterprise-eval" ) @@ -956,7 +956,7 @@ getLink2() { local size="" local host="https://files.dog/MSDN" - [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 + [[ "${lang,,}" != "en" && "${lang,,}" != "en-us" ]] && return 0 case "${id,,}" in "win81x64" ) @@ -1055,7 +1055,7 @@ getLink3() { local size="" local host="https://nixsys.com/drivers" - [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 + [[ "${lang,,}" != "en" && "${lang,,}" != "en-us" ]] && return 0 case "${id,,}" in "win7x64" | "win7x64-ultimate" ) @@ -1098,7 +1098,7 @@ getLink4() { local size="" local host="https://archive.org/download" - [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-us" ]] && return 0 + [[ "${lang,,}" != "en" && "${lang,,}" != "en-us" ]] && return 0 case "${id,,}" in "nano11" ) @@ -1406,7 +1406,7 @@ prepareInstall() { error "Failed to locate directory \"$target\" in $desc ISO image!" && return 1 fi - if [[ "${driver,,}" == "xp" ]] || [[ "${driver,,}" == "2k3" ]]; then + if [[ "${driver,,}" == "xp" || "${driver,,}" == "2k3" ]]; then local msg="Adding drivers to image..." info "$msg" && html "$msg" diff --git a/src/install.sh b/src/install.sh index 46bc3fd..084bbd2 100644 --- a/src/install.sh +++ b/src/install.sh @@ -212,7 +212,7 @@ finishInstall() { fi else # Enable secure boot + TPM on manual installs as Win11 requires - if [[ "$MANUAL" == [Yy1]* ]] || [[ "$aborted" == [Yy1]* ]]; then + if [[ "$MANUAL" == [Yy1]* || "$aborted" == [Yy1]* ]]; then if [[ "${DETECTED,,}" == "win11"* ]]; then BOOT_MODE="windows_secure" echo "$BOOT_MODE" > "$STORAGE/windows.mode" @@ -696,7 +696,7 @@ detectImage() { desc=$(printEdition "$DETECTED" "$DETECTED") detectLanguage "$info" - if [[ "${LANGUAGE,,}" != "en" ]] && [[ "${LANGUAGE,,}" != "en-"* ]]; then + if [[ "${LANGUAGE,,}" != "en" && "${LANGUAGE,,}" != "en-"* ]]; then language=$(getLanguage "$LANGUAGE" "desc") desc+=" ($language)" fi @@ -704,7 +704,7 @@ detectImage() { info "Detected: $desc" setXML "" && return 0 - if [[ "$DETECTED" == "win81x86"* ]] || [[ "$DETECTED" == "win10x86"* ]]; then + if [[ "$DETECTED" == "win81x86"* || "$DETECTED" == "win10x86"* ]]; then error "The 32-bit version of $desc is not supported!" && return 1 fi diff --git a/src/mido.sh b/src/mido.sh index 25aec22..a6dada2 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -254,7 +254,7 @@ download_windows_eval() { iso_download_links=$(echo "$iso_download_page_html" | grep -io "$filter") || { # This should only happen if there's been some change to the download endpoint web address - if [[ "${lang,,}" == "en" ]] || [[ "${lang,,}" == "en-"* ]]; then + if [[ "${lang,,}" == "en" || "${lang,,}" == "en-"* ]]; then error "Windows server download page gave us no download link!" else language=$(getLanguage "$lang" "desc") @@ -327,7 +327,7 @@ getWindows() { case "${version,,}" in "win2008r2" | "win81${PLATFORM,,}"* | "win11${PLATFORM,,}-enterprise-iot"* | "win11${PLATFORM,,}-enterprise-ltsc"* ) - if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then + if [[ "${lang,,}" != "en" && "${lang,,}" != "en-"* ]]; then error "No download in the $language language available for $edition!" MIDO_URL="" && return 1 fi ;; @@ -528,8 +528,8 @@ verifyFile() { local total="$3" local check="$4" - if [ -n "$size" ] && [[ "$total" != "$size" ]] && [[ "$size" != "0" ]]; then - if [[ "$VERIFY" == [Yy1]* ]] || [[ "$DEBUG" == [Yy1]* ]]; then + if [ -n "$size" ] && [[ "$total" != "$size" && "$size" != "0" ]]; then + if [[ "$VERIFY" == [Yy1]* || "$DEBUG" == [Yy1]* ]]; then warn "The downloaded file has a different size ( $total bytes) than expected ( $size bytes). Please report this at $SUPPORT/issues" fi fi @@ -654,7 +654,7 @@ downloadImage() { desc=$(printVersion "$version" "") - if [[ "${lang,,}" != "en" ]] && [[ "${lang,,}" != "en-"* ]]; then + if [[ "${lang,,}" != "en" && "${lang,,}" != "en-"* ]]; then language=$(getLanguage "$lang" "desc") if ! validVersion "$version" "$lang"; then desc=$(printEdition "$version" "$desc") From bfc9b357e54f374605ddea03b888ff790b5cffcd Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 21 Sep 2025 04:45:36 +0200 Subject: [PATCH 219/290] build: Update QEMU base image to v7.15 (#1412) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 149b0a3..bf806ce 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.14 / / +COPY --from=qemux/qemu:7.15 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" From 9c08dc7b1e7d3f78f0ef7f40a73e09e968a8a8b0 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 21 Sep 2025 15:15:46 +0200 Subject: [PATCH 220/290] fix: Simplify conditional checks (#1413) --- src/define.sh | 10 +++++----- src/install.sh | 36 ++++++++++++++++++------------------ src/power.sh | 2 +- src/samba.sh | 6 +++--- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/define.sh b/src/define.sh index 31df027..efc8c53 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1269,7 +1269,7 @@ getValue() { local type="$4" local func="getLink$1" - if [ "$1" -gt 0 ] && [ "$1" -le "$MIRRORS" ]; then + if [ "$1" -gt 0 && "$1" -le "$MIRRORS" ]; then val=$($func "$id" "$lang" "$type") fi @@ -1394,7 +1394,7 @@ prepareInstall() { ETFS="[BOOT]/Boot-NoEmul.img" - if [ ! -f "$dir/$ETFS" ] || [ ! -s "$dir/$ETFS" ]; then + if [ ! -f "$dir/$ETFS" || ! -s "$dir/$ETFS" ]; then error "Failed to locate file \"$ETFS\" in $desc ISO image!" && return 1 fi @@ -1478,7 +1478,7 @@ prepareInstall() { local key setup setup=$(find "$target" -maxdepth 1 -type f -iname setupp.ini -print -quit) - if [ -n "$setup" ] && [ -z "$KEY" ]; then + if [ -n "$setup" & -z "$KEY" ]; then pid=$(<"$setup") pid="${pid%$'\r'}" @@ -1795,7 +1795,7 @@ prepareLegacy() { ETFS="boot.img" - [ -f "$dir/$ETFS" ] && [ -s "$dir/$ETFS" ] && return 0 + [ -f "$dir/$ETFS" && -s "$dir/$ETFS" ] && return 0 rm -f "$dir/$ETFS" local len offset @@ -1806,7 +1806,7 @@ prepareLegacy() { error "Failed to extract boot image from $desc ISO!" && return 1 fi - [ -f "$dir/$ETFS" ] && [ -s "$dir/$ETFS" ] && return 0 + [ -f "$dir/$ETFS" && -s "$dir/$ETFS" ] && return 0 error "Failed to locate file \"$ETFS\" in $desc ISO image!" return 1 diff --git a/src/install.sh b/src/install.sh index 084bbd2..a490479 100644 --- a/src/install.sh +++ b/src/install.sh @@ -162,7 +162,7 @@ startInstall() { ISO=$(basename "$BOOT") ISO="$TMP/$ISO" - if [ -f "$BOOT" ] && [ -s "$BOOT" ]; then + if [ -f "$BOOT" && -s "$BOOT" ]; then mv -f "$BOOT" "$ISO" fi @@ -183,7 +183,7 @@ finishInstall() { local aborted="$2" local base byte - if [ ! -s "$iso" ] || [ ! -f "$iso" ]; then + if [ ! -s "$iso" || ! -f "$iso" ]; then error "Failed to find ISO file: $iso" && return 1 fi @@ -304,7 +304,7 @@ findFile() { file="$STORAGE/$base" fi - if [ ! -f "$file" ] || [ ! -s "$file" ]; then + if [ ! -f "$file" || ! -s "$file" ]; then return 0 fi @@ -621,11 +621,11 @@ setXML() { error "The bind $file maps to a file that does not exist!" && exit 67 fi - [ ! -f "$file" ] || [ ! -s "$file" ] && file="$STORAGE/custom.xml" - [ ! -f "$file" ] || [ ! -s "$file" ] && file="/run/assets/custom.xml" - [ ! -f "$file" ] || [ ! -s "$file" ] && file="$1" - [ ! -f "$file" ] || [ ! -s "$file" ] && file="/run/assets/$DETECTED.xml" - [ ! -f "$file" ] || [ ! -s "$file" ] && return 1 + [ ! -f "$file" || ! -s "$file" ] && file="$STORAGE/custom.xml" + [ ! -f "$file" || ! -s "$file" ] && file="/run/assets/custom.xml" + [ ! -f "$file" || ! -s "$file" ] && file="$1" + [ ! -f "$file" || ! -s "$file" ] && file="/run/assets/$DETECTED.xml" + [ ! -f "$file" || ! -s "$file" ] && return 1 XML="$file" return 0 @@ -639,7 +639,7 @@ detectImage() { XML="" - if [ -z "$DETECTED" ] && [ -z "$CUSTOM" ]; then + if [ -z "$DETECTED" && -z "$CUSTOM" ]; then [[ "${version,,}" != "http"* ]] && DETECTED="$version" fi @@ -734,7 +734,7 @@ prepareImage() { if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then - [ -f "$dir/$ETFS" ] && [ -f "$dir/$EFISYS" ] && return 0 + [ -f "$dir/$ETFS" && -f "$dir/$EFISYS" ] && return 0 missing=$(basename "$dir/$EFISYS") [ ! -f "$dir/$ETFS" ] && missing=$(basename "$dir/$ETFS") @@ -955,7 +955,7 @@ updateImage() { skipVersion "${DETECTED,,}" && return 0 - if [ ! -s "$asset" ] || [ ! -f "$asset" ]; then + if [ ! -s "$asset" || ! -f "$asset" ]; then asset="" if [[ "$MANUAL" != [Yy1]* ]]; then MANUAL="Y" @@ -1140,40 +1140,40 @@ bootWindows() { ARGUMENTS="$ARGS ${ARGUMENTS:-}" fi - if [ -s "$STORAGE/windows.vga" ] && [ -f "$STORAGE/windows.vga" ]; then + if [ -s "$STORAGE/windows.vga" && -f "$STORAGE/windows.vga" ]; then if [ -z "${VGA:-}" ]; then VGA=$(<"$STORAGE/windows.vga") VGA="${VGA//[![:print:]]/}" fi fi - if [ -s "$STORAGE/windows.usb" ] && [ -f "$STORAGE/windows.usb" ]; then + if [ -s "$STORAGE/windows.usb" && -f "$STORAGE/windows.usb" ]; then if [ -z "${USB:-}" ]; then USB=$(<"$STORAGE/windows.usb") USB="${USB//[![:print:]]/}" fi fi - if [ -s "$STORAGE/windows.net" ] && [ -f "$STORAGE/windows.net" ]; then + if [ -s "$STORAGE/windows.net" && -f "$STORAGE/windows.net" ]; then if [ -z "${ADAPTER:-}" ]; then ADAPTER=$(<"$STORAGE/windows.net") ADAPTER="${ADAPTER//[![:print:]]/}" fi fi - if [ -s "$STORAGE/windows.type" ] && [ -f "$STORAGE/windows.type" ]; then + if [ -s "$STORAGE/windows.type" && -f "$STORAGE/windows.type" ]; then if [ -z "${DISK_TYPE:-}" ]; then DISK_TYPE=$(<"$STORAGE/windows.type") DISK_TYPE="${DISK_TYPE//[![:print:]]/}" fi fi - if [ -s "$STORAGE/windows.mode" ] && [ -f "$STORAGE/windows.mode" ]; then + if [ -s "$STORAGE/windows.mode" && -f "$STORAGE/windows.mode" ]; then BOOT_MODE=$(<"$STORAGE/windows.mode") BOOT_MODE="${BOOT_MODE//[![:print:]]/}" fi - if [ -s "$STORAGE/windows.old" ] && [ -f "$STORAGE/windows.old" ]; then + if [ -s "$STORAGE/windows.old" && -f "$STORAGE/windows.old" ]; then if [[ "${PLATFORM,,}" == "x64" ]]; then MACHINE=$(<"$STORAGE/windows.old") MACHINE="${MACHINE//[![:print:]]/}" @@ -1194,7 +1194,7 @@ if ! startInstall; then exit 68 fi -if [ ! -s "$ISO" ] || [ ! -f "$ISO" ]; then +if [ ! -s "$ISO" || ! -f "$ISO" ]; then if ! downloadImage "$ISO" "$VERSION" "$LANGUAGE"; then rm -f "$ISO" 2> /dev/null || true exit 61 diff --git a/src/power.sh b/src/power.sh index 9ca5583..7b3fb2d 100644 --- a/src/power.sh +++ b/src/power.sh @@ -91,7 +91,7 @@ finish() { done fi - if [ ! -f "$STORAGE/windows.boot" ] && [ -f "$BOOT" ]; then + if [ ! -f "$STORAGE/windows.boot" && -f "$BOOT" ]; then # Remove CD-ROM ISO after install if ready; then touch "$STORAGE/windows.boot" diff --git a/src/samba.sh b/src/samba.sh index e5b4442..77a3eb5 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -88,9 +88,9 @@ addShare() { } > "/etc/samba/smb.conf" share="/data" -[ ! -d "$share" ] && [ -d "$STORAGE/data" ] && share="$STORAGE/data" -[ ! -d "$share" ] && [ -d "/shared" ] && share="/shared" -[ ! -d "$share" ] && [ -d "$STORAGE/shared" ] && share="$STORAGE/shared" +[ ! -d "$share" && -d "$STORAGE/data" ] && share="$STORAGE/data" +[ ! -d "$share" && -d "/shared" ] && share="/shared" +[ ! -d "$share" && -d "$STORAGE/shared" ] && share="$STORAGE/shared" if ! addShare "$share" "Data" "Shared"; then error "Failed to add shared folder '$share'. Please check its permissions." && return 0 From 0f918c8cb0cad13aa4b4afb07e11f64b573c50e3 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 21 Sep 2025 23:04:29 +0200 Subject: [PATCH 221/290] revert: Simplify conditional checks (#1414) This reverts commit 9c08dc7b1e7d3f78f0ef7f40a73e09e968a8a8b0. --- src/define.sh | 10 +++++----- src/install.sh | 36 ++++++++++++++++++------------------ src/power.sh | 2 +- src/samba.sh | 6 +++--- 4 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/define.sh b/src/define.sh index efc8c53..31df027 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1269,7 +1269,7 @@ getValue() { local type="$4" local func="getLink$1" - if [ "$1" -gt 0 && "$1" -le "$MIRRORS" ]; then + if [ "$1" -gt 0 ] && [ "$1" -le "$MIRRORS" ]; then val=$($func "$id" "$lang" "$type") fi @@ -1394,7 +1394,7 @@ prepareInstall() { ETFS="[BOOT]/Boot-NoEmul.img" - if [ ! -f "$dir/$ETFS" || ! -s "$dir/$ETFS" ]; then + if [ ! -f "$dir/$ETFS" ] || [ ! -s "$dir/$ETFS" ]; then error "Failed to locate file \"$ETFS\" in $desc ISO image!" && return 1 fi @@ -1478,7 +1478,7 @@ prepareInstall() { local key setup setup=$(find "$target" -maxdepth 1 -type f -iname setupp.ini -print -quit) - if [ -n "$setup" & -z "$KEY" ]; then + if [ -n "$setup" ] && [ -z "$KEY" ]; then pid=$(<"$setup") pid="${pid%$'\r'}" @@ -1795,7 +1795,7 @@ prepareLegacy() { ETFS="boot.img" - [ -f "$dir/$ETFS" && -s "$dir/$ETFS" ] && return 0 + [ -f "$dir/$ETFS" ] && [ -s "$dir/$ETFS" ] && return 0 rm -f "$dir/$ETFS" local len offset @@ -1806,7 +1806,7 @@ prepareLegacy() { error "Failed to extract boot image from $desc ISO!" && return 1 fi - [ -f "$dir/$ETFS" && -s "$dir/$ETFS" ] && return 0 + [ -f "$dir/$ETFS" ] && [ -s "$dir/$ETFS" ] && return 0 error "Failed to locate file \"$ETFS\" in $desc ISO image!" return 1 diff --git a/src/install.sh b/src/install.sh index a490479..084bbd2 100644 --- a/src/install.sh +++ b/src/install.sh @@ -162,7 +162,7 @@ startInstall() { ISO=$(basename "$BOOT") ISO="$TMP/$ISO" - if [ -f "$BOOT" && -s "$BOOT" ]; then + if [ -f "$BOOT" ] && [ -s "$BOOT" ]; then mv -f "$BOOT" "$ISO" fi @@ -183,7 +183,7 @@ finishInstall() { local aborted="$2" local base byte - if [ ! -s "$iso" || ! -f "$iso" ]; then + if [ ! -s "$iso" ] || [ ! -f "$iso" ]; then error "Failed to find ISO file: $iso" && return 1 fi @@ -304,7 +304,7 @@ findFile() { file="$STORAGE/$base" fi - if [ ! -f "$file" || ! -s "$file" ]; then + if [ ! -f "$file" ] || [ ! -s "$file" ]; then return 0 fi @@ -621,11 +621,11 @@ setXML() { error "The bind $file maps to a file that does not exist!" && exit 67 fi - [ ! -f "$file" || ! -s "$file" ] && file="$STORAGE/custom.xml" - [ ! -f "$file" || ! -s "$file" ] && file="/run/assets/custom.xml" - [ ! -f "$file" || ! -s "$file" ] && file="$1" - [ ! -f "$file" || ! -s "$file" ] && file="/run/assets/$DETECTED.xml" - [ ! -f "$file" || ! -s "$file" ] && return 1 + [ ! -f "$file" ] || [ ! -s "$file" ] && file="$STORAGE/custom.xml" + [ ! -f "$file" ] || [ ! -s "$file" ] && file="/run/assets/custom.xml" + [ ! -f "$file" ] || [ ! -s "$file" ] && file="$1" + [ ! -f "$file" ] || [ ! -s "$file" ] && file="/run/assets/$DETECTED.xml" + [ ! -f "$file" ] || [ ! -s "$file" ] && return 1 XML="$file" return 0 @@ -639,7 +639,7 @@ detectImage() { XML="" - if [ -z "$DETECTED" && -z "$CUSTOM" ]; then + if [ -z "$DETECTED" ] && [ -z "$CUSTOM" ]; then [[ "${version,,}" != "http"* ]] && DETECTED="$version" fi @@ -734,7 +734,7 @@ prepareImage() { if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then - [ -f "$dir/$ETFS" && -f "$dir/$EFISYS" ] && return 0 + [ -f "$dir/$ETFS" ] && [ -f "$dir/$EFISYS" ] && return 0 missing=$(basename "$dir/$EFISYS") [ ! -f "$dir/$ETFS" ] && missing=$(basename "$dir/$ETFS") @@ -955,7 +955,7 @@ updateImage() { skipVersion "${DETECTED,,}" && return 0 - if [ ! -s "$asset" || ! -f "$asset" ]; then + if [ ! -s "$asset" ] || [ ! -f "$asset" ]; then asset="" if [[ "$MANUAL" != [Yy1]* ]]; then MANUAL="Y" @@ -1140,40 +1140,40 @@ bootWindows() { ARGUMENTS="$ARGS ${ARGUMENTS:-}" fi - if [ -s "$STORAGE/windows.vga" && -f "$STORAGE/windows.vga" ]; then + if [ -s "$STORAGE/windows.vga" ] && [ -f "$STORAGE/windows.vga" ]; then if [ -z "${VGA:-}" ]; then VGA=$(<"$STORAGE/windows.vga") VGA="${VGA//[![:print:]]/}" fi fi - if [ -s "$STORAGE/windows.usb" && -f "$STORAGE/windows.usb" ]; then + if [ -s "$STORAGE/windows.usb" ] && [ -f "$STORAGE/windows.usb" ]; then if [ -z "${USB:-}" ]; then USB=$(<"$STORAGE/windows.usb") USB="${USB//[![:print:]]/}" fi fi - if [ -s "$STORAGE/windows.net" && -f "$STORAGE/windows.net" ]; then + if [ -s "$STORAGE/windows.net" ] && [ -f "$STORAGE/windows.net" ]; then if [ -z "${ADAPTER:-}" ]; then ADAPTER=$(<"$STORAGE/windows.net") ADAPTER="${ADAPTER//[![:print:]]/}" fi fi - if [ -s "$STORAGE/windows.type" && -f "$STORAGE/windows.type" ]; then + if [ -s "$STORAGE/windows.type" ] && [ -f "$STORAGE/windows.type" ]; then if [ -z "${DISK_TYPE:-}" ]; then DISK_TYPE=$(<"$STORAGE/windows.type") DISK_TYPE="${DISK_TYPE//[![:print:]]/}" fi fi - if [ -s "$STORAGE/windows.mode" && -f "$STORAGE/windows.mode" ]; then + if [ -s "$STORAGE/windows.mode" ] && [ -f "$STORAGE/windows.mode" ]; then BOOT_MODE=$(<"$STORAGE/windows.mode") BOOT_MODE="${BOOT_MODE//[![:print:]]/}" fi - if [ -s "$STORAGE/windows.old" && -f "$STORAGE/windows.old" ]; then + if [ -s "$STORAGE/windows.old" ] && [ -f "$STORAGE/windows.old" ]; then if [[ "${PLATFORM,,}" == "x64" ]]; then MACHINE=$(<"$STORAGE/windows.old") MACHINE="${MACHINE//[![:print:]]/}" @@ -1194,7 +1194,7 @@ if ! startInstall; then exit 68 fi -if [ ! -s "$ISO" || ! -f "$ISO" ]; then +if [ ! -s "$ISO" ] || [ ! -f "$ISO" ]; then if ! downloadImage "$ISO" "$VERSION" "$LANGUAGE"; then rm -f "$ISO" 2> /dev/null || true exit 61 diff --git a/src/power.sh b/src/power.sh index 7b3fb2d..9ca5583 100644 --- a/src/power.sh +++ b/src/power.sh @@ -91,7 +91,7 @@ finish() { done fi - if [ ! -f "$STORAGE/windows.boot" && -f "$BOOT" ]; then + if [ ! -f "$STORAGE/windows.boot" ] && [ -f "$BOOT" ]; then # Remove CD-ROM ISO after install if ready; then touch "$STORAGE/windows.boot" diff --git a/src/samba.sh b/src/samba.sh index 77a3eb5..e5b4442 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -88,9 +88,9 @@ addShare() { } > "/etc/samba/smb.conf" share="/data" -[ ! -d "$share" && -d "$STORAGE/data" ] && share="$STORAGE/data" -[ ! -d "$share" && -d "/shared" ] && share="/shared" -[ ! -d "$share" && -d "$STORAGE/shared" ] && share="$STORAGE/shared" +[ ! -d "$share" ] && [ -d "$STORAGE/data" ] && share="$STORAGE/data" +[ ! -d "$share" ] && [ -d "/shared" ] && share="/shared" +[ ! -d "$share" ] && [ -d "$STORAGE/shared" ] && share="$STORAGE/shared" if ! addShare "$share" "Data" "Shared"; then error "Failed to add shared folder '$share'. Please check its permissions." && return 0 From 4a5e455389c5bd07b793c7d11a0fb63e89e5e564 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 22 Sep 2025 08:25:53 +0200 Subject: [PATCH 222/290] feat: Download older Windows 11 build on ARMv8.0 (#1416) --- src/define.sh | 4 +- src/mido.sh | 125 +++++++++++++++++++++++++++++++++++++------------- 2 files changed, 96 insertions(+), 33 deletions(-) diff --git a/src/define.sh b/src/define.sh index 31df027..62a6f9e 100644 --- a/src/define.sh +++ b/src/define.sh @@ -436,7 +436,7 @@ printVersion() { "tiny11"* ) desc="Tiny 11" ;; "tiny10"* ) desc="Tiny 10" ;; "core11"* ) desc="Core 11" ;; - "nano11"* ) desc="Nano 11" ;; + "nano11"* ) desc="Nano 11" ;; "win7"* ) desc="Windows 7" ;; "win8"* ) desc="Windows 8" ;; "win10"* ) desc="Windows 10" ;; @@ -577,7 +577,7 @@ fromFile() { ;; "nano11"* | "nano_11"* ) id="nano11" - ;; + ;; "tiny11core"* | "tiny11_core"* | "tiny_11_core"* ) id="core11" ;; diff --git a/src/mido.sh b/src/mido.sh index a6dada2..5c0b2b5 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -364,6 +364,36 @@ getWindows() { return 0 } +getBuild() { + + local id="$1" + local ret="$2" + local url="" + local name="" + local build="$3" + local edition="" + local file="catalog.xml" + + case "${id,,}" in + "win11${PLATFORM,,}" ) + name="Windows 11 Pro" + url="https://worproject.com/dldserv/esd/getcatalog.php?build=${build}&arch=${PLATFORM^^}&edition=Professional" ;; + "win11${PLATFORM,,}-enterprise" | "win11${PLATFORM,,}-enterprise-eval") + name="Windows 11 Enterprise" + url="https://worproject.com/dldserv/esd/getcatalog.php?build=${build}&arch=${PLATFORM^^}&edition=Enterprise" ;; + esac + + case "${ret,,}" in + "url" ) echo "$url" ;; + "file" ) echo "$file" ;; + "name" ) echo "$name" ;; + "edition" ) echo "$edition" ;; + *) echo "";; + esac + + return 0 +} + getCatalog() { local id="$1" @@ -371,6 +401,14 @@ getCatalog() { local url="" local name="" local edition="" + local file="catalog.cab" + + if [[ "${id,,}" == "win11"* && "${PLATFORM,,}" != "x64" && "${ARCH,,}" == "arm64" ]]; then + # ARMv8.0 cannot run Windows 11 builds higher than 22631 + if ! grep -qw 'Features.*atomics' /proc/cpuinfo; then + "$(getBuild "$1" "$2" "22631.2861")" && return 0 + fi + fi case "${id,,}" in "win11${PLATFORM,,}" ) @@ -393,8 +431,9 @@ getCatalog() { case "${ret,,}" in "url" ) echo "$url" ;; + "file" ) echo "$file" ;; "name" ) echo "$name" ;; - "edition" ) echo "$edition" ;; + "edition" ) echo '[Edition="'"${edition}"'"]' ;; *) echo "";; esac @@ -407,62 +446,71 @@ getESD() { local version="$2" local lang="$3" local desc="$4" + local file local result local culture local language - local editionName - local winCatalog + local edition + local catalog + file=$(getCatalog "$version" "file") + catalog=$(getCatalog "$version" "url") culture=$(getLanguage "$lang" "culture") - winCatalog=$(getCatalog "$version" "url") - editionName=$(getCatalog "$version" "edition") + edition=$(getCatalog "$version" "edition") - if [ -z "$winCatalog" ] || [ -z "$editionName" ]; then + if [ -z "$file" ] || [ -z "$catalog" ]; then error "Invalid VERSION specified, value \"$version\" is not recognized!" && return 1 fi - local msg="Downloading product information from Microsoft server..." + local msg="Downloading product information..." info "$msg" && html "$msg" rm -rf "$dir" mkdir -p "$dir" - local wFile="catalog.cab" local xFile="products.xml" local eFile="esd_edition.xml" local fFile="products_filter.xml" - { wget "$winCatalog" -O "$dir/$wFile" -q --timeout=30 --no-http-keep-alive; rc=$?; } || : + { wget "$catalog" -O "$dir/$file" -q --timeout=30 --no-http-keep-alive; rc=$?; } || : - msg="Failed to download $winCatalog" + msg="Failed to download $catalog" (( rc == 3 )) && error "$msg , cannot write file (disk full?)" && return 1 (( rc == 4 )) && error "$msg , network failure!" && return 1 (( rc == 8 )) && error "$msg , server issued an error response!" && return 1 (( rc != 0 )) && error "$msg , reason: $rc" && return 1 - cd "$dir" + if [[ "$file" == *".xml" ]]; then + + mv -f "$dir/$file" "$dir/$xFile" + + else + + cd "$dir" + + if ! cabextract "$file" > /dev/null; then + cd /run + error "Failed to extract $file!" && return 1 + fi - if ! cabextract "$wFile" > /dev/null; then cd /run - error "Failed to extract $wFile!" && return 1 - fi - cd /run + fi if [ ! -s "$dir/$xFile" ]; then - error "Failed to find $xFile in $wFile!" && return 1 + error "Failed to find $xFile in $file!" && return 1 fi - local edQuery='//File[Architecture="'${PLATFORM,,}'"][Edition="'${editionName}'"]' + local edQuery='//File[Architecture="'${PLATFORM,,}'"]'"${edition}"'' result=$(xmllint --nonet --xpath "${edQuery}" "$dir/$xFile" 2>/dev/null) if [ -z "$result" ]; then - edQuery='//File[Architecture="'${PLATFORM^^}'"][Edition="'${editionName}'"]' + edQuery='//File[Architecture="'${PLATFORM^^}'"]'"${edition}"'' + result=$(xmllint --nonet --xpath "${edQuery}" "$dir/$xFile" 2>/dev/null) if [ -z "$result" ]; then - desc=$(printEdition "$version" "$desc") language=$(getLanguage "$lang" "desc") error "No download link available for $desc!" && return 1 @@ -623,25 +671,40 @@ downloadFile() { return 1 } +delay() { + + local i + local delay="$1" + local msg="Will retry in X seconds..." + + info "${msg/X/$delay}" + + for i in $(seq "$delay" -1 1); do + html "${msg/X/$i}" + sleep 1 + done + + return 0 +} + downloadImage() { local iso="$1" local version="$2" local lang="$3" - local delay=5 local tried="n" local success="n" + local seconds="5" local url sum size base desc language - local msg="Will retry after $delay seconds..." if [[ "${version,,}" == "http"* ]]; then base=$(basename "$iso") desc=$(fromFile "$base") - rm -f "$iso" + rm -f "$iso" downloadFile "$iso" "$version" "" "" "" "$desc" && return 0 - info "$msg" && html "$msg" && sleep "$delay" + delay "$seconds" downloadFile "$iso" "$version" "" "" "" "$desc" && return 0 rm -f "$iso" @@ -671,7 +734,7 @@ downloadImage() { if getWindows "$version" "$lang" "$desc"; then success="y" else - info "$msg" && html "$msg" && sleep "$delay" + delay "$seconds" getWindows "$version" "$lang" "$desc" && success="y" fi @@ -679,9 +742,9 @@ downloadImage() { size=$(getMido "$version" "$lang" "size" ) sum=$(getMido "$version" "$lang" "sum") - rm -f "$iso" + rm -f "$iso" downloadFile "$iso" "$MIDO_URL" "$sum" "$size" "$lang" "$desc" && return 0 - info "$msg" && html "$msg" && sleep "$delay" + delay "$seconds" downloadFile "$iso" "$MIDO_URL" "$sum" "$size" "$lang" "$desc" && return 0 rm -f "$iso" fi @@ -701,7 +764,7 @@ downloadImage() { if getESD "$TMP/esd" "$version" "$lang" "$desc"; then success="y" else - info "$msg" && html "$msg" && sleep "$delay" + delay "$seconds" getESD "$TMP/esd" "$version" "$lang" "$desc" && success="y" fi @@ -710,7 +773,7 @@ downloadImage() { rm -f "$ISO" downloadFile "$ISO" "$ESD" "$ESD_SUM" "$ESD_SIZE" "$lang" "$desc" && return 0 - info "$msg" && html "$msg" && sleep "$delay" + delay "$seconds" downloadFile "$ISO" "$ESD" "$ESD_SUM" "$ESD_SIZE" "$lang" "$desc" && return 0 rm -f "$ISO" ISO="$iso" @@ -727,14 +790,14 @@ downloadImage() { if [[ "$tried" != "n" ]]; then info "Failed to download $desc, will try another mirror now..." fi - + tried="y" size=$(getSize "$i" "$version" "$lang") sum=$(getHash "$i" "$version" "$lang") - rm -f "$iso" + rm -f "$iso" downloadFile "$iso" "$url" "$sum" "$size" "$lang" "$desc" && return 0 - info "$msg" && html "$msg" && sleep "$delay" + delay "$seconds" downloadFile "$iso" "$url" "$sum" "$size" "$lang" "$desc" && return 0 rm -f "$iso" fi From e56f059bd2023548214738f8a88a620b70ed141e Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 22 Sep 2025 09:33:42 +0200 Subject: [PATCH 223/290] feat: Implement ARM compatibility check for Windows 11 (#1417) --- src/define.sh | 4 ++++ src/mido.sh | 6 ++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/define.sh b/src/define.sh index 62a6f9e..9da1979 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1885,6 +1885,10 @@ skipVersion() { return 1 } +isCompatible() { + return 0 +} + setMachine() { local id="$1" diff --git a/src/mido.sh b/src/mido.sh index 5c0b2b5..dba6dfb 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -403,11 +403,9 @@ getCatalog() { local edition="" local file="catalog.cab" - if [[ "${id,,}" == "win11"* && "${PLATFORM,,}" != "x64" && "${ARCH,,}" == "arm64" ]]; then + if [[ "${id,,}" == "win11"* ]] && ! isCompatible; then # ARMv8.0 cannot run Windows 11 builds higher than 22631 - if ! grep -qw 'Features.*atomics' /proc/cpuinfo; then - "$(getBuild "$1" "$2" "22631.2861")" && return 0 - fi + getBuild "$1" "$2" "22631.2861" && return 0 fi case "${id,,}" in From a14426478c4e699cd3ff80dea4e650924fff2016 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 22 Sep 2025 21:31:28 +0200 Subject: [PATCH 224/290] chore(deps): update hadolint/hadolint-action action to v3.3.0 (#1418) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 71c2d33..788a2b0 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -18,7 +18,7 @@ jobs: path: "assets" file-endings: ".xml" - name: Lint Dockerfile - uses: hadolint/hadolint-action@v3.2.0 + uses: hadolint/hadolint-action@v3.3.0 with: dockerfile: Dockerfile ignore: DL3006,DL3008 From 221f4feac379115ae359dd15fe215a23af3703ea Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 22 Sep 2025 21:38:24 +0200 Subject: [PATCH 225/290] build: Update QEMU base image to v7.16 (#1419) --- Dockerfile | 2 +- src/mido.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index bf806ce..207c6a3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.15 / / +COPY --from=qemux/qemu:7.16 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" diff --git a/src/mido.sh b/src/mido.sh index dba6dfb..2ac83ac 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -404,7 +404,7 @@ getCatalog() { local file="catalog.cab" if [[ "${id,,}" == "win11"* ]] && ! isCompatible; then - # ARMv8.0 cannot run Windows 11 builds higher than 22631 + # ARMv8.0 cannot run Windows 11 builds 24H2 and up. getBuild "$1" "$2" "22631.2861" && return 0 fi From 5425783f5cd0e659f1551399964d75614ba7ef51 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 23 Sep 2025 16:17:31 +0200 Subject: [PATCH 226/290] feat: Update information (#1421) --- src/mido.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mido.sh b/src/mido.sh index 2ac83ac..2d1dc00 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -460,7 +460,7 @@ getESD() { error "Invalid VERSION specified, value \"$version\" is not recognized!" && return 1 fi - local msg="Downloading product information..." + local msg="Downloading catalog..." info "$msg" && html "$msg" rm -rf "$dir" From c8b4cb9c141e323bff909552a1ac9f11769e23c6 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 23 Sep 2025 16:55:11 +0200 Subject: [PATCH 227/290] feat: Surpress errors when setting permissions (#1422) --- src/samba.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index e5b4442..6c3d38f 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -111,10 +111,10 @@ for dir in "${dirs[@]}"; do addShare "$dir" "$dir_name" "Shared $dir_name" || error "Failed to create shared folder for $dir!" done -# Fix Samba permissions -[ -d /run/samba/msg.lock ] && chmod -R 0755 /run/samba/msg.lock -[ -d /var/log/samba/cores ] && chmod -R 0700 /var/log/samba/cores -[ -d /var/cache/samba/msg.lock ] && chmod -R 0755 /var/cache/samba/msg.lock +# Try to fix Samba permissions +[ -d /run/samba/msg.lock ] && chmod -R 0755 /run/samba/msg.lock 2>/dev/null || : +[ -d /var/log/samba/cores ] && chmod -R 0700 /var/log/samba/cores 2>/dev/null || : +[ -d /var/cache/samba/msg.lock ] && chmod -R 0755 /var/cache/samba/msg.lock 2>/dev/null || : if ! smbd; then error "Samba daemon failed to start!" From fa7302fd1844dc245c9867c7a1b5d9073a5f8e03 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 24 Sep 2025 16:38:22 +0200 Subject: [PATCH 228/290] build: Update QEMU base image to v7.17 (#1427) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 207c6a3..3b6a971 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.16 / / +COPY --from=qemux/qemu:7.17 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" From 021d0c88f156723de558d8355acb8b1fbb908d3b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 30 Sep 2025 00:47:36 +0200 Subject: [PATCH 229/290] chore(deps): update qemux/qemu docker tag to v7.18 (#1434) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 3b6a971..717e221 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.17 / / +COPY --from=qemux/qemu:7.18 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" From 6707de3db462934ee3100eb7b26d924775866191 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 30 Sep 2025 10:08:39 +0200 Subject: [PATCH 230/290] feat: Hide Windows Copilot button by default (#1435) --- assets/win10x64-enterprise-eval.xml | 29 ++++++++++++++---------- assets/win10x64-enterprise.xml | 29 ++++++++++++++---------- assets/win10x64-iot.xml | 29 ++++++++++++++---------- assets/win10x64-ltsc.xml | 29 ++++++++++++++---------- assets/win10x64.xml | 29 ++++++++++++++---------- assets/win11x64-enterprise-eval.xml | 35 ++++++++++++++++------------- assets/win11x64-enterprise.xml | 35 ++++++++++++++++------------- assets/win11x64-iot.xml | 35 ++++++++++++++++------------- assets/win11x64-ltsc.xml | 35 ++++++++++++++++------------- assets/win11x64.xml | 35 ++++++++++++++++------------- assets/win2025-eval.xml | 18 +++++++-------- assets/win2025.xml | 18 +++++++-------- 12 files changed, 203 insertions(+), 153 deletions(-) diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml index f91811f..05a0437 100644 --- a/assets/win10x64-enterprise-eval.xml +++ b/assets/win10x64-enterprise-eval.xml @@ -355,66 +355,71 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Hide Copilot button</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> <Description>Add entry in hosts file</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-enterprise.xml b/assets/win10x64-enterprise.xml index dc0b0d7..742a6d9 100644 --- a/assets/win10x64-enterprise.xml +++ b/assets/win10x64-enterprise.xml @@ -358,66 +358,71 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Hide Copilot button</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> <Description>Add entry in hosts file</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-iot.xml b/assets/win10x64-iot.xml index 08741af..05ffaf5 100644 --- a/assets/win10x64-iot.xml +++ b/assets/win10x64-iot.xml @@ -364,66 +364,71 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Hide Copilot button</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> <Description>Add entry in hosts file</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index e3823a9..8700e26 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -361,66 +361,71 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Hide Copilot button</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> <Description>Add entry in hosts file</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index 969ffe3..d863512 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -358,66 +358,71 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Hide Copilot button</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> <Description>Add entry in hosts file</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index a354801..ea321ad 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -378,81 +378,86 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Hide Copilot button</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> <Description>Add entry in hosts file</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>25</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index 99d86a5..e76caad 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -381,81 +381,86 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Hide Copilot button</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> <Description>Add entry in hosts file</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>25</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml index 699d176..ae4282d 100644 --- a/assets/win11x64-iot.xml +++ b/assets/win11x64-iot.xml @@ -381,81 +381,86 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Hide Copilot button</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> <Description>Add entry in hosts file</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>25</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml index 20cbfd4..bc27ec0 100644 --- a/assets/win11x64-ltsc.xml +++ b/assets/win11x64-ltsc.xml @@ -381,81 +381,86 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Hide Copilot button</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> <Description>Add entry in hosts file</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>25</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index 4919df1..53e73bb 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -381,81 +381,86 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Hide Copilot button</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> <Description>Add entry in hosts file</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>25</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml index d781af7..ff7f7fa 100644 --- a/assets/win2025-eval.xml +++ b/assets/win2025-eval.xml @@ -277,34 +277,34 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Hide Copilot button</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>14</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Remove Search from the Taskbar</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> diff --git a/assets/win2025.xml b/assets/win2025.xml index f6974f6..c67965f 100644 --- a/assets/win2025.xml +++ b/assets/win2025.xml @@ -280,34 +280,34 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>9</Order> + <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowCopilotButton" /t REG_DWORD /d 0 /f</CommandLine> + <Description>Hide Copilot button</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>10</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "HideFileExt" /t REG_DWORD /d 0 /f</CommandLine> <Description>Show file extensions in Explorer</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>10</Order> + <Order>11</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateFileSizePercent" /t REG_DWORD /d 0 /f</CommandLine> <Description>Zero Hibernation File</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>11</Order> + <Order>12</Order> <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Power" /v "HibernateEnabled" /t REG_DWORD /d 0 /f</CommandLine> <Description>Disable Hibernation</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>12</Order> + <Order>13</Order> <CommandLine>cmd /C POWERCFG -X -standby-timeout-ac 0</CommandLine> <Description>Disable Sleep</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>13</Order> + <Order>14</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> <Description>Enable RemoteAPP to launch unlisted programs</Description> </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>14</Order> - <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> - <Description>Remove Search from the Taskbar</Description> - </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> From b308de3472828bc6f51da0156c22cf83bc8f709e Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 30 Sep 2025 10:28:37 +0200 Subject: [PATCH 231/290] feat: Add Windows 11 25H2 download mirror (#1436) --- src/define.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/src/define.sh b/src/define.sh index 9da1979..64e6ecb 100644 --- a/src/define.sh +++ b/src/define.sh @@ -724,6 +724,7 @@ getMido() { "win11x64" ) size=5819484160 sum="b56b911bf18a2ceaeb3904d87e7c770bdf92d3099599d61ac2497b91bf190b11" + url="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26200.6584.250915-1905.25h2_ge_release_svc_refresh_CLIENT_CONSUMER_x64FRE_en-us.iso" ;; "win11x64-enterprise-eval" ) size=5387960320 From 6be89c929e10d4597f409cab5dfd12232f8d266e Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 1 Oct 2025 13:17:26 +0200 Subject: [PATCH 232/290] build: Update QEMU base image to v7.19 (#1438) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 717e221..f28ad59 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.18 / / +COPY --from=qemux/qemu:7.19 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" From f8dcd825021983ff6ed1f8f958d8ebb67cad8815 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 1 Oct 2025 16:58:49 +0200 Subject: [PATCH 233/290] feat: Add Windows 11 25H2 download (#1439) --- readme.md | 4 ++-- src/define.sh | 10 +++++----- src/mido.sh | 27 +++++++++++++++++++++------ 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/readme.md b/readme.md index 1c41efa..ede4afa 100644 --- a/readme.md +++ b/readme.md @@ -93,9 +93,9 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas | **Value** | **Version** | **Size** | |---|---|---| - | `11` | Windows 11 Pro | 5.4 GB | + | `11` | Windows 11 Pro | 7.2 GB | | `11l` | Windows 11 LTSC | 4.7 GB | - | `11e` | Windows 11 Enterprise | 5.3 GB | + | `11e` | Windows 11 Enterprise | 6.6 GB | |||| | `10` | Windows 10 Pro | 5.7 GB | | `10l` | Windows 10 LTSC | 4.6 GB | diff --git a/src/define.sh b/src/define.sh index 64e6ecb..f14e330 100644 --- a/src/define.sh +++ b/src/define.sh @@ -722,14 +722,14 @@ getMido() { case "${id,,}" in "win11x64" ) - size=5819484160 - sum="b56b911bf18a2ceaeb3904d87e7c770bdf92d3099599d61ac2497b91bf190b11" + size=7736125440 + sum="d141f6030fed50f75e2b03e1eb2e53646c4b21e5386047cb860af5223f102a32" url="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26200.6584.250915-1905.25h2_ge_release_svc_refresh_CLIENT_CONSUMER_x64FRE_en-us.iso" ;; "win11x64-enterprise-eval" ) - size=5387960320 - sum="755a90d43e826a74b9e1932a34788b898e028272439b777e5593dee8d53622ae" - url="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1.240331-1435.ge_release_CLIENTENTERPRISEEVAL_OEMRET_A64FRE_en-us.iso" + size=7092807680 + sum="a61adeab895ef5a4db436e0a7011c92a2ff17bb0357f58b13bbc4062e535e7b9" + url="https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26200.6584.250915-1905.25h2_ge_release_svc_refresh_CLIENTENTERPRISEEVAL_OEMRET_x64FRE_en-us.iso" ;; "win11x64-enterprise-iot-eval" | "win11x64-enterprise-ltsc-eval" ) size=5060020224 diff --git a/src/mido.sh b/src/mido.sh index 2d1dc00..b4a0643 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -171,6 +171,8 @@ download_windows() { return 1 fi + [[ "$DEBUG" == [Yy1]* ]] && echo "Found download link: $iso_download_link" + MIDO_URL="$iso_download_link" return 0 } @@ -274,8 +276,6 @@ download_windows_eval() { fi ;; "arm64" ) iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1) ;; - * ) - error "Invalid platform specified, value \"$PLATFORM\" is not recognized!" && return 1 ;; esac ;; "enterprise" ) case "${PLATFORM,,}" in @@ -287,16 +287,16 @@ download_windows_eval() { fi ;; "arm64" ) iso_download_link=$(echo "$iso_download_links" | head -n 2 | tail -n 1) ;; - * ) - error "Invalid platform specified, value \"$PLATFORM\" is not recognized!" && return 1 ;; esac ;; "server" ) - iso_download_link=$(echo "$iso_download_links" | head -n 1) ;; + case "${PLATFORM,,}" in + "x64" ) + iso_download_link=$(echo "$iso_download_links" | head -n 1) ;; + esac ;; * ) error "Invalid type specified, value \"$enterprise_type\" is not recognized!" && return 1 ;; esac - [[ "$DEBUG" == [Yy1]* ]] && echo "Found download link: $iso_download_link" [ -z "$iso_download_link" ] && error "Could not parse download link from page!" && return 1 # Follow redirect so proceeding log message is useful @@ -308,6 +308,21 @@ download_windows_eval() { return $? } + [[ "$DEBUG" == [Yy1]* ]] && echo "Found download link: $iso_download_link" + + case "${PLATFORM,,}" in + "x64" ) + if [[ "${iso_download_link,,}" != *"x64"* ]]; then + error "Download link is for the wrong platform? Please report this at $SUPPORT/issues" + return 1 + fi ;; + "arm64" ) + if [[ "${iso_download_link,,}" != *"a64"* && "${iso_download_link,,}" != *"arm64"* ]]; then + [[ "$DEBUG" == [Yy1]* ]] && echo "Link for ARM platform currently not available!" + return 1 + fi ;; + esac + MIDO_URL="$iso_download_link" return 0 } From 8a2f23275e03c1864e2037c4e46afda3c48d9661 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 1 Oct 2025 17:17:23 +0200 Subject: [PATCH 234/290] chore(deps): update peter-evans/dockerhub-description action to v5 (#1440) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/hub.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/hub.yml b/.github/workflows/hub.yml index 263e97c..0b2c17e 100644 --- a/.github/workflows/hub.yml +++ b/.github/workflows/hub.yml @@ -15,7 +15,7 @@ jobs: - uses: actions/checkout@v5 - name: Docker Hub Description - uses: peter-evans/dockerhub-description@v4 + uses: peter-evans/dockerhub-description@v5 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} From e945e852dc090b58885bab6a12f25fd219bad5a7 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 1 Oct 2025 17:34:13 +0200 Subject: [PATCH 235/290] feat: Verify download link (#1441) --- src/mido.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/mido.sh b/src/mido.sh index b4a0643..2f35442 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -184,6 +184,7 @@ download_windows_eval() { local desc="$3" local filter="" local culture="" + local compare="" local language="" local user_agent="" local enterprise_type="" @@ -323,6 +324,13 @@ download_windows_eval() { fi ;; esac + if [[ "$DEBUG" == [Yy1]* && "$VERIFY" == [Yy1]* && "${lang,,}" == "en"* ]]; then + compare=$(getMido "$id" "$lang" "") + if [[ "${iso_download_link,,}" != "${compare,,}" ]]; then + echo "Retrieved link does not match the fixed link: $compare" + fi + fi + MIDO_URL="$iso_download_link" return 0 } From fde0ae7c4ba2a91fd2af135d8741da965a8d25dd Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 2 Oct 2025 10:46:20 +0200 Subject: [PATCH 236/290] feat: Add additional debug messages (#1442) --- src/samba.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/samba.sh b/src/samba.sh index 6c3d38f..ca54266 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -18,6 +18,9 @@ if [[ "${NETWORK,,}" == "user"* ]]; then interface="127.0.0.1" fi +html "Starting file sharing services..." +[[ "$DEBUG" == [Yy1]* ]] && echo "Starting Samba daemon..." + addShare() { local dir="$1" local name="$2" @@ -123,12 +126,14 @@ fi if [[ "${BOOT_MODE:-}" == "windows_legacy" ]]; then # Enable NetBIOS on Windows 7 and lower + [[ "$DEBUG" == [Yy1]* ]] && echo "Starting NetBIOS daemon..." if ! nmbd; then error "NetBIOS daemon failed to start!" nmbd -i --debug-stdout || true fi else # Enable Web Service Discovery on Vista and up + [[ "$DEBUG" == [Yy1]* ]] && echo "Starting Web Service Discovery daemon..." wsddn -i "$interface" -H "$hostname" --pid-file=/var/run/wsdd.pid >/dev/null & fi From eeb34252115515aef9077b2d5183ee88081bfd8a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 2 Oct 2025 20:04:15 +0200 Subject: [PATCH 237/290] feat: Enhanced Samba debugging (#1444) --- src/samba.sh | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index ca54266..b35307b 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -1,7 +1,9 @@ #!/usr/bin/env bash set -Eeuo pipefail -: "${SAMBA:="Y"}" +: "${SAMBA:="Y"}" # Enable Samba +: "${SAMBA_DEBUG:="N"}" # Disable debug +: "${SAMBA_LEVEL:="1"}" # Debug log level [[ "$SAMBA" == [Nn]* ]] && return 0 [[ "$NETWORK" == [Nn]* ]] && return 0 @@ -18,7 +20,7 @@ if [[ "${NETWORK,,}" == "user"* ]]; then interface="127.0.0.1" fi -html "Starting file sharing services..." +html "Initializing shared folder..." [[ "$DEBUG" == [Yy1]* ]] && echo "Starting Samba daemon..." addShare() { @@ -119,22 +121,44 @@ done [ -d /var/log/samba/cores ] && chmod -R 0700 /var/log/samba/cores 2>/dev/null || : [ -d /var/cache/samba/msg.lock ] && chmod -R 0755 /var/cache/samba/msg.lock 2>/dev/null || : -if ! smbd; then - error "Samba daemon failed to start!" - smbd -i --debug-stdout || true +if [[ "$SAMBA_DEBUG" != [Yy1]* ]]; then + if ! smbd; then + SAMBA_DEBUG="Y" + error "Samba daemon failed to start!" + fi +fi + +if [[ "$SAMBA_DEBUG" == [Yy1]* ]]; then + smbd -i -d "$SAMBA_LEVEL" --debug-stdout & fi if [[ "${BOOT_MODE:-}" == "windows_legacy" ]]; then + # Enable NetBIOS on Windows 7 and lower [[ "$DEBUG" == [Yy1]* ]] && echo "Starting NetBIOS daemon..." - if ! nmbd; then - error "NetBIOS daemon failed to start!" - nmbd -i --debug-stdout || true + + if [[ "$SAMBA_DEBUG" != [Yy1]* ]]; then + if ! nmbd; then + SAMBA_DEBUG="Y" + error "NetBIOS daemon failed to start!" + fi fi + + if [[ "$SAMBA_DEBUG" == [Yy1]* ]]; then + nmbd -i -d "$SAMBA_LEVEL" --debug-stdout & + fi + else + # Enable Web Service Discovery on Vista and up [[ "$DEBUG" == [Yy1]* ]] && echo "Starting Web Service Discovery daemon..." - wsddn -i "$interface" -H "$hostname" --pid-file=/var/run/wsdd.pid >/dev/null & + + if [[ "$SAMBA_DEBUG" != [Yy1]* ]]; then + wsddn -i "$interface" -H "$hostname" --unixd --pid-file=/var/run/wsdd.pid + else + wsddn -i "$interface" -H "$hostname" --pid-file=/var/run/wsdd.pid & + fi + fi return 0 From ae185de31406b1c2d2760251ddb0d6c291a2d30c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 3 Oct 2025 00:00:08 +0200 Subject: [PATCH 238/290] build: Update QEMU base image to v7.20 (#1446) --- Dockerfile | 2 +- src/entry.sh | 1 + src/install.sh | 5 +++-- src/mido.sh | 12 ++++++------ 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index f28ad59..c23ef18 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.19 / / +COPY --from=qemux/qemu:7.20 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" diff --git a/src/entry.sh b/src/entry.sh index 17b2147..b7f9e0a 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -8,6 +8,7 @@ set -Eeuo pipefail cd /run +. start.sh # Placeholder . utils.sh # Load functions . reset.sh # Initialize system . define.sh # Define versions diff --git a/src/install.sh b/src/install.sh index 084bbd2..c3fa8ef 100644 --- a/src/install.sh +++ b/src/install.sh @@ -127,8 +127,9 @@ startInstall() { if [[ "${VERSION,,}" == "http"* ]]; then file=$(basename "${VERSION%%\?*}") - : "${file//+/ }"; printf -v file '%b' "${_//%/\\x}" - file=$(echo "$file" | sed -e 's/[^A-Za-z0-9._-]/_/g') + file="${file//+/ }" + printf -v file '%b' "${file//%/\\x}" + file="${file//[!A-Za-z0-9._-]/_}" else diff --git a/src/mido.sh b/src/mido.sh index 2f35442..cc5b251 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -171,8 +171,6 @@ download_windows() { return 1 fi - [[ "$DEBUG" == [Yy1]* ]] && echo "Found download link: $iso_download_link" - MIDO_URL="$iso_download_link" return 0 } @@ -309,17 +307,19 @@ download_windows_eval() { return $? } - [[ "$DEBUG" == [Yy1]* ]] && echo "Found download link: $iso_download_link" - case "${PLATFORM,,}" in "x64" ) if [[ "${iso_download_link,,}" != *"x64"* ]]; then - error "Download link is for the wrong platform? Please report this at $SUPPORT/issues" + echo "Found download link: $iso_download_link" + error "Download link is for the wrong platform? Please report this at $SUPPORT/issues" return 1 fi ;; "arm64" ) if [[ "${iso_download_link,,}" != *"a64"* && "${iso_download_link,,}" != *"arm64"* ]]; then - [[ "$DEBUG" == [Yy1]* ]] && echo "Link for ARM platform currently not available!" + if [[ "$DEBUG" == [Yy1]* ]]; then + echo "Found download link: $iso_download_link" + echo "Link for ARM platform currently not available!" + fi return 1 fi ;; esac From 4871a1e61b3be01700d73ad7bc2ef8857eeaba2d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 3 Oct 2025 00:02:03 +0200 Subject: [PATCH 239/290] feat: Create desktop shortcut to shared folder (#1447) --- assets/win10x64-enterprise-eval.xml | 5 +++++ assets/win10x64-enterprise.xml | 5 +++++ assets/win10x64-iot.xml | 5 +++++ assets/win10x64-ltsc.xml | 5 +++++ assets/win10x64.xml | 5 +++++ assets/win11x64-enterprise-eval.xml | 5 +++++ assets/win11x64-enterprise.xml | 5 +++++ assets/win11x64-iot.xml | 5 +++++ assets/win11x64-ltsc.xml | 5 +++++ assets/win11x64.xml | 5 +++++ assets/win2008r2-eval.xml | 5 +++++ assets/win2008r2.xml | 5 +++++ assets/win2012r2-eval.xml | 5 +++++ assets/win2012r2.xml | 5 +++++ assets/win2016-eval.xml | 6 ++++++ assets/win2016.xml | 6 ++++++ assets/win2019-eval.xml | 6 ++++++ assets/win2019-hv.xml | 6 ++++++ assets/win2019.xml | 5 +++++ assets/win2022-eval.xml | 6 ++++++ assets/win2022.xml | 6 ++++++ assets/win2025-eval.xml | 6 ++++++ assets/win2025.xml | 5 +++++ assets/win7x64-enterprise-eval.xml | 5 +++++ assets/win7x64-enterprise.xml | 5 +++++ assets/win7x64-ultimate.xml | 5 +++++ assets/win7x64.xml | 5 +++++ assets/win7x86-enterprise.xml | 5 +++++ assets/win7x86-ultimate.xml | 5 +++++ assets/win7x86.xml | 5 +++++ assets/win81x64-enterprise-eval.xml | 6 ++++++ assets/win81x64-enterprise.xml | 5 +++++ assets/win81x64.xml | 5 +++++ assets/winvistax64-enterprise.xml | 5 +++++ assets/winvistax64-ultimate.xml | 6 ++++++ assets/winvistax64.xml | 6 ++++++ assets/winvistax86-enterprise.xml | 6 ++++++ assets/winvistax86-ultimate.xml | 5 +++++ assets/winvistax86.xml | 6 ++++++ 39 files changed, 207 insertions(+) diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml index 05a0437..7ea00ef 100644 --- a/assets/win10x64-enterprise-eval.xml +++ b/assets/win10x64-enterprise-eval.xml @@ -420,6 +420,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-enterprise.xml b/assets/win10x64-enterprise.xml index 742a6d9..733d1ec 100644 --- a/assets/win10x64-enterprise.xml +++ b/assets/win10x64-enterprise.xml @@ -423,6 +423,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-iot.xml b/assets/win10x64-iot.xml index 05ffaf5..01534bb 100644 --- a/assets/win10x64-iot.xml +++ b/assets/win10x64-iot.xml @@ -429,6 +429,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index 8700e26..e0e6c98 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -426,6 +426,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index d863512..08e8c79 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -423,6 +423,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index ea321ad..ae3384a 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -458,6 +458,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>25</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>26</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index e76caad..a9a192b 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -461,6 +461,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>25</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>26</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml index ae4282d..5a1b8ae 100644 --- a/assets/win11x64-iot.xml +++ b/assets/win11x64-iot.xml @@ -461,6 +461,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>25</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>26</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml index bc27ec0..8e4a969 100644 --- a/assets/win11x64-ltsc.xml +++ b/assets/win11x64-ltsc.xml @@ -461,6 +461,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>25</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>26</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index 53e73bb..76e7a79 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -461,6 +461,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>25</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>26</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2008r2-eval.xml b/assets/win2008r2-eval.xml index 84467bd..f946b41 100644 --- a/assets/win2008r2-eval.xml +++ b/assets/win2008r2-eval.xml @@ -290,6 +290,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2008r2.xml b/assets/win2008r2.xml index 9ab119f..df194be 100644 --- a/assets/win2008r2.xml +++ b/assets/win2008r2.xml @@ -293,6 +293,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2012r2-eval.xml b/assets/win2012r2-eval.xml index 84bf8be..f2f85ab 100644 --- a/assets/win2012r2-eval.xml +++ b/assets/win2012r2-eval.xml @@ -308,6 +308,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2012r2.xml b/assets/win2012r2.xml index 5eef789..a6560aa 100644 --- a/assets/win2012r2.xml +++ b/assets/win2012r2.xml @@ -311,6 +311,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index 45c1d82..ddaf919 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -328,6 +328,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -335,3 +340,4 @@ </component> </settings> </unattend> + diff --git a/assets/win2016.xml b/assets/win2016.xml index 019cd1c..398763c 100644 --- a/assets/win2016.xml +++ b/assets/win2016.xml @@ -331,6 +331,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -338,3 +343,4 @@ </component> </settings> </unattend> + diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index e6db2d9..c518e92 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -332,6 +332,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -339,3 +344,4 @@ </component> </settings> </unattend> + diff --git a/assets/win2019-hv.xml b/assets/win2019-hv.xml index bb87975..68c10cf 100644 --- a/assets/win2019-hv.xml +++ b/assets/win2019-hv.xml @@ -337,6 +337,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -344,3 +349,4 @@ </component> </settings> </unattend> + diff --git a/assets/win2019.xml b/assets/win2019.xml index 5051f9f..0e7faea 100644 --- a/assets/win2019.xml +++ b/assets/win2019.xml @@ -335,6 +335,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index a4ed208..e29daef 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -332,6 +332,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -339,3 +344,4 @@ </component> </settings> </unattend> + diff --git a/assets/win2022.xml b/assets/win2022.xml index 71c07c9..cb54e5f 100644 --- a/assets/win2022.xml +++ b/assets/win2022.xml @@ -335,6 +335,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -342,3 +347,4 @@ </component> </settings> </unattend> + diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml index ff7f7fa..083812e 100644 --- a/assets/win2025-eval.xml +++ b/assets/win2025-eval.xml @@ -347,6 +347,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -354,3 +359,4 @@ </component> </settings> </unattend> + diff --git a/assets/win2025.xml b/assets/win2025.xml index c67965f..bbee67f 100644 --- a/assets/win2025.xml +++ b/assets/win2025.xml @@ -350,6 +350,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64-enterprise-eval.xml b/assets/win7x64-enterprise-eval.xml index 85b69e4..69ef032 100644 --- a/assets/win7x64-enterprise-eval.xml +++ b/assets/win7x64-enterprise-eval.xml @@ -274,6 +274,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>18</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64-enterprise.xml b/assets/win7x64-enterprise.xml index 84c873e..ef5873d 100644 --- a/assets/win7x64-enterprise.xml +++ b/assets/win7x64-enterprise.xml @@ -278,6 +278,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>18</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64-ultimate.xml b/assets/win7x64-ultimate.xml index f17fb0e..679811f 100644 --- a/assets/win7x64-ultimate.xml +++ b/assets/win7x64-ultimate.xml @@ -278,6 +278,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>18</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64.xml b/assets/win7x64.xml index be1f3a8..db6a87f 100644 --- a/assets/win7x64.xml +++ b/assets/win7x64.xml @@ -278,6 +278,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>18</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x86-enterprise.xml b/assets/win7x86-enterprise.xml index e96e5a7..e7660ec 100644 --- a/assets/win7x86-enterprise.xml +++ b/assets/win7x86-enterprise.xml @@ -278,6 +278,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>18</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x86-ultimate.xml b/assets/win7x86-ultimate.xml index ce81d12..f9486b5 100644 --- a/assets/win7x86-ultimate.xml +++ b/assets/win7x86-ultimate.xml @@ -278,6 +278,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>18</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x86.xml b/assets/win7x86.xml index 314c2ee..890d18d 100644 --- a/assets/win7x86.xml +++ b/assets/win7x86.xml @@ -278,6 +278,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>18</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>19</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win81x64-enterprise-eval.xml b/assets/win81x64-enterprise-eval.xml index f3a61e9..498e332 100644 --- a/assets/win81x64-enterprise-eval.xml +++ b/assets/win81x64-enterprise-eval.xml @@ -293,6 +293,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -300,3 +305,4 @@ </component> </settings> </unattend> + diff --git a/assets/win81x64-enterprise.xml b/assets/win81x64-enterprise.xml index bf927cc..cebab90 100644 --- a/assets/win81x64-enterprise.xml +++ b/assets/win81x64-enterprise.xml @@ -296,6 +296,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index 290e923..eb764dd 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -303,6 +303,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax64-enterprise.xml b/assets/winvistax64-enterprise.xml index 1e3709c..67e02fc 100644 --- a/assets/winvistax64-enterprise.xml +++ b/assets/winvistax64-enterprise.xml @@ -252,6 +252,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax64-ultimate.xml b/assets/winvistax64-ultimate.xml index cb1d1c1..cdd73eb 100644 --- a/assets/winvistax64-ultimate.xml +++ b/assets/winvistax64-ultimate.xml @@ -252,6 +252,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -259,3 +264,4 @@ </component> </settings> </unattend> + diff --git a/assets/winvistax64.xml b/assets/winvistax64.xml index 729e568..f2dc848 100644 --- a/assets/winvistax64.xml +++ b/assets/winvistax64.xml @@ -252,6 +252,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -259,3 +264,4 @@ </component> </settings> </unattend> + diff --git a/assets/winvistax86-enterprise.xml b/assets/winvistax86-enterprise.xml index 66efdf3..2e8b3b3 100644 --- a/assets/winvistax86-enterprise.xml +++ b/assets/winvistax86-enterprise.xml @@ -252,6 +252,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -259,3 +264,4 @@ </component> </settings> </unattend> + diff --git a/assets/winvistax86-ultimate.xml b/assets/winvistax86-ultimate.xml index 5231d50..0cb6857 100644 --- a/assets/winvistax86-ultimate.xml +++ b/assets/winvistax86-ultimate.xml @@ -252,6 +252,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax86.xml b/assets/winvistax86.xml index ef0ed47..c3a2302 100644 --- a/assets/winvistax86.xml +++ b/assets/winvistax86.xml @@ -252,6 +252,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>23</Order> + <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> + <Description>Create desktop shortcut to shared folder</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -259,3 +264,4 @@ </component> </settings> </unattend> + From f29208af3f0a7d5fddc45f79b752bbf11f814484 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 3 Oct 2025 02:50:59 +0200 Subject: [PATCH 240/290] feat: Improved Samba logging (#1448) --- src/define.sh | 11 +++++++++-- src/samba.sh | 51 +++++++++++++++++++++++++++++---------------------- 2 files changed, 38 insertions(+), 24 deletions(-) diff --git a/src/define.sh b/src/define.sh index f14e330..6edc4bd 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1777,11 +1777,18 @@ prepareInstall() { echo " Set oFile = Nothing" echo "End With" echo "" - } | unix2dos > "$dir/\$OEM\$/admin.vbs" + echo "Set oLink = WshShell.CreateShortcut(WshShell.ExpandEnvironmentStrings(\"%userprofile%\\Desktop\\Shared.lnk\"))" + echo "With oLink" + echo " .TargetPath = \"\\\\host.lan\\Data\"" + echo " .Save" + echo "End With" + echo "Set oLink = Nothing" + echo "" + } | unix2dos > "$dir/\$OEM\$/install.vbs" { echo "[COMMANDS]" echo "\"REGEDIT /s install.reg\"" - echo "\"Wscript admin.vbs\"" + echo "\"Wscript install.vbs\"" echo "" } | unix2dos > "$dir/\$OEM\$/cmdlines.txt" diff --git a/src/samba.sh b/src/samba.sh index b35307b..af68071 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -5,6 +5,8 @@ set -Eeuo pipefail : "${SAMBA_DEBUG:="N"}" # Disable debug : "${SAMBA_LEVEL:="1"}" # Debug log level +rm -rf /var/run/wsdd.pid + [[ "$SAMBA" == [Nn]* ]] && return 0 [[ "$NETWORK" == [Nn]* ]] && return 0 @@ -40,18 +42,18 @@ addShare() { echo " For support visit $SUPPORT" echo "--------------------------------------------------------" echo "" - echo "Using this folder you can share files with the host machine." + echo "Using this folder you can exchange files with the host machine." echo "" - echo "To change its location, include the following bind mount in your compose file:" + echo "To select the folder you want to share, include the following bind mount in your compose file:" echo "" echo " volumes:" - echo " - \"/home/example:/${name,,}\"" + echo " - \"./example:/${name,,}\"" echo "" echo "Or in your run command:" echo "" - echo " -v \"/home/example:/${name,,}\"" + echo " -v \"\${PWD:-.}/example:/${name,,}\"" echo "" - echo "Replace the example path /home/example with the desired shared folder." + echo "Replace the example path ./example with your desired shared folder." echo "" } | unix2dos > "$dir/readme.txt" @@ -116,20 +118,20 @@ for dir in "${dirs[@]}"; do addShare "$dir" "$dir_name" "Shared $dir_name" || error "Failed to create shared folder for $dir!" done -# Try to fix Samba permissions +# Try to repair Samba permissions [ -d /run/samba/msg.lock ] && chmod -R 0755 /run/samba/msg.lock 2>/dev/null || : [ -d /var/log/samba/cores ] && chmod -R 0700 /var/log/samba/cores 2>/dev/null || : [ -d /var/cache/samba/msg.lock ] && chmod -R 0755 /var/cache/samba/msg.lock 2>/dev/null || : -if [[ "$SAMBA_DEBUG" != [Yy1]* ]]; then - if ! smbd; then - SAMBA_DEBUG="Y" - error "Samba daemon failed to start!" - fi +rm -f /var/log/samba/log.smbd + +if ! smbd -l /var/log/samba; then + SAMBA_DEBUG="Y" + error "Failed to start Samba daemon!" fi if [[ "$SAMBA_DEBUG" == [Yy1]* ]]; then - smbd -i -d "$SAMBA_LEVEL" --debug-stdout & + tail -fn +0 /var/log/samba/log.smbd & fi if [[ "${BOOT_MODE:-}" == "windows_legacy" ]]; then @@ -137,15 +139,15 @@ if [[ "${BOOT_MODE:-}" == "windows_legacy" ]]; then # Enable NetBIOS on Windows 7 and lower [[ "$DEBUG" == [Yy1]* ]] && echo "Starting NetBIOS daemon..." - if [[ "$SAMBA_DEBUG" != [Yy1]* ]]; then - if ! nmbd; then - SAMBA_DEBUG="Y" - error "NetBIOS daemon failed to start!" - fi + rm -f /var/log/samba/log.nmbd + + if ! nmbd -l /var/log/samba; then + SAMBA_DEBUG="Y" + error "Failed to start NetBIOS daemon!" fi if [[ "$SAMBA_DEBUG" == [Yy1]* ]]; then - nmbd -i -d "$SAMBA_LEVEL" --debug-stdout & + tail -fn +0 /var/log/samba/log.nmbd & fi else @@ -153,10 +155,15 @@ else # Enable Web Service Discovery on Vista and up [[ "$DEBUG" == [Yy1]* ]] && echo "Starting Web Service Discovery daemon..." - if [[ "$SAMBA_DEBUG" != [Yy1]* ]]; then - wsddn -i "$interface" -H "$hostname" --unixd --pid-file=/var/run/wsdd.pid - else - wsddn -i "$interface" -H "$hostname" --pid-file=/var/run/wsdd.pid & + rm -f /var/log/wsddn.log + + if ! wsddn -i "$interface" -H "$hostname" --unixd --log-file=/var/log/wsddn.log --pid-file=/var/run/wsdd.pid; then + SAMBA_DEBUG="Y" + error "Failed to start WSDDN daemon!" + fi + + if [[ "$SAMBA_DEBUG" == [Yy1]* ]]; then + tail -fn +0 /var/log/wsddn.log & fi fi From 4cd2a9c70b351f512db5d93ae415411cbc8a3ae0 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 3 Oct 2025 03:13:12 +0200 Subject: [PATCH 241/290] docs: Document new file sharing method (#1449) --- readme.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/readme.md b/readme.md index ede4afa..50a66b4 100644 --- a/readme.md +++ b/readme.md @@ -143,19 +143,16 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I share files with the host? - Open 'File Explorer' and click on the 'Network' section, you will see a computer called `host.lan`. + After installation there will be a folder called `Shared` on your desktop, which can be used to exchange files with the host machine. - Double-click it and it will show a folder called `Data`, which can be bound to any folder on your host via the compose file: + To select a folder on the host for this purpose, include the following bind mount in your compose file: ```yaml volumes: - - ./example:/data + - ./example:/shared ``` - The example folder `./example` will be available as ` \\host.lan\Data`. - -> [!TIP] -> You can map this path to a drive letter in Windows, for easier access. + Replace the example path `./example` with your desired shared folder, which then will become visible as `Shared`. ### How do I change the amount of CPU or RAM? From 434bc11907b4b818c21e2ccaea46cdddbaed167b Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 3 Oct 2025 11:41:40 +0200 Subject: [PATCH 242/290] fix: Shared folder location (#1450) --- src/samba.sh | 51 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index af68071..34ee439 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -5,6 +5,8 @@ set -Eeuo pipefail : "${SAMBA_DEBUG:="N"}" # Disable debug : "${SAMBA_LEVEL:="1"}" # Debug log level +tmp="/tmp/smb" +rm -rf "$tmp" rm -rf /var/run/wsdd.pid [[ "$SAMBA" == [Nn]* ]] && return 0 @@ -27,15 +29,18 @@ html "Initializing shared folder..." addShare() { local dir="$1" - local name="$2" - local comment="$3" + local ref="$2" + local name="$3" + local comment="$4" mkdir -p "$dir" || return 1 ls -A "$dir" >/dev/null 2>&1 || return 1 if [ -z "$(ls -A "$dir")" ]; then - chmod 777 "$dir" || return 1 + fi + + if [[ "$dir" == "$tmp" ]]; then { echo "--------------------------------------------------------" echo " $APP for Docker v$(</run/version)..." @@ -44,16 +49,16 @@ addShare() { echo "" echo "Using this folder you can exchange files with the host machine." echo "" - echo "To select the folder you want to share, include the following bind mount in your compose file:" + echo "To select a folder on the host for this purpose, include the following bind mount in your compose file:" echo "" echo " volumes:" - echo " - \"./example:/${name,,}\"" + echo " - \"./example:${ref}\"" echo "" echo "Or in your run command:" echo "" - echo " -v \"\${PWD:-.}/example:/${name,,}\"" + echo " -v \"\${PWD:-.}/example:${ref}\"" echo "" - echo "Replace the example path ./example with your desired shared folder." + echo "Replace the example path ./example with your desired shared folder, which then will become visible here." echo "" } | unix2dos > "$dir/readme.txt" @@ -94,28 +99,40 @@ addShare() { echo " disable spoolss = yes" } > "/etc/samba/smb.conf" -share="/data" -[ ! -d "$share" ] && [ -d "$STORAGE/data" ] && share="$STORAGE/data" -[ ! -d "$share" ] && [ -d "/shared" ] && share="/shared" +share="/shared" [ ! -d "$share" ] && [ -d "$STORAGE/shared" ] && share="$STORAGE/shared" +[ ! -d "$share" ] && [ -d "/data" ] && share="/data" +[ ! -d "$share" ] && [ -d "$STORAGE/data" ] && share="$STORAGE/data" +[ ! -d "$share" ] && share="$tmp" -if ! addShare "$share" "Data" "Shared"; then - error "Failed to add shared folder '$share'. Please check its permissions." && return 0 +m1="Failed to add shared folder" +m2="Please check its permissions." + +if ! addShare "$share" "/shared" "Data" "Shared"; then + error "$m1 '$share'. $m2" && return 0 fi -if [ -d "/data2" ]; then - addShare "/data2" "Data2" "Shared" || error "Failed to add shared folder '/data2'. Please check its permissions." +if [ -d "/shared2" ]; then + addShare "/shared2" "/shared2" "Data2" "Shared" || error "$m1 '/shared2'. $m2" +else + if [ -d "/data2" ]; then + addShare "/data2" "/shared2" "Data2" "Shared" || error "$m1 '/data2'. $m2." + fi fi -if [ -d "/data3" ]; then - addShare "/data3" "Data3" "Shared" || error "Failed to add shared folder '/data3'. Please check its permissions." +if [ -d "/shared3" ]; then + addShare "/shared3" "/shared3" "Data3" "Shared" || error "$m1 '/shared3'. $m2" +else + if [ -d "/data3" ]; then + addShare "/data3" "/shared3" "Data3" "Shared" || error "$m1 '/data3'. $m2" + fi fi IFS=',' read -r -a dirs <<< "${SHARES:-}" for dir in "${dirs[@]}"; do [ ! -d "$dir" ] && continue dir_name=$(basename "$dir") - addShare "$dir" "$dir_name" "Shared $dir_name" || error "Failed to create shared folder for $dir!" + addShare "$dir" "/shared" "$dir_name" "Shared $dir_name" || error "Failed to create shared folder for $dir!" done # Try to repair Samba permissions From 29a9e2d68c0d2bab8e3e1d73bdcf6d0c94515191 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 4 Oct 2025 09:47:08 +0200 Subject: [PATCH 243/290] feat: Monitor port is now configurable (#1451) --- Dockerfile | 2 +- src/power.sh | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index c23ef18..49e8c8b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.20 / / +COPY --from=qemux/qemu:7.21 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" diff --git a/src/power.sh b/src/power.sh index 9ca5583..8ea6ff0 100644 --- a/src/power.sh +++ b/src/power.sh @@ -1,11 +1,11 @@ #!/usr/bin/env bash set -Eeuo pipefail +: "${QEMU_TIMEOUT:="110"}" # QEMU Termination timeout + # Configure QEMU for graceful shutdown QEMU_TERM="" -QEMU_PORT=7100 -QEMU_TIMEOUT=110 QEMU_DIR="/run/shm" QEMU_PID="$QEMU_DIR/qemu.pid" QEMU_PTY="$QEMU_DIR/qemu.pty" @@ -139,7 +139,7 @@ terminal() { fi if [ ! -c "$dev" ]; then - dev=$(echo 'info chardev' | nc -q 1 -w 1 localhost "$QEMU_PORT" | tr -d '\000') + dev=$(echo 'info chardev' | nc -q 1 -w 1 localhost "$MON_PORT" | tr -d '\000') dev="${dev#*serial0}" dev="${dev#*pty:}" dev="${dev%%$'\n'*}" @@ -188,7 +188,7 @@ _graceful_shutdown() { fi # Send ACPI shutdown signal - echo 'system_powerdown' | nc -q 1 -w 1 localhost "${QEMU_PORT}" > /dev/null + echo 'system_powerdown' | nc -q 1 -w 1 localhost "$MON_PORT" > /dev/null local cnt=0 while [ "$cnt" -lt "$QEMU_TIMEOUT" ]; do @@ -203,7 +203,7 @@ _graceful_shutdown() { info "Waiting for Windows to shutdown... ($cnt/$QEMU_TIMEOUT)" # Send ACPI shutdown signal - echo 'system_powerdown' | nc -q 1 -w 1 localhost "${QEMU_PORT}" > /dev/null + echo 'system_powerdown' | nc -q 1 -w 1 localhost "$MON_PORT" > /dev/null done @@ -215,7 +215,7 @@ _graceful_shutdown() { } SERIAL="pty" -MONITOR="telnet:localhost:$QEMU_PORT,server,nowait,nodelay" +MONITOR="telnet:localhost:$MON_PORT,server,nowait,nodelay" MONITOR+=" -daemonize -D $QEMU_LOG -pidfile $QEMU_PID" _trap _graceful_shutdown SIGTERM SIGHUP SIGINT SIGABRT SIGQUIT From b3f1cb913ac4f43d908d9475bd5d1df49258535c Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 5 Oct 2025 07:47:19 +0200 Subject: [PATCH 244/290] feat: Make Samba interface configurable (#1452) --- src/samba.sh | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index 34ee439..7873b3e 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -2,8 +2,8 @@ set -Eeuo pipefail : "${SAMBA:="Y"}" # Enable Samba +: "${SAMBA_LEVEL:="1"}" # Logging level : "${SAMBA_DEBUG:="N"}" # Disable debug -: "${SAMBA_LEVEL:="1"}" # Debug log level tmp="/tmp/smb" rm -rf "$tmp" @@ -13,15 +13,22 @@ rm -rf /var/run/wsdd.pid [[ "$NETWORK" == [Nn]* ]] && return 0 hostname="host.lan" -interface="dockerbridge" +interfaces="dockerbridge" + +if [ -n "${SAMBA_INTERFACE:-}" ]; then + interfaces+=",$SAMBA_INTERFACE" +fi if [[ "$DHCP" == [Yy1]* ]]; then hostname="$IP" - interface="$VM_NET_DEV" + interfaces="$VM_NET_DEV" fi if [[ "${NETWORK,,}" == "user"* ]]; then - interface="127.0.0.1" + interfaces="lo" + if ! ip link set "$interfaces" multicast on >/dev/null; then + warn "Failed to enable multicast on loopback interface!" + fi fi html "Initializing shared folder..." @@ -82,7 +89,7 @@ addShare() { echo " server string = Dockur" echo " netbios name = $hostname" echo " workgroup = WORKGROUP" - echo " interfaces = $interface" + echo " interfaces = $interfaces" echo " bind interfaces only = yes" echo " security = user" echo " guest account = nobody" @@ -170,13 +177,13 @@ if [[ "${BOOT_MODE:-}" == "windows_legacy" ]]; then else # Enable Web Service Discovery on Vista and up - [[ "$DEBUG" == [Yy1]* ]] && echo "Starting Web Service Discovery daemon..." + [[ "$DEBUG" == [Yy1]* ]] && echo "Starting wsddn daemon..." rm -f /var/log/wsddn.log - if ! wsddn -i "$interface" -H "$hostname" --unixd --log-file=/var/log/wsddn.log --pid-file=/var/run/wsdd.pid; then + if ! wsddn -i "${interfaces%%,*}" -H "$hostname" --unixd --log-file=/var/log/wsddn.log --pid-file=/var/run/wsdd.pid; then SAMBA_DEBUG="Y" - error "Failed to start WSDDN daemon!" + error "Failed to start wsddn daemon!" fi if [[ "$SAMBA_DEBUG" == [Yy1]* ]]; then From 17db1ac34c185cff11ab155e713db116d7785602 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 5 Oct 2025 18:58:17 +0200 Subject: [PATCH 245/290] feat: Support more network types (#1453) --- src/samba.sh | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index 7873b3e..d68d0b2 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -12,23 +12,23 @@ rm -rf /var/run/wsdd.pid [[ "$SAMBA" == [Nn]* ]] && return 0 [[ "$NETWORK" == [Nn]* ]] && return 0 -hostname="host.lan" -interfaces="dockerbridge" - -if [ -n "${SAMBA_INTERFACE:-}" ]; then - interfaces+=",$SAMBA_INTERFACE" -fi - if [[ "$DHCP" == [Yy1]* ]]; then hostname="$IP" interfaces="$VM_NET_DEV" -fi - -if [[ "${NETWORK,,}" == "user"* ]]; then - interfaces="lo" - if ! ip link set "$interfaces" multicast on >/dev/null; then - warn "Failed to enable multicast on loopback interface!" - fi +else + hostname="host.lan" + case "${NETWORK,,}" in + "user"* | "passt" | "slirp" ) + interfaces="lo" + if ! ip link set "$interfaces" multicast on >/dev/null; then + warn "Failed to enable multicast on loopback interface!" + fi ;; + *) + interfaces="dockerbridge" + if [ -n "${SAMBA_INTERFACE:-}" ]; then + interfaces+=",$SAMBA_INTERFACE" + fi ;; + esac fi html "Initializing shared folder..." From 3ab5c25152c4a49b19341a4416f033334d0be7d4 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 6 Oct 2025 13:22:28 +0200 Subject: [PATCH 246/290] feat: Use PID for Samba process (#1454) --- src/power.sh | 10 +++++++++- src/samba.sh | 24 +++++++++++++----------- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/power.sh b/src/power.sh index 8ea6ff0..1c2c223 100644 --- a/src/power.sh +++ b/src/power.sh @@ -103,11 +103,19 @@ finish() { pid="/var/run/tpm.pid" [ -s "$pid" ] && pKill "$(<"$pid")" + rm -f "$pid" pid="/var/run/wsdd.pid" [ -s "$pid" ] && pKill "$(<"$pid")" + rm -f "$pid" - fKill "smbd" + pid="/var/run/samba/nmbd.pid" + [ -s "$pid" ] && pKill "$(<"$pid")" + rm -f "$pid" + + pid="/var/run/samba/smbd.pid" + [ -s "$pid" ] && pKill "$(<"$pid")" + rm -f "$pid" closeNetwork diff --git a/src/samba.sh b/src/samba.sh index d68d0b2..c0ae8ac 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -7,7 +7,10 @@ set -Eeuo pipefail tmp="/tmp/smb" rm -rf "$tmp" -rm -rf /var/run/wsdd.pid + +rm -f /var/run/wsdd.pid +rm -f /var/run/samba/nmbd.pid +rm -f /var/run/samba/smbd.pid [[ "$SAMBA" == [Nn]* ]] && return 0 [[ "$NETWORK" == [Nn]* ]] && return 0 @@ -19,16 +22,15 @@ else hostname="host.lan" case "${NETWORK,,}" in "user"* | "passt" | "slirp" ) - interfaces="lo" - if ! ip link set "$interfaces" multicast on >/dev/null; then - warn "Failed to enable multicast on loopback interface!" - fi ;; - *) - interfaces="dockerbridge" - if [ -n "${SAMBA_INTERFACE:-}" ]; then - interfaces+=",$SAMBA_INTERFACE" - fi ;; + interfaces="lo" ;; + # if ! ip link set "$interfaces" multicast on >/dev/null; then + # warn "Failed to enable multicast on loopback interface!" + # fi ;; + *) interfaces="dockerbridge" ;; esac + if [ -n "${SAMBA_INTERFACE:-}" ]; then + interfaces+=",$SAMBA_INTERFACE" + fi fi html "Initializing shared folder..." @@ -37,7 +39,7 @@ html "Initializing shared folder..." addShare() { local dir="$1" local ref="$2" - local name="$3" + local name="$3" local comment="$4" mkdir -p "$dir" || return 1 From 588242b1759b8ac57fe5d2459e69ed6c6cdb84fa Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 6 Oct 2025 13:44:05 +0200 Subject: [PATCH 247/290] fix: Use bridge name variable (#1455) --- src/samba.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/samba.sh b/src/samba.sh index c0ae8ac..687fd16 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -26,7 +26,7 @@ else # if ! ip link set "$interfaces" multicast on >/dev/null; then # warn "Failed to enable multicast on loopback interface!" # fi ;; - *) interfaces="dockerbridge" ;; + *) interfaces="$VM_NET_BRIDGE" ;; esac if [ -n "${SAMBA_INTERFACE:-}" ]; then interfaces+=",$SAMBA_INTERFACE" From c04851bbd483dd524257d8d1a5d881986143e2bf Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 6 Oct 2025 13:45:14 +0200 Subject: [PATCH 248/290] feat: Remove entry from hosts file (#1456) --- assets/win10x64-enterprise-eval.xml | 7 +------ assets/win10x64-enterprise.xml | 7 +------ assets/win10x64-iot.xml | 7 +------ assets/win10x64-ltsc.xml | 7 +------ assets/win10x64.xml | 7 +------ assets/win11x64-enterprise-eval.xml | 7 +------ assets/win11x64-enterprise.xml | 7 +------ assets/win11x64-iot.xml | 7 +------ assets/win11x64-ltsc.xml | 7 +------ assets/win11x64.xml | 7 +------ assets/win2008r2-eval.xml | 7 +------ assets/win2008r2.xml | 7 +------ assets/win2012r2-eval.xml | 7 +------ assets/win2012r2.xml | 7 +------ assets/win2016-eval.xml | 8 +------- assets/win2016.xml | 8 +------- assets/win2019-eval.xml | 8 +------- assets/win2019-hv.xml | 8 +------- assets/win2019.xml | 7 +------ assets/win2022-eval.xml | 8 +------- assets/win2022.xml | 8 +------- assets/win2025-eval.xml | 8 +------- assets/win2025.xml | 7 +------ assets/win7x64-enterprise-eval.xml | 7 +------ assets/win7x64-enterprise.xml | 7 +------ assets/win7x64-ultimate.xml | 7 +------ assets/win7x64.xml | 7 +------ assets/win7x86-enterprise.xml | 7 +------ assets/win7x86-ultimate.xml | 7 +------ assets/win7x86.xml | 7 +------ assets/win81x64-enterprise-eval.xml | 8 +------- assets/win81x64-enterprise.xml | 7 +------ assets/win81x64.xml | 7 +------ assets/winvistax64-enterprise.xml | 7 +------ assets/winvistax64-ultimate.xml | 8 +------- assets/winvistax64.xml | 8 +------- assets/winvistax86-enterprise.xml | 8 +------- assets/winvistax86-ultimate.xml | 7 +------ assets/winvistax86.xml | 8 +------- src/define.sh | 11 ----------- src/install.sh | 4 ---- 41 files changed, 39 insertions(+), 261 deletions(-) diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml index 7ea00ef..41e8a70 100644 --- a/assets/win10x64-enterprise-eval.xml +++ b/assets/win10x64-enterprise-eval.xml @@ -415,16 +415,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>22</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-enterprise.xml b/assets/win10x64-enterprise.xml index 733d1ec..c998592 100644 --- a/assets/win10x64-enterprise.xml +++ b/assets/win10x64-enterprise.xml @@ -418,16 +418,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>22</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-iot.xml b/assets/win10x64-iot.xml index 01534bb..bed9cbe 100644 --- a/assets/win10x64-iot.xml +++ b/assets/win10x64-iot.xml @@ -424,16 +424,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>22</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index e0e6c98..6957f2b 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -421,16 +421,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>22</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index 08e8c79..ef19c57 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -418,16 +418,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>21</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>22</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>22</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index ae3384a..32dac2a 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -453,16 +453,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>24</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>25</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>26</Order> + <Order>25</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index a9a192b..4c6746e 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -456,16 +456,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>24</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>25</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>26</Order> + <Order>25</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml index 5a1b8ae..91ab3ce 100644 --- a/assets/win11x64-iot.xml +++ b/assets/win11x64-iot.xml @@ -456,16 +456,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>24</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>25</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>26</Order> + <Order>25</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml index 8e4a969..7707cfb 100644 --- a/assets/win11x64-ltsc.xml +++ b/assets/win11x64-ltsc.xml @@ -456,16 +456,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>24</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>25</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>26</Order> + <Order>25</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index 76e7a79..95d1d16 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -456,16 +456,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>24</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>25</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>26</Order> + <Order>25</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2008r2-eval.xml b/assets/win2008r2-eval.xml index f946b41..e7bd802 100644 --- a/assets/win2008r2-eval.xml +++ b/assets/win2008r2-eval.xml @@ -285,16 +285,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>19</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>20</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>20</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2008r2.xml b/assets/win2008r2.xml index df194be..a345bf8 100644 --- a/assets/win2008r2.xml +++ b/assets/win2008r2.xml @@ -288,16 +288,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>19</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>20</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>20</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2012r2-eval.xml b/assets/win2012r2-eval.xml index f2f85ab..a9de3c6 100644 --- a/assets/win2012r2-eval.xml +++ b/assets/win2012r2-eval.xml @@ -303,16 +303,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>17</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>17</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2012r2.xml b/assets/win2012r2.xml index a6560aa..1d1a5b6 100644 --- a/assets/win2012r2.xml +++ b/assets/win2012r2.xml @@ -306,16 +306,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>17</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>17</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index ddaf919..568e9f5 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -323,16 +323,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>21</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -340,4 +335,3 @@ </component> </settings> </unattend> - diff --git a/assets/win2016.xml b/assets/win2016.xml index 398763c..6f75c66 100644 --- a/assets/win2016.xml +++ b/assets/win2016.xml @@ -326,16 +326,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>21</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -343,4 +338,3 @@ </component> </settings> </unattend> - diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index c518e92..cca0e35 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -327,16 +327,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>21</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -344,4 +339,3 @@ </component> </settings> </unattend> - diff --git a/assets/win2019-hv.xml b/assets/win2019-hv.xml index 68c10cf..4c416cf 100644 --- a/assets/win2019-hv.xml +++ b/assets/win2019-hv.xml @@ -332,16 +332,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>21</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -349,4 +344,3 @@ </component> </settings> </unattend> - diff --git a/assets/win2019.xml b/assets/win2019.xml index 0e7faea..5133bed 100644 --- a/assets/win2019.xml +++ b/assets/win2019.xml @@ -330,16 +330,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>21</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index e29daef..b525065 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -327,16 +327,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>21</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -344,4 +339,3 @@ </component> </settings> </unattend> - diff --git a/assets/win2022.xml b/assets/win2022.xml index cb54e5f..9159226 100644 --- a/assets/win2022.xml +++ b/assets/win2022.xml @@ -330,16 +330,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>21</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -347,4 +342,3 @@ </component> </settings> </unattend> - diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml index 083812e..9ec3a7d 100644 --- a/assets/win2025-eval.xml +++ b/assets/win2025-eval.xml @@ -342,16 +342,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -359,4 +354,3 @@ </component> </settings> </unattend> - diff --git a/assets/win2025.xml b/assets/win2025.xml index bbee67f..8098192 100644 --- a/assets/win2025.xml +++ b/assets/win2025.xml @@ -345,16 +345,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64-enterprise-eval.xml b/assets/win7x64-enterprise-eval.xml index 69ef032..c3cc15b 100644 --- a/assets/win7x64-enterprise-eval.xml +++ b/assets/win7x64-enterprise-eval.xml @@ -269,16 +269,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>18</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64-enterprise.xml b/assets/win7x64-enterprise.xml index ef5873d..b362a9f 100644 --- a/assets/win7x64-enterprise.xml +++ b/assets/win7x64-enterprise.xml @@ -273,16 +273,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>18</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64-ultimate.xml b/assets/win7x64-ultimate.xml index 679811f..2ee085a 100644 --- a/assets/win7x64-ultimate.xml +++ b/assets/win7x64-ultimate.xml @@ -273,16 +273,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>18</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x64.xml b/assets/win7x64.xml index db6a87f..3769dfd 100644 --- a/assets/win7x64.xml +++ b/assets/win7x64.xml @@ -273,16 +273,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>18</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x86-enterprise.xml b/assets/win7x86-enterprise.xml index e7660ec..7ac8ef0 100644 --- a/assets/win7x86-enterprise.xml +++ b/assets/win7x86-enterprise.xml @@ -273,16 +273,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>18</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x86-ultimate.xml b/assets/win7x86-ultimate.xml index f9486b5..419a508 100644 --- a/assets/win7x86-ultimate.xml +++ b/assets/win7x86-ultimate.xml @@ -273,16 +273,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>18</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win7x86.xml b/assets/win7x86.xml index 890d18d..bae5a8f 100644 --- a/assets/win7x86.xml +++ b/assets/win7x86.xml @@ -273,16 +273,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>17</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>18</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>18</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win81x64-enterprise-eval.xml b/assets/win81x64-enterprise-eval.xml index 498e332..a406f7f 100644 --- a/assets/win81x64-enterprise-eval.xml +++ b/assets/win81x64-enterprise-eval.xml @@ -288,16 +288,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>17</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>17</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -305,4 +300,3 @@ </component> </settings> </unattend> - diff --git a/assets/win81x64-enterprise.xml b/assets/win81x64-enterprise.xml index cebab90..db6eec9 100644 --- a/assets/win81x64-enterprise.xml +++ b/assets/win81x64-enterprise.xml @@ -291,16 +291,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>17</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>17</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index eb764dd..bf1ff5e 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -298,16 +298,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>17</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>17</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax64-enterprise.xml b/assets/winvistax64-enterprise.xml index 67e02fc..d6ff627 100644 --- a/assets/winvistax64-enterprise.xml +++ b/assets/winvistax64-enterprise.xml @@ -247,16 +247,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax64-ultimate.xml b/assets/winvistax64-ultimate.xml index cdd73eb..78ed091 100644 --- a/assets/winvistax64-ultimate.xml +++ b/assets/winvistax64-ultimate.xml @@ -247,16 +247,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -264,4 +259,3 @@ </component> </settings> </unattend> - diff --git a/assets/winvistax64.xml b/assets/winvistax64.xml index f2dc848..d1de997 100644 --- a/assets/winvistax64.xml +++ b/assets/winvistax64.xml @@ -247,16 +247,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -264,4 +259,3 @@ </component> </settings> </unattend> - diff --git a/assets/winvistax86-enterprise.xml b/assets/winvistax86-enterprise.xml index 2e8b3b3..91c96df 100644 --- a/assets/winvistax86-enterprise.xml +++ b/assets/winvistax86-enterprise.xml @@ -247,16 +247,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -264,4 +259,3 @@ </component> </settings> </unattend> - diff --git a/assets/winvistax86-ultimate.xml b/assets/winvistax86-ultimate.xml index 0cb6857..c3ec41a 100644 --- a/assets/winvistax86-ultimate.xml +++ b/assets/winvistax86-ultimate.xml @@ -247,16 +247,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax86.xml b/assets/winvistax86.xml index c3a2302..07003fb 100644 --- a/assets/winvistax86.xml +++ b/assets/winvistax86.xml @@ -247,16 +247,11 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>22</Order> - <CommandLine>cmd /C echo 20.20.20.1 host.lan >> %WINDIR%\system32\drivers\etc\hosts</CommandLine> - <Description>Add entry in hosts file</Description> - </SynchronousCommand> - <SynchronousCommand wcm:action="add"> - <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> @@ -264,4 +259,3 @@ </component> </settings> </unattend> - diff --git a/src/define.sh b/src/define.sh index 6edc4bd..d094037 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1584,9 +1584,6 @@ prepareInstall() { [ -n "$PASSWORD" ] && password=$(echo "$PASSWORD" | sed 's/"//g') [ -z "$password" ] && password="admin" - local ip="20.20.20.1" - [ -n "${VM_NET_IP:-}" ] && ip="${VM_NET_IP%.*}.1" - find "$target" -maxdepth 1 -type f -iname winnt.sif -exec rm {} \; { echo "[Data]" @@ -1769,14 +1766,6 @@ prepareInstall() { echo "" echo "Call Domain.MoveHere(LocalAdminADsPath, \"$username\")" echo "" - echo "With (CreateObject(\"Scripting.FileSystemObject\"))" - echo " SysRoot = WshShell.ExpandEnvironmentStrings(\"%SystemRoot%\")" - echo " Set oFile = .OpenTextFile(SysRoot & \"\system32\drivers\etc\hosts\", 8, true)" - echo " oFile.Write(\"$ip host.lan\")" - echo " oFile.Close()" - echo " Set oFile = Nothing" - echo "End With" - echo "" echo "Set oLink = WshShell.CreateShortcut(WshShell.ExpandEnvironmentStrings(\"%userprofile%\\Desktop\\Shared.lnk\"))" echo "With oLink" echo " .TargetPath = \"\\\\host.lan\\Data\"" diff --git a/src/install.sh b/src/install.sh index c3fa8ef..396911f 100644 --- a/src/install.sh +++ b/src/install.sh @@ -756,10 +756,6 @@ updateXML() { local language="$2" local culture region user admin pass keyboard - if [ -n "${VM_NET_IP:-}" ]; then - sed -i "s/ 20.20.20.1 / ${VM_NET_IP%.*}.1 /g" "$asset" - fi - [ -z "$HEIGHT" ] && HEIGHT="720" [ -z "$WIDTH" ] && WIDTH="1280" From 004f4df79e78e5c0b1dce7f22731ce64e1dae841 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 7 Oct 2025 01:10:52 +0200 Subject: [PATCH 249/290] feat: Set Samba socket (#1457) --- src/samba.sh | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index 687fd16..bf5bf30 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -16,17 +16,18 @@ rm -f /var/run/samba/smbd.pid [[ "$NETWORK" == [Nn]* ]] && return 0 if [[ "$DHCP" == [Yy1]* ]]; then + socket="$IP" hostname="$IP" interfaces="$VM_NET_DEV" else hostname="host.lan" case "${NETWORK,,}" in - "user"* | "passt" | "slirp" ) - interfaces="lo" ;; - # if ! ip link set "$interfaces" multicast on >/dev/null; then - # warn "Failed to enable multicast on loopback interface!" - # fi ;; - *) interfaces="$VM_NET_BRIDGE" ;; + "passt" | "slirp" ) + interfaces="lo" + socket="127.0.0.1" ;; + *) + socket="$VM_NET_IP" + interfaces="$VM_NET_BRIDGE" ;; esac if [ -n "${SAMBA_INTERFACE:-}" ]; then interfaces+=",$SAMBA_INTERFACE" @@ -100,6 +101,7 @@ addShare() { echo " follow symlinks = yes" echo " wide links = yes" echo " unix extensions = no" + echo " socket address = $socket" echo "" echo " # disable printing services" echo " load printers = no" @@ -160,6 +162,11 @@ if [[ "$SAMBA_DEBUG" == [Yy1]* ]]; then tail -fn +0 /var/log/samba/log.smbd & fi +case "${NETWORK,,}" in + "passt" | "slirp" ) + return 0 ;; +esac + if [[ "${BOOT_MODE:-}" == "windows_legacy" ]]; then # Enable NetBIOS on Windows 7 and lower From 26e4ab5fb273cb8f5a08da3854fe3f8ec3633e09 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 7 Oct 2025 12:39:17 +0200 Subject: [PATCH 250/290] feat: Use the engine variable (#1458) --- src/define.sh | 2 +- src/install.sh | 1 + src/samba.sh | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/define.sh b/src/define.sh index d094037..9198389 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1620,7 +1620,7 @@ prepareInstall() { echo "[UserData]" echo " FullName=\"$username\"" echo " ComputerName=\"*\"" - echo " OrgName=\"Windows for Docker\"" + echo " OrgName=\"$APP for $ENGINE\"" echo " $KEY" echo "" echo "[Identification]" diff --git a/src/install.sh b/src/install.sh index 396911f..50cf7ea 100644 --- a/src/install.sh +++ b/src/install.sh @@ -759,6 +759,7 @@ updateXML() { [ -z "$HEIGHT" ] && HEIGHT="720" [ -z "$WIDTH" ] && WIDTH="1280" + sed -i "s/>Windows for Docker</>$APP for $ENGINE</g" "$asset" sed -i "s/<VerticalResolution>1080<\/VerticalResolution>/<VerticalResolution>$HEIGHT<\/VerticalResolution>/g" "$asset" sed -i "s/<HorizontalResolution>1920<\/HorizontalResolution>/<HorizontalResolution>$WIDTH<\/HorizontalResolution>/g" "$asset" diff --git a/src/samba.sh b/src/samba.sh index bf5bf30..c5bd35e 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -53,7 +53,7 @@ addShare() { if [[ "$dir" == "$tmp" ]]; then { echo "--------------------------------------------------------" - echo " $APP for Docker v$(</run/version)..." + echo " $APP for $ENGINE v$(</run/version)..." echo " For support visit $SUPPORT" echo "--------------------------------------------------------" echo "" From 75e25b2aeaffd094cfea7c1b2f7d1a7a315b1de0 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 7 Oct 2025 15:29:33 +0200 Subject: [PATCH 251/290] feat: Disable Network Discovery popup (#1459) --- assets/win10x64-enterprise-eval.xml | 28 ++++++++++++++++++--------- assets/win10x64-enterprise.xml | 28 ++++++++++++++++++--------- assets/win10x64-iot.xml | 28 ++++++++++++++++++--------- assets/win10x64-ltsc.xml | 28 ++++++++++++++++++--------- assets/win10x64.xml | 28 ++++++++++++++++++--------- assets/win11x64-enterprise-eval.xml | 25 ++++++++++++++---------- assets/win11x64-enterprise.xml | 25 ++++++++++++++---------- assets/win11x64-iot.xml | 25 ++++++++++++++---------- assets/win11x64-ltsc.xml | 25 ++++++++++++++---------- assets/win11x64.xml | 25 ++++++++++++++---------- assets/win2008r2-eval.xml | 17 ++++++++++------ assets/win2008r2.xml | 17 ++++++++++------ assets/win2012r2-eval.xml | 22 +++++++++++++++------ assets/win2012r2.xml | 22 +++++++++++++++------ assets/win2016-eval.xml | 30 +++++++++++++++++++---------- assets/win2016.xml | 30 +++++++++++++++++++---------- assets/win2019-eval.xml | 30 +++++++++++++++++++---------- assets/win2019-hv.xml | 30 +++++++++++++++++++---------- assets/win2019.xml | 30 +++++++++++++++++++---------- assets/win2022-eval.xml | 30 +++++++++++++++++++---------- assets/win2022.xml | 30 +++++++++++++++++++---------- assets/win2025-eval.xml | 23 +++++++++++++--------- assets/win2025.xml | 23 +++++++++++++--------- assets/win81x64-enterprise-eval.xml | 22 +++++++++++++++------ assets/win81x64-enterprise.xml | 22 +++++++++++++++------ assets/win81x64.xml | 22 +++++++++++++++------ assets/winvistax64-enterprise.xml | 15 ++++++++++----- assets/winvistax64-ultimate.xml | 15 ++++++++++----- assets/winvistax64.xml | 15 ++++++++++----- assets/winvistax86-enterprise.xml | 15 ++++++++++----- assets/winvistax86-ultimate.xml | 15 ++++++++++----- assets/winvistax86.xml | 15 ++++++++++----- 32 files changed, 500 insertions(+), 255 deletions(-) diff --git a/assets/win10x64-enterprise-eval.xml b/assets/win10x64-enterprise-eval.xml index 41e8a70..ee75f27 100644 --- a/assets/win10x64-enterprise-eval.xml +++ b/assets/win10x64-enterprise-eval.xml @@ -376,50 +376,60 @@ <SynchronousCommand wcm:action="add"> <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-enterprise.xml b/assets/win10x64-enterprise.xml index c998592..5e5eb8c 100644 --- a/assets/win10x64-enterprise.xml +++ b/assets/win10x64-enterprise.xml @@ -379,50 +379,60 @@ <SynchronousCommand wcm:action="add"> <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-iot.xml b/assets/win10x64-iot.xml index bed9cbe..00a049e 100644 --- a/assets/win10x64-iot.xml +++ b/assets/win10x64-iot.xml @@ -385,50 +385,60 @@ <SynchronousCommand wcm:action="add"> <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64-ltsc.xml b/assets/win10x64-ltsc.xml index 6957f2b..e77dd6a 100644 --- a/assets/win10x64-ltsc.xml +++ b/assets/win10x64-ltsc.xml @@ -382,50 +382,60 @@ <SynchronousCommand wcm:action="add"> <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win10x64.xml b/assets/win10x64.xml index ef19c57..7c21359 100644 --- a/assets/win10x64.xml +++ b/assets/win10x64.xml @@ -379,50 +379,60 @@ <SynchronousCommand wcm:action="add"> <Order>13</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>14</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>22</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise-eval.xml b/assets/win11x64-enterprise-eval.xml index 32dac2a..39c3f02 100644 --- a/assets/win11x64-enterprise-eval.xml +++ b/assets/win11x64-enterprise-eval.xml @@ -408,56 +408,61 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>25</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>25</Order> + <Order>26</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-enterprise.xml b/assets/win11x64-enterprise.xml index 4c6746e..bafed49 100644 --- a/assets/win11x64-enterprise.xml +++ b/assets/win11x64-enterprise.xml @@ -411,56 +411,61 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>25</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>25</Order> + <Order>26</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-iot.xml b/assets/win11x64-iot.xml index 91ab3ce..d6825d0 100644 --- a/assets/win11x64-iot.xml +++ b/assets/win11x64-iot.xml @@ -411,56 +411,61 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>25</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>25</Order> + <Order>26</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64-ltsc.xml b/assets/win11x64-ltsc.xml index 7707cfb..a9a6ce7 100644 --- a/assets/win11x64-ltsc.xml +++ b/assets/win11x64-ltsc.xml @@ -411,56 +411,61 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>25</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>25</Order> + <Order>26</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win11x64.xml b/assets/win11x64.xml index 95d1d16..8082c7c 100644 --- a/assets/win11x64.xml +++ b/assets/win11x64.xml @@ -411,56 +411,61 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV1 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>reg.exe add "HKCU\Control Panel\UnsupportedHardwareNotificationCache" /v SV2 /d 0 /t REG_DWORD /f</CommandLine> <Description>Disable unsupported hardware notifications</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>24</Order> + <Order>25</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>25</Order> + <Order>26</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2008r2-eval.xml b/assets/win2008r2-eval.xml index e7bd802..09a23ce 100644 --- a/assets/win2008r2-eval.xml +++ b/assets/win2008r2-eval.xml @@ -266,30 +266,35 @@ <SynchronousCommand wcm:action="add"> <Order>15</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2008r2.xml b/assets/win2008r2.xml index a345bf8..5dee0a5 100644 --- a/assets/win2008r2.xml +++ b/assets/win2008r2.xml @@ -269,30 +269,35 @@ <SynchronousCommand wcm:action="add"> <Order>15</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>16</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2012r2-eval.xml b/assets/win2012r2-eval.xml index a9de3c6..6351559 100644 --- a/assets/win2012r2-eval.xml +++ b/assets/win2012r2-eval.xml @@ -284,30 +284,40 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>13</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>18</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>19</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2012r2.xml b/assets/win2012r2.xml index 1d1a5b6..bb3dd70 100644 --- a/assets/win2012r2.xml +++ b/assets/win2012r2.xml @@ -287,30 +287,40 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>13</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>18</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>19</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2016-eval.xml b/assets/win2016-eval.xml index 568e9f5..d788960 100644 --- a/assets/win2016-eval.xml +++ b/assets/win2016-eval.xml @@ -284,50 +284,60 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>13</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>22</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2016.xml b/assets/win2016.xml index 6f75c66..e055e00 100644 --- a/assets/win2016.xml +++ b/assets/win2016.xml @@ -287,50 +287,60 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>13</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>22</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2019-eval.xml b/assets/win2019-eval.xml index cca0e35..332d974 100644 --- a/assets/win2019-eval.xml +++ b/assets/win2019-eval.xml @@ -288,50 +288,60 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>13</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>22</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2019-hv.xml b/assets/win2019-hv.xml index 4c416cf..2fb6e32 100644 --- a/assets/win2019-hv.xml +++ b/assets/win2019-hv.xml @@ -293,50 +293,60 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>13</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>22</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2019.xml b/assets/win2019.xml index 5133bed..b5d8235 100644 --- a/assets/win2019.xml +++ b/assets/win2019.xml @@ -291,50 +291,60 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>13</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>22</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2022-eval.xml b/assets/win2022-eval.xml index b525065..5748cb4 100644 --- a/assets/win2022-eval.xml +++ b/assets/win2022-eval.xml @@ -288,50 +288,60 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>13</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>22</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2022.xml b/assets/win2022.xml index 9159226..eac9414 100644 --- a/assets/win2022.xml +++ b/assets/win2022.xml @@ -291,50 +291,60 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>13</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Search" /v "SearchboxTaskbarMode" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Search from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>22</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>23</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2025-eval.xml b/assets/win2025-eval.xml index 9ec3a7d..5b92f00 100644 --- a/assets/win2025-eval.xml +++ b/assets/win2025-eval.xml @@ -307,46 +307,51 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win2025.xml b/assets/win2025.xml index 8098192..2796db6 100644 --- a/assets/win2025.xml +++ b/assets/win2025.xml @@ -310,46 +310,51 @@ </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>15</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>16</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "ShowTaskViewButton" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Task View from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>17</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarDa" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Widgets from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>18</Order> <CommandLine>reg.exe add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v "TaskbarMn" /t REG_DWORD /d 0 /f</CommandLine> <Description>Remove Chat from the Taskbar</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>18</Order> + <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>19</Order> + <Order>20</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>20</Order> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>cmd /C rd /q C:\Windows.old</CommandLine> <Description>Remove empty Windows.old folder</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win81x64-enterprise-eval.xml b/assets/win81x64-enterprise-eval.xml index a406f7f..745fd9d 100644 --- a/assets/win81x64-enterprise-eval.xml +++ b/assets/win81x64-enterprise-eval.xml @@ -269,30 +269,40 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>13</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>18</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>19</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win81x64-enterprise.xml b/assets/win81x64-enterprise.xml index db6eec9..a073c38 100644 --- a/assets/win81x64-enterprise.xml +++ b/assets/win81x64-enterprise.xml @@ -272,30 +272,40 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>13</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>18</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>19</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/win81x64.xml b/assets/win81x64.xml index bf1ff5e..6b45785 100644 --- a/assets/win81x64.xml +++ b/assets/win81x64.xml @@ -279,30 +279,40 @@ <SynchronousCommand wcm:action="add"> <Order>12</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>13</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>14</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v "NoAutoUpdate" /t REG_DWORD /d 1 /f</CommandLine> <Description>Turn off Windows Update auto download</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>14</Order> + <Order>15</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>15</Order> + <Order>16</Order> + <CommandLine>reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f</CommandLine> + <Description>Disable Network Discovery popup</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>17</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>16</Order> + <Order>18</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>17</Order> + <Order>19</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax64-enterprise.xml b/assets/winvistax64-enterprise.xml index d6ff627..a3dac19 100644 --- a/assets/winvistax64-enterprise.xml +++ b/assets/winvistax64-enterprise.xml @@ -233,25 +233,30 @@ <SynchronousCommand wcm:action="add"> <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax64-ultimate.xml b/assets/winvistax64-ultimate.xml index 78ed091..eb12e60 100644 --- a/assets/winvistax64-ultimate.xml +++ b/assets/winvistax64-ultimate.xml @@ -233,25 +233,30 @@ <SynchronousCommand wcm:action="add"> <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax64.xml b/assets/winvistax64.xml index d1de997..ad2ac70 100644 --- a/assets/winvistax64.xml +++ b/assets/winvistax64.xml @@ -233,25 +233,30 @@ <SynchronousCommand wcm:action="add"> <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax86-enterprise.xml b/assets/winvistax86-enterprise.xml index 91c96df..5092331 100644 --- a/assets/winvistax86-enterprise.xml +++ b/assets/winvistax86-enterprise.xml @@ -233,25 +233,30 @@ <SynchronousCommand wcm:action="add"> <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax86-ultimate.xml b/assets/winvistax86-ultimate.xml index c3ec41a..97ad23e 100644 --- a/assets/winvistax86-ultimate.xml +++ b/assets/winvistax86-ultimate.xml @@ -233,25 +233,30 @@ <SynchronousCommand wcm:action="add"> <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> diff --git a/assets/winvistax86.xml b/assets/winvistax86.xml index 07003fb..ade1942 100644 --- a/assets/winvistax86.xml +++ b/assets/winvistax86.xml @@ -233,25 +233,30 @@ <SynchronousCommand wcm:action="add"> <Order>19</Order> <CommandLine>reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v "fAllowUnlistedRemotePrograms" /t REG_DWORD /d 1 /f</CommandLine> - <Description>Enable RemoteAPP to launch unlisted programs</Description> + <Description>Enable RemoteApp to launch unlisted programs</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> <Order>20</Order> + <CommandLine>reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TSAppAllowList" /v "fDisabledAllowList" /t REG_DWORD /d 1 /f</CommandLine> + <Description>Disable RemoteApp allowlist</Description> + </SynchronousCommand> + <SynchronousCommand wcm:action="add"> + <Order>21</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-32752" new enable=Yes</CommandLine> <Description>Enable Network Discovery</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>21</Order> + <Order>22</Order> <CommandLine>netsh advfirewall firewall set rule group="@FirewallAPI.dll,-28502" new enable=Yes</CommandLine> <Description>Enable File Sharing</Description> </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>22</Order> + <Order>23</Order> <CommandLine>cmd /C mklink /d %userprofile%\Desktop\Shared \\host.lan\Data</CommandLine> <Description>Create desktop shortcut to shared folder</Description> - </SynchronousCommand> + </SynchronousCommand> <SynchronousCommand wcm:action="add"> - <Order>23</Order> + <Order>24</Order> <CommandLine>cmd /C if exist "C:\OEM\install.bat" start "Install" "cmd /C C:\OEM\install.bat"</CommandLine> <Description>Execute custom script from the OEM folder if exists</Description> </SynchronousCommand> From ccc0d4ea64cd99267b4ad35d39d085b21cc43e31 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 8 Oct 2025 08:14:36 +0200 Subject: [PATCH 252/290] fix: Terminate tail on exit (#1461) --- src/entry.sh | 2 +- src/samba.sh | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/entry.sh b/src/entry.sh index b7f9e0a..2f62440 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -33,7 +33,7 @@ info "Booting ${APP}${BOOT_DESC} using QEMU v$version..." terminal ( sleep 30; boot ) & -tail -fn +0 "$QEMU_LOG" 2>/dev/null & +tail -fn +0 "$QEMU_LOG" --pid=$$ 2>/dev/null & cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" | \ sed -u -e 's/\x1B\[[=0-9;]*[a-z]//gi' \ -e 's/failed to load Boot/skipped Boot/g' \ diff --git a/src/samba.sh b/src/samba.sh index c5bd35e..c28645d 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -159,7 +159,7 @@ if ! smbd -l /var/log/samba; then fi if [[ "$SAMBA_DEBUG" == [Yy1]* ]]; then - tail -fn +0 /var/log/samba/log.smbd & + tail -fn +0 /var/log/samba/log.smbd --pid=$$ & fi case "${NETWORK,,}" in @@ -180,7 +180,7 @@ if [[ "${BOOT_MODE:-}" == "windows_legacy" ]]; then fi if [[ "$SAMBA_DEBUG" == [Yy1]* ]]; then - tail -fn +0 /var/log/samba/log.nmbd & + tail -fn +0 /var/log/samba/log.nmbd --pid=$$ & fi else @@ -196,7 +196,7 @@ else fi if [[ "$SAMBA_DEBUG" == [Yy1]* ]]; then - tail -fn +0 /var/log/wsddn.log & + tail -fn +0 /var/log/wsddn.log --pid=$$ & fi fi From aa575286f6ae546b50d74cc17c12758e1380d68d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 8 Oct 2025 22:08:11 +0200 Subject: [PATCH 253/290] build: Update QEMU base image to v7.22 (#1462) --- Dockerfile | 2 +- src/entry.sh | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 49e8c8b..686fb85 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.21 / / +COPY --from=qemux/qemu:7.22 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" diff --git a/src/entry.sh b/src/entry.sh index 2f62440..1b440a0 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -8,9 +8,10 @@ set -Eeuo pipefail cd /run -. start.sh # Placeholder +. start.sh # Startup hook . utils.sh # Load functions . reset.sh # Initialize system +. server.sh # Start webserver . define.sh # Define versions . mido.sh # Download Windows . install.sh # Run installation From 45956f786f3590e2a8978d6376162fbabbf5fd4e Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 9 Oct 2025 12:24:51 +0200 Subject: [PATCH 254/290] feat: Allow to set a user/group for the shared folder (#1464) --- src/samba.sh | 134 +++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 119 insertions(+), 15 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index c28645d..4580063 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -1,9 +1,11 @@ #!/usr/bin/env bash set -Eeuo pipefail -: "${SAMBA:="Y"}" # Enable Samba -: "${SAMBA_LEVEL:="1"}" # Logging level -: "${SAMBA_DEBUG:="N"}" # Disable debug +: "${SAMBA:="Y"}" # Enable Samba +: "${SAMBA_LEVEL:="1"}" # Logging level +: "${SAMBA_DEBUG:="N"}" # Disable debug +: "${SAMBA_UID:="1000"}" # Samba user ID +: "${SAMBA_GID:="1000"}" # Samba group ID tmp="/tmp/smb" rm -rf "$tmp" @@ -42,12 +44,27 @@ addShare() { local ref="$2" local name="$3" local comment="$4" + local user="$5" + local group="$6" + local cfg="$7" mkdir -p "$dir" || return 1 - ls -A "$dir" >/dev/null 2>&1 || return 1 + + if ! ls -A "$dir" >/dev/null 2>&1; then + error "Failed to access directory $dir" && return 1 + fi if [ -z "$(ls -A "$dir")" ]; then - chmod 777 "$dir" || return 1 + + if ! chmod 777 "$dir"; then + error "Failed to set permissions for directory $dir" && return 1 + fi + + if [[ "$user" != "root" || "$group" != "root" ]]; then + if ! chown "$user:$group" "$dir" ; then + error "Failed to set ownership for directory $dir" && return 1 + fi + fi fi if [[ "$dir" == "$tmp" ]]; then @@ -81,14 +98,85 @@ addShare() { echo " writable = yes" echo " guest ok = yes" echo " guest only = yes" - echo " force user = root" - echo " force group = root" - } >> "/etc/samba/smb.conf" + echo " force user = $user" + echo " force group = $group" + } >> "$cfg" return 0 } -{ echo "[global]" +addUser() { + + local username="$1" + local uid="$2" + local groupname="$3" + local gid="$4" + local password="$1" + local cfg="$5" + + # Check if the group exists, if not, create it + if ! getent group "$groupname" &>/dev/null; then + if ! groupadd -o -g "$gid" "$groupname" > /dev/null; then + error "Failed to create group $groupname" && return 1 + fi + else + # Check if the gid is right, if not, change it + local current_gid + current_gid=$(getent group "$groupname" | cut -d: -f3) + if [[ "$current_gid" != "$gid" ]]; then + if ! groupmod -o -g "$gid" "$groupname" > /dev/null; then + error "Failed to update GID for group $groupname" && return 1 + fi + fi + fi + + # Check if the user already exists, if not, create it + if ! id "$username" &>/dev/null; then + if ! adduser --gid "$gid" --uid "$uid" --comment "$username" --no-create-home --disabled-login "$username"; then + error "Failed to create user $username" && return 1 + fi + else + # Check if the uid is right, if not, change it + local current_uid + current_uid=$(id -u "$username") + if [[ "$current_uid" != "$uid" ]]; then + if ! usermod -o -u "$uid" "$username" > /dev/null; then + error "Failed to update UID for user $username" && return 1 + fi + fi + + # Update user's group + if ! usermod -g "$groupname" "$username" > /dev/null; then + echo "Failed to update group for user $username" && return 1 + fi + fi + + # Check if the user is a samba user + pdb_output=$(pdbedit -s "$cfg" -L) + + if echo "$pdb_output" | grep -q "^$username:"; then + # skip samba password update if password is * or ! + if [[ "$password" != "*" && "$password" != "!" ]]; then + # If the user is a samba user, update its password in case it changed + if ! echo -e "$password\n$password" | smbpasswd -c "$cfg" -s "$username" > /dev/null; then + error "Failed to update Samba password for $username" && return 1 + fi + fi + else + # If the user is not a samba user, create it and set a password + if ! echo -e "$password\n$password" | smbpasswd -a -c "$cfg" -s "$username" > /dev/null; then + error "Failed to add Samba user $username" && return 1 + fi + fi + + return 0 +} + +SAMBA_USER="root" +SAMBA_GROUP="root" +SAMBA_CONFIG="/etc/samba/smb.conf" + +{ echo "[global]" echo " server string = Dockur" echo " netbios name = $hostname" echo " workgroup = WORKGROUP" @@ -108,8 +196,19 @@ addShare() { echo " printing = bsd" echo " printcap name = /dev/null" echo " disable spoolss = yes" -} > "/etc/samba/smb.conf" +} > "$SAMBA_CONFIG" +# Setup user and group +if [[ "$SAMBA_UID" != "1000" || "$SAMBA_GID" != "1000" ]]; then + + SAMBA_USER="samba" + SAMBA_GROUP="samba" + + ! addUser "$SAMBA_USER" "$SAMBA_UID" "$SAMBA_GROUP" "$SAMBA_GID" "$SAMBA_CONFIG" && return 0 + +fi + +# Add shared folders share="/shared" [ ! -d "$share" ] && [ -d "$STORAGE/shared" ] && share="$STORAGE/shared" [ ! -d "$share" ] && [ -d "/data" ] && share="/data" @@ -119,23 +218,23 @@ share="/shared" m1="Failed to add shared folder" m2="Please check its permissions." -if ! addShare "$share" "/shared" "Data" "Shared"; then +if ! addShare "$share" "/shared" "Data" "Shared" "$SAMBA_USER" "$SAMBA_GROUP" "$SAMBA_CONFIG"; then error "$m1 '$share'. $m2" && return 0 fi if [ -d "/shared2" ]; then - addShare "/shared2" "/shared2" "Data2" "Shared" || error "$m1 '/shared2'. $m2" + addShare "/shared2" "/shared2" "Data2" "Shared" "$SAMBA_USER" "$SAMBA_GROUP" "$SAMBA_CONFIG" || error "$m1 '/shared2'. $m2" else if [ -d "/data2" ]; then - addShare "/data2" "/shared2" "Data2" "Shared" || error "$m1 '/data2'. $m2." + addShare "/data2" "/shared2" "Data2" "Shared" "$SAMBA_USER" "$SAMBA_GROUP" "$SAMBA_CONFIG" || error "$m1 '/data2'. $m2." fi fi if [ -d "/shared3" ]; then - addShare "/shared3" "/shared3" "Data3" "Shared" || error "$m1 '/shared3'. $m2" + addShare "/shared3" "/shared3" "Data3" "Shared" "$SAMBA_USER" "$SAMBA_GROUP" "$SAMBA_CONFIG" || error "$m1 '/shared3'. $m2" else if [ -d "/data3" ]; then - addShare "/data3" "/shared3" "Data3" "Shared" || error "$m1 '/data3'. $m2" + addShare "/data3" "/shared3" "Data3" "Shared" "$SAMBA_USER" "$SAMBA_GROUP" "$SAMBA_CONFIG" || error "$m1 '/data3'. $m2" fi fi @@ -146,6 +245,11 @@ for dir in "${dirs[@]}"; do addShare "$dir" "/shared" "$dir_name" "Shared $dir_name" || error "Failed to create shared folder for $dir!" done +# Create directories if missing +mkdir -p /var/lib/samba/sysvol +mkdir -p /var/lib/samba/private +mkdir -p /var/lib/samba/bind-dns + # Try to repair Samba permissions [ -d /run/samba/msg.lock ] && chmod -R 0755 /run/samba/msg.lock 2>/dev/null || : [ -d /var/log/samba/cores ] && chmod -R 0700 /var/log/samba/cores 2>/dev/null || : From 135fd387785a8c7101c31fd59282dacc0159f584 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 10 Oct 2025 06:28:20 +0200 Subject: [PATCH 255/290] feat: Shared files inherit ownership from parent folder (#1465) --- src/samba.sh | 178 +++++++++++++-------------------------------------- 1 file changed, 46 insertions(+), 132 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index 4580063..d70cb1a 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -4,8 +4,6 @@ set -Eeuo pipefail : "${SAMBA:="Y"}" # Enable Samba : "${SAMBA_LEVEL:="1"}" # Logging level : "${SAMBA_DEBUG:="N"}" # Disable debug -: "${SAMBA_UID:="1000"}" # Samba user ID -: "${SAMBA_GID:="1000"}" # Samba group ID tmp="/tmp/smb" rm -rf "$tmp" @@ -37,6 +35,7 @@ else fi html "Initializing shared folder..." +SAMBA_CONFIG="/etc/samba/smb.conf" [[ "$DEBUG" == [Yy1]* ]] && echo "Starting Samba daemon..." addShare() { @@ -44,9 +43,8 @@ addShare() { local ref="$2" local name="$3" local comment="$4" - local user="$5" - local group="$6" - local cfg="$7" + local cfg="$5" + local owner="" mkdir -p "$dir" || return 1 @@ -55,13 +53,12 @@ addShare() { fi if [ -z "$(ls -A "$dir")" ]; then - - if ! chmod 777 "$dir"; then + if ! chmod 2777 "$dir"; then error "Failed to set permissions for directory $dir" && return 1 fi - - if [[ "$user" != "root" || "$group" != "root" ]]; then - if ! chown "$user:$group" "$dir" ; then + owner=$(stat -c %u "$dir") + if [[ "$owner" == "0" ]]; then + if ! chown "1000:1000" "$dir"; then error "Failed to set ownership for directory $dir" && return 1 fi fi @@ -69,119 +66,47 @@ addShare() { if [[ "$dir" == "$tmp" ]]; then - { echo "--------------------------------------------------------" - echo " $APP for $ENGINE v$(</run/version)..." - echo " For support visit $SUPPORT" - echo "--------------------------------------------------------" - echo "" - echo "Using this folder you can exchange files with the host machine." - echo "" - echo "To select a folder on the host for this purpose, include the following bind mount in your compose file:" - echo "" - echo " volumes:" - echo " - \"./example:${ref}\"" - echo "" - echo "Or in your run command:" - echo "" - echo " -v \"\${PWD:-.}/example:${ref}\"" - echo "" - echo "Replace the example path ./example with your desired shared folder, which then will become visible here." - echo "" + { echo "--------------------------------------------------------" + echo " $APP for $ENGINE v$(</run/version)..." + echo " For support visit $SUPPORT" + echo "--------------------------------------------------------" + echo "" + echo "Using this folder you can exchange files with the host machine." + echo "" + echo "To select a folder on the host for this purpose, include the following bind mount in your compose file:" + echo "" + echo " volumes:" + echo " - \"./example:${ref}\"" + echo "" + echo "Or in your run command:" + echo "" + echo " -v \"\${PWD:-.}/example:${ref}\"" + echo "" + echo "Replace the example path ./example with your desired shared folder, which then will become visible here." + echo "" } | unix2dos > "$dir/readme.txt" fi - { echo "" - echo "[$name]" - echo " path = $dir" - echo " comment = $comment" - echo " writable = yes" - echo " guest ok = yes" - echo " guest only = yes" - echo " force user = $user" - echo " force group = $group" + { echo "" + echo "[$name]" + echo " path = $dir" + echo " comment = $comment" + echo " writable = yes" + echo " guest ok = yes" + echo " guest only = yes" } >> "$cfg" return 0 } -addUser() { - - local username="$1" - local uid="$2" - local groupname="$3" - local gid="$4" - local password="$1" - local cfg="$5" - - # Check if the group exists, if not, create it - if ! getent group "$groupname" &>/dev/null; then - if ! groupadd -o -g "$gid" "$groupname" > /dev/null; then - error "Failed to create group $groupname" && return 1 - fi - else - # Check if the gid is right, if not, change it - local current_gid - current_gid=$(getent group "$groupname" | cut -d: -f3) - if [[ "$current_gid" != "$gid" ]]; then - if ! groupmod -o -g "$gid" "$groupname" > /dev/null; then - error "Failed to update GID for group $groupname" && return 1 - fi - fi - fi - - # Check if the user already exists, if not, create it - if ! id "$username" &>/dev/null; then - if ! adduser --gid "$gid" --uid "$uid" --comment "$username" --no-create-home --disabled-login "$username"; then - error "Failed to create user $username" && return 1 - fi - else - # Check if the uid is right, if not, change it - local current_uid - current_uid=$(id -u "$username") - if [[ "$current_uid" != "$uid" ]]; then - if ! usermod -o -u "$uid" "$username" > /dev/null; then - error "Failed to update UID for user $username" && return 1 - fi - fi - - # Update user's group - if ! usermod -g "$groupname" "$username" > /dev/null; then - echo "Failed to update group for user $username" && return 1 - fi - fi - - # Check if the user is a samba user - pdb_output=$(pdbedit -s "$cfg" -L) - - if echo "$pdb_output" | grep -q "^$username:"; then - # skip samba password update if password is * or ! - if [[ "$password" != "*" && "$password" != "!" ]]; then - # If the user is a samba user, update its password in case it changed - if ! echo -e "$password\n$password" | smbpasswd -c "$cfg" -s "$username" > /dev/null; then - error "Failed to update Samba password for $username" && return 1 - fi - fi - else - # If the user is not a samba user, create it and set a password - if ! echo -e "$password\n$password" | smbpasswd -a -c "$cfg" -s "$username" > /dev/null; then - error "Failed to add Samba user $username" && return 1 - fi - fi - - return 0 -} - -SAMBA_USER="root" -SAMBA_GROUP="root" -SAMBA_CONFIG="/etc/samba/smb.conf" - { echo "[global]" echo " server string = Dockur" echo " netbios name = $hostname" echo " workgroup = WORKGROUP" echo " interfaces = $interfaces" echo " bind interfaces only = yes" + echo " socket address = $socket" echo " security = user" echo " guest account = nobody" echo " map to guest = Bad User" @@ -189,25 +114,21 @@ SAMBA_CONFIG="/etc/samba/smb.conf" echo " follow symlinks = yes" echo " wide links = yes" echo " unix extensions = no" - echo " socket address = $socket" + echo " inherit owner = yes" + echo " create mask = 0666" + echo " directory mask = 02777" + echo " force user = root" + echo " force group = root" + echo " force create mode = 0666" + echo " force directory mode = 02777" echo "" - echo " # disable printing services" + echo " # Disable printing services" echo " load printers = no" echo " printing = bsd" echo " printcap name = /dev/null" echo " disable spoolss = yes" } > "$SAMBA_CONFIG" -# Setup user and group -if [[ "$SAMBA_UID" != "1000" || "$SAMBA_GID" != "1000" ]]; then - - SAMBA_USER="samba" - SAMBA_GROUP="samba" - - ! addUser "$SAMBA_USER" "$SAMBA_UID" "$SAMBA_GROUP" "$SAMBA_GID" "$SAMBA_CONFIG" && return 0 - -fi - # Add shared folders share="/shared" [ ! -d "$share" ] && [ -d "$STORAGE/shared" ] && share="$STORAGE/shared" @@ -218,33 +139,26 @@ share="/shared" m1="Failed to add shared folder" m2="Please check its permissions." -if ! addShare "$share" "/shared" "Data" "Shared" "$SAMBA_USER" "$SAMBA_GROUP" "$SAMBA_CONFIG"; then +if ! addShare "$share" "/shared" "Data" "Shared" "$SAMBA_CONFIG"; then error "$m1 '$share'. $m2" && return 0 fi if [ -d "/shared2" ]; then - addShare "/shared2" "/shared2" "Data2" "Shared" "$SAMBA_USER" "$SAMBA_GROUP" "$SAMBA_CONFIG" || error "$m1 '/shared2'. $m2" + addShare "/shared2" "/shared2" "Data2" "Shared" "$SAMBA_CONFIG" || error "$m1 '/shared2'. $m2" else if [ -d "/data2" ]; then - addShare "/data2" "/shared2" "Data2" "Shared" "$SAMBA_USER" "$SAMBA_GROUP" "$SAMBA_CONFIG" || error "$m1 '/data2'. $m2." + addShare "/data2" "/shared2" "Data2" "Shared" "$SAMBA_CONFIG" || error "$m1 '/data2'. $m2." fi fi if [ -d "/shared3" ]; then - addShare "/shared3" "/shared3" "Data3" "Shared" "$SAMBA_USER" "$SAMBA_GROUP" "$SAMBA_CONFIG" || error "$m1 '/shared3'. $m2" + addShare "/shared3" "/shared3" "Data3" "Shared" "$SAMBA_CONFIG" || error "$m1 '/shared3'. $m2" else if [ -d "/data3" ]; then - addShare "/data3" "/shared3" "Data3" "Shared" "$SAMBA_USER" "$SAMBA_GROUP" "$SAMBA_CONFIG" || error "$m1 '/data3'. $m2" + addShare "/data3" "/shared3" "Data3" "Shared" "$SAMBA_CONFIG" || error "$m1 '/data3'. $m2" fi fi -IFS=',' read -r -a dirs <<< "${SHARES:-}" -for dir in "${dirs[@]}"; do - [ ! -d "$dir" ] && continue - dir_name=$(basename "$dir") - addShare "$dir" "/shared" "$dir_name" "Shared $dir_name" || error "Failed to create shared folder for $dir!" -done - # Create directories if missing mkdir -p /var/lib/samba/sysvol mkdir -p /var/lib/samba/private From ffadba3f3f8c725fd37d5d66e8116e61f51a96f4 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 11 Oct 2025 17:31:14 +0200 Subject: [PATCH 256/290] docs: Add link to WinBoat (#1467) --- .github/winboat.png | Bin 0 -> 22156 bytes readme.md | 4 ++++ 2 files changed, 4 insertions(+) create mode 100644 .github/winboat.png diff --git a/.github/winboat.png b/.github/winboat.png new file mode 100644 index 0000000000000000000000000000000000000000..2b5f6dbef88f304c6fcff445725954f4cc0e408c GIT binary patch literal 22156 zcmZ6x1yCJLur>_jAO{KV1PKRscXxMphl2-#OK^7!?ry=|-GjTkyW5xd-dpuo{ZrN3 z&&>36ckQh7Zg-fXyaW<F9y|mD1d^1bs4@fuB=kSb2M6=-STO9h|BpdBDN6`LR80~b z|LXuOgye)EAZlU|-i-c}1Ug7+IYB^t?f#D-!3$x)e}g#AVw%n>_U6v6MnB9T6pgIx zoayDoREgQ>ndrG}>{j^y$uyd2N|{SZQA5D}>p(-`{j&@C4@v(c{QtxMyn&#E{PI8J zQ2#I!BoqY7Kd$|ctU>_)GY<ZT|7%??kPt^-{y+ZzGYau<Di#(3@K2JFnS~KD=YO^S zXAwH*e>Elk!~Zp?e|n+*M^c%K^B?-ZRZNVG|IL<Dh~!ys?%P5@sPRaN3aPs3pLe*n zlS#NAzI&H(XE^Mxjj+Uv8znl)Q<B6&q9$9$0tZnSI6Dp7tvx5W4}XzzLXg8I1Pm(? z0~3|Ll18z*+wteNm7lnOmhih?tffvzwhxY7OkVn&WI45#m6x}bXL+1Rkr50Uy$O6Z z;O+@s>JRRz$)V<teG)_u2q%F9d{O(pLw%{NCWlz0Xs!CiRNeV9?Q?g#KE7}W0!`|( zuc~7c;lJfwq0${nbH5F{ttFZ9%b0P5YD%U2q(z~AmEjS^_J<qjhLnYe(3a%o2{HEk zf=V0q<(+oW*6Kza{6VY<5m1UIwLWtb;@>B_&G<DxSS1_4if$u-39M3PN>&Y|{cCM^ z!pn&@mu@CPL!MG&CoP&$hSv>+MtuDw3dHHBg6VM!6D2_rK!!G&UgD)>a@59+Qj5p~ z{vuYRUWPinRdx7H`OisO;nJiLklq%I^b3t$*2m=7<+9IWDaYnxrMaE9gz7qYHaI_e zN~2QO^Gww9xw7whxMK{b#oOKb8NKiL>Wy)C_B(S^y&YJ7$8e4WRjHUd;8Nz+_b;a` z#@Ag&@LhP7)j_2sN(OxLAcw2(eX-s8kFoTw_a}`(kyVa%73MTk5(*|Nv8LZFEvYBZ zlSM4a*`9kVx%2yq%y&q;d-#pAcKBKX$yJ1U^IBFKlL~)oVa?S=M++A>h`i_o{+Y4m z1$%uzfR(2FiXPO*8Hp!0Zy#DiUstL!f7jCzqVPV`m;D}rpY`<O-jOR`Co2=F8Ch3Q z5QqX-hGPxHQ&a<m2KzX)?A`9%O{*+q)Ht%@yVF+2^UTDq*H-YU(-CQPST!@<EKQF^ zFY}KNBPuS82P~M(xV2Nqy<*EkIEHCLUu{G*sKaJMBr#Nm#{Qo3{JCH#qBxLNEHC(f zE|pR9KY?nb3d;_HzimF1y852#3GgkicsE+7aO!-g#<8#Yt`z=@!m`_N+7RwLPK_i= zB%ZF8{}8^tE_f!DG&n|=%T&Bbjxil-8`9r>YYAzHfNMHysXnjeWFhJKBxG@=K?lGC zi}4+em7c63^o*4Ajs(YA)}gZ=zJUF<kO5C9K+aYh099)Gn(=7*zdM7~^XO@eFQ+zt z<`m<7^T_YGIOOY5#>b^wNG8v>6Et2x`Bg!vTg=h;56*<5H5_GGIBGy%$yal)EA4HO zpb`=il6<8~yDFJNMyI=dC6(n61%20>IMS$T*x=hZp5QdnP5k)WkfE6{dFzt%ltc6& zQK14@n1GHl0X0#tt|Ry`sVF8X)qFfyaWUXYPm#hT9|1Xhh$9YLJ2z?tWJPzltIwyw z$4juSfqRdvNt!>}ADnFC8cqTd#}d?TVlY$BchwU0P?QvOamGOuRuth-1VDZ$T%I7D z>PB1|#x5<=Y(Xwvz39N0m+@Ie_1l+IagIQw(`fxg`PEIroAdOvq8e{Yw-Rl(MweG= ztqwM_OtiS?o{o~T(vslBoL}geAv;mpa`Ah<nUrt63SGtX>|+d6trvM^tZif9y9>LJ zZ(_c794;EwEjJ4nJR6S`U%)?cLau#j+k@wbk6BqH-UbeRKCy|IT|Z5iZ={T*D_AAH zqObjjb`#(kvT}q~1++nlOQI;K8Mm4yD1j(YFm*@L;Uy?nmS`v#m*26`yt>1Ccw!oW zsRbo0TX0o~h4*K?#?BpDEH3?{!B%UrPkZtl)g0BDb+Q!d@~Sk!8g>Q~D-`6KHJC?` zQgqc0g0TUXtY4)uHeRbQ6)u~N?p!@*&pE);q9W0*T7`K2$on1Aj=uY^$bpJ{Yv(_k z5M$VgQfz!qN9WTmKDRD?K4J?h{_TeVtztDyz`M_56^+14=Huss_kiu8MxS3VXCyhR z9{w><yr+m5=vJ<ZR|4mDdVQh<H3)*s;U@+&e#b#oh4wdwVB0D|p(zn(3SxqS62d6P zEQ6%MLPFz$XOJum92F8opXmj(d9Gif?vhS0Ns)QWdfY^*MKvUtkd8S!JKyzS=8tuC zQ5$?L1y-f@?VRjOpu~BT-v*!sHMJiHNQ__LeMtL)&uiq`2sEg}*etI?1@~#%tD(f_ z-8JyyLb%sAM5N;7$=O%I6>GR@>75_QM9*<_GN&I?{l-$~Mg)TiLTa<sa^Cm%2CpC3 zKCc(cmq@22h2M$!3+IW<59wBy-!dgeZV(f2<EI0!NmFWWj_xt?F}YQ@%lQZ4AO~Pc zYN#NwxxNGzWOefSr~C@-OOd9rR^~zm$l|3?CDBOPpq)~Zh8T%4VF@eFiJ&R_KjuJI zkYRM{##KtE9mgt7OKGUZl&e2xc<qJZCr4GK8f<8K_r)DEWeXI!kL#(MdR)H~B~re< zRJXgzF?F1<ydSGskQ+rN0+9Ir{$gVL$pZEL38fpZEIcpKEbMk*mw)~3pvm{9<r4B~ zIi<_On^J<Fw(a@-y#9G<bM5&GF{b?mmRpmCgF#&9SEyWmDp>0-3jDWy8n471F-K`$ zh3?=MtH<FF^Fq<~-xKagB5EA9bFGB>3XS;#i6*Z*4tt-oU=9IpR|a~Gc0p>oG#0sw zm#y=)x2n~Yh3=<8;9#}(n3aM+^g?Z-;j5&bLm^2au7wvm+yaRzAjk(L64GR+o8c8x z7+#-A9XM!o3%JBI0OkSJA*g_ZVzwdVq1cgv-P;w$0mfpK?Rmy1mzLqVVhB_}@H*eO zmL+t(E>lk@JyyAP552@qV_F`B!g}$2w-qGHOJ_H&MoF`(?cf}<L<uZInbAW5Jv_Cv zg^TCYmh2@N5(7E8ClhTUzWcV>Ef1FvRh|#9^fmJ*kL(Fy0I{fPs~+#ROY=)*mNp=; zsg%F{_FMLA;l)hjo2OFCGe|C&;Fl{k6sG}*O{pZtQ%UvL7kJ~Zg@_8dYesJl!t>QH z>GqxH6n1H^2i3s`Z=n=u&;*f>gU_P|KGCmT&EKL~GhBP1mq1s4*PH5YANV28i>tR% zt2+W0xG4)m?$TuKPyViJ|FJuVFLTZ^6&(%^Cb2a_D@1e(tPi=(3dR+aW(>>E31}iL z4yMH|q=cFnNAn7q;g-fsBM(tV%?F%b?MPYUiXYQ0MY0M8{BjKkhyUb?0$ZLwmru4` zFXLA~58RVV*wc@?+wS#w{M8yy%G^?urU>VN%=WMIuM0M$g+%AVqRoY8t%K<i>#!9L zpQc4t<K`}zN~|2w4c0!dXaU!!R^yMP6|+uUS%;jR2!LxI-sS3Ul3jj$tomL+8*o}( zCcnMLk&8^Kfy<Pm;7T}|sEh<rAZ(21!|4%?)shO26-NocdLgsO8c<hij1ZVToTt&W za$IXE{6TcU)IM|RYL*G~M;lnfvx57K>$N)0U9sYuj75PE8Ur74x}4j>%(He+>>jO( zJy7A*702any8SaZ(Nk*7m3@~NpMlS+>+=Wf<!;!NK+i(8t;s1}LbDzt^%!GE<akpY za}PK=E(0XxSS2dl?KY6)mjjca*<Q`4o<}@O@jDi6ZcCIYHH=yb=?Ud34^W=im{Y%> zmQL7qz4YqoDp375wT2hpzen`b6pnSyvs8F#)z{fkIgB?Xe8IYilM8&e!c1Ljr)Z#7 z6a*tziCV7x9X{3ew>o=91O9H5I(H4NTylqS;qw?n>x10HfbH{RZ_5!Ej8GIN8#yXX zOBuMVtdg6JQL3yANzE22s_+<Pj6nH+PL=Zf8c2z{i*5W{B{@%ZwfA+YA{nOlIa+<r zk;{>sIE-iC=sk$eP*lrh4nUFdlXgsfz>lrN1grR$_RNg3ZIvDgEhADJe^-Rg=kwRj zn-GINgsx}z&WEb%>EF2Kk0Nc)8$5RVo|kP=o?UmuZ5Qc%woI(%;#RH_T2&@{9g)Dc zU=o(-asqLvKr~*Q>^LyGBo$N%To_Jd(vd(aTtSXicQIzccB1X=s=m_Q>$Bm$!{7bB z(~YZ@_Lb*w0r|U74p7mz!m^Xt90Zu(;+W_dJrY*s!ikmI8P&h(*x&aBd_U3*0L>TS zr!lrgCQZ>Xkw`kc&4}{^Vv4h0fB-4V->t=`O?<D}0zT(Og|;4LSMpJEpu{ShB6c-F z`<7Ctwf9GR{0%Oy{q!ht9?qX?aQrMdrP!K9oe0qWs8_u`qc}_>B=eXlH8~}*^h-^H zh<TUai1UW^FIa?2%-CNAg-oYt*4qLvnDX?T;U4(OVK32M#Z1Gn3=EhQs-Cq2d)Dd| z+>x&T3J0^n6g<E{M6M?k-;30+^J|ueg^Nr11fmp#$Fw(+LST|^$;{^+MzX&8%yac& zudlc4cWttMwj`-p%Y$xz*P8Y>EP33@^M4klLpI+%r#SAYQT)|SjaLnZ?Q}%W_IOQ! zXg=bgKL{;fG;}CPNBg+{N#sY5Xi)2qP{kK?&eJr#t{Xq8>0+NcK)~0}_PLKn*nBA8 z`99S26)#fD&N8OS3Xx+txk=OgjCz5nA>M3EgR!YyM01*g33|nq^&H1iUO?4SeQWj? z1C*8-s!}@!;7h1jB$+GMxqd=KOvlp)c9rin+ip~nj#vR_0pV3yir2y6jp@1$Iu9OQ z1BNIx5N(1V69f?T#&B^H>-X0#Q)FJ;yu-eHdYkV8T&-Al){`{lZ`$o2gXjHKDHJEH zvy2H*h0K0uWqaFHExF&f@w+~Mky*V}RZ1q2Q7Ps1aT~(odB{axa~1+Gc0OMZjph@s z@@`^|IPFj(9_4s0equ#Q3dIK`qso0Ptb*>>t@Ny-CxnQQH-O?J<|B&C>zV2iKs7?` zSi)y}C2-6Uh7E%7G!Ow7Zwp=cP~qMOgf&&+g@E-Ya^Cb0f#JhY32lNNqSI+*0}|NP z&4(AFOn8Ec#MIP6k!~hJk>OH5CW^-MohdHT@dd2S)ifIl^$rp!y>B4KdMP(w_w?4D z4j+vr;SgYgA`DsNJ+{L#Zt`{|7cfjW6xYt5yQjQiekJHT0kOO8Fg%`VwNPrAjegWh z6jN$8fHNeB++rvDzL_`4)p?GgkFRYz+$u%XU>trvkX3ZpaDki<Sw!uvyQj#0^Y+jO zfSW}FX69ffA4y`sD*ZV^QhL1((+8uw*&plH$$YQR<>Cu=+lrpuH2Qa`*;b~fpZqdI z(_2#DykGExiy8jZdEqFE)x^`IW6$9&H*vmi#i!ZVDiGD32TtX|we#8Ff=VZJ^zOnO zs?Z$e96&qyok-V-TF33@e%;|(V?Cb&^rVIqoK!sdk@qHYv4QV9pMcYp-ZAF;$KTfW z>CpsMRMvG*-8Tk7Q%43~*8b*iubp>7QybVnwvsk|rj$y;dVNmUHfsWQx+&-oPrfMU zl9j+x&#C_+sIW*Y+46<|Ysud%nDQluyzIjU1q1?69U%+IyUyFL@ERrDNf7o@u;5S) zXELtgAC!N3pl^P5lP=9uNo0C}655JVJ8fOPlK`of*W(=elS+p%vm88DYPd08)+~#k z3v>_}kGqQwFHVcwgFGcaadP1N;vpJPRW8uaA|<lm)~>2n-L_U0V(E#tpXy?Y7Sp%4 z?L`lsTkJgv`-(Xz%W=<G*PcgSn_q3yad;d9S$xi9ll3^G_hQ`w5Xi{Usjows0EZ)9 zy^7WAp3^N1?_2Yvi*L#-L}@$SeAf0Q2PLfSX#|x~`LuB-Y0wYsK6sF%;q$)+OvoTe z-U|&#Asx75zQfomCAow4ci`ahYKJ+}`RNmj41y`n@n8dP*Fk{nLZIC(x$7Br=hg73 zT??0cYVFOExQUpEsbt2KBT1iiYpj2fo7@%1O|Epfq+Z@swckXZ<t=_sxbx^SiyQXm zKq9R)3^pSDl6U-KK;gjsT-bY|n;iCo%Ezxm0@^}YS)(iO<DU=dh=g?x3Py^b{QFoG zZP^dBase*=o7b5KZnj$ue&B!{I{!wX58OPKe24=plRG(oDO`~#T8y+HYFVeU?1B#> z1)|dog2MjF=Yy>N4f5iT0ftOu^snoDV<JuV#;a9ae>47KlM@l4L}i3@`fzY`?2_C0 z4rQ)A=f1jK>7*aqq>~QBnsIp(+!jeN$20S?%VwEFEal^6ykw}foZP2emAQ8PO6k1S zPCKPjD;|=x2yD@LU3+hoq%FG4+@HK$llUE@kCue7B<s*)(vRkE95n#=Bh-j|JnV|6 z)y9Iu5h9AwE)6M#$=W9qT_<dWk%Cj!zcUj!178@_D;Ni-W?rIvWToat^Nwk;16do4 zSu<IJA-PjhFC6uqeTxbeA0nV(L`5s{0=vw(-`wh#n!(FW{^7<$hl6`vi{0>29G~!P zAw^GCiyg5LS#1{DqMYOLo;9u?+WnL|Pzae9pFw!Sbe;;{A=@LK?EcN6;1?nBxej|# z;p0!rW5o+T>LBbDGGzrFrl6Ht#d$PQI6)K#WwaZ9{?i;O<YK;dV2RZ4?2EsvnCl4Y z)jC48MPWLGnl3ju#d<Eh8v3665Xe3U@<ol0C@g{V<UEASs3B>pvi$X_JOYl`O&zy( zcHXCYUbl;O#<P_=jFXBkG?6t+AQIIqJr<rNrf+QDtT`&WtD00#2?kK1N5qAKsl}~G zV-T8rujC<awk1W$?boBzgL$puK`8yX(ySw24Vg5n>n$$`u1T91epGR@=KVdzR$2FH zx}4huHurBSizLBiDk_5%$%C0OM@1c^KzMpTjW+HNUpAmWyBV~8O~<uUs1s4?A`|ic z1}PgEkdSZr54{R%CF88(8>}RY1aV`|2TO@Ie-bveF5-GPIha_BtpFHGR1KvWUnvlT z*CQYmBk!O7O884CqS54FN}&ltO~Q`*WgVccU;#&VOtX!{#Z3efOUX-L$=93Cgta|< zVP(t(e)eOiS_|2L6a!8#iSR1DkxG>O&vTa%>&=13tUb>8_99Tm%A=|A8_~EB3k~XZ z%m!k!k>Ay@pf3U(*}jMkZGQ_?Ug{Wu^t&VI8?bNB81uQHu6i3O=iD8zm~Q^ze{f?I z&nq$za2?mMn8<kgdkt&iXL2<jX?;>^fkYSXktM8-5W8*jeVyw~zg_}p$XxfPHo~$B z+>8EqeP-wmaYwL2{MHJZ6eb_W3yz|S>palKq@?XP7C{OAC3Hf|G4r@rlg8Ow@XBOV zrt!@|>Ez_)&(TyJe>%H#h9bLDwYsMJwKdxgMpqpJ9@o2{AC3H(_`=%j@vO(=yj~xS z-R&2Y@CIx8K_?5nm`#aQt`bT=FV8eGc@8{po7%Q6ON8BF2iNB<pSKHbxm4ZA?uGCL zt;ZHd)Y1u44dOU%gOLf7EQ4^p(Drd7YAhib^xFba{(J`weis7zV3}c0PWS=(`^lW) zWJ3Fdum$gTtOdS#b%pf^pNHJqPwCafkegU7_uziUJ^C8Di4x37UEL?aMr<}mVxBU! zP~gB)Q(_%{$@`mn%=9cu@YKeBzExw-+Z&DFc+-!x+H#p5<1pl!zh-z>!B(NqCQKvf zY7w(BX-V7s)}KV+y{(k-<{y=DGZU5Z79XYij*jivA7))rMz|md_mv5YjjC?;YZGZ> zXH9$92+{`CU?GU!j5V_MJ?q=rO`PYyU@PsGYx`~2Drz4>mX9gs*kUO*eyPA`G92eG zO1CxJ9C(vw4d;~hqV(URBuzwRQzoS8&4#L}%LV+QQ_XZtT5ZMJ)LFz-yE_!%e#It4 z=o6I|VqlvvQC%A~WMFkOq#wsl*hWvZa)X|~+xBrf?Dkk`R^$2Au(7SYB3{m(A;HtP zqV}<)HuklOX5a5r_@$qwE;m&p$>@|u@3*&FUFuu2)I?Kq<G$inhP0ycWy5l{CAQe| z+Ks3^^@Py1C<T*HpC7b(O~TnT88wJ}D8)Z8yl!gD{a&Hkd|k=imSE@aia6=$6t=ux zzat`}W^(_oFo-fF5euoAXi$I@hSa=Tov?l2wPor{VZdCY!vr+Ajv{OUj~VISRcMYF zZ?h>>0&SoO1(Xw?Z;Df+d764j>qdV27yEMiW%Cn|{b8TIm(cZL#s7G?X?*x-vVn?S zX}EksaLQZ9)AqDH995;&iIt#s7q2IKxEia5nU5blJgBS+CH}?A7IBH;%X&*IQG*|9 z1Wv$Dpj8sfiNvu@=E2~pJs{`jG(aNL6=OL(Fn2zV^320I{x3_Qp~Fc}U^76Sj57xC zv$Ed(^=2@f@D~Ep+v?25i!ZcpAsW>A3=;wGSl9bR=3&=iX4|KPwc9glS$>XiEWbEj z|5j53OpPdAI6PYqivKkV6gg;#7-#m7ta`F#@5i>mW~tY$HS{1LQc4I3Pqwmpvu(pW ztS^@&{!g<!Ozc1)ZR?M@6m8wlt=ByEw_=my_m4}k%pMF(S_mW-p_ZaQmE*E}8JlZD z#s}X)^15(H{J3`i6mwp3`>Lr&#P0NKQ_ZQL-mv^%JHsD#Y2q`WZxfn6+wk)4FTmeM z3Uw(?Qx=zp>AtAvc$1$s2+MBUN}#dCzkxpFcQb+u?4hS|Pf!VX{^a#V!Of4PkGJQp z-pG?+hvn01;|U<mRi{FcUvAa*hQj91;wL@zq0gRcwOL=#sZr;c>*sl!*JGw@A6)xU zwJ#!9XHNAj4mvRiL?0y+qhIqpF!a%%Zs5>6#!mo;cSVvk&fsnRI-t;XlMq%=zPfyM z14y4f=cF5xo`;SH6>B7Gs!>JgFI>9j%M>f=D#}Gl^DsEO4J&-!dS>ZCv>&W6Am6tw zD_YN0%gN3A6O)_nh)|Ol-iRlMO43_>)@;u|u04DDzNjdaa<nK9(1@sw#5z^9Uk|Qh zcf1-DeRx`1K6_Y)zzJQg45h*J;G2%9pa^5g8!=K7ldKr1!sKuD(N;e%vt#SpxL<nm z8hi+6^UA>W821leG)Ydd6VtyEVdTn>^rA9J!$H7I|6+4|K*7I)yn?AAUf31!3l(Ce z5XEHuIR=Dm2jb97_lQHH&WT=ft1?oDqPB~}rlEk7a{O|lMZd2e_hqGWH$rPNBK*pM zL=AY9j>qx$5dG4jFQi3TX)e4m3<RSjDhli#DHEJl+qUlP!W&{uPq!Xh&Q+nYe!cbk zqj5rfI0#4b<Ytdn%_^XQl2JTA`Ns+?TdAH>XY0GaYGUOOP+~2Z?-<Km;!?B@;7GX3 zU4SQ97_~?s63sc>=KqkWH><*0OEMD%V^m*|J&8IRUh^ZP`lFA-eQ)z&m)Hx6;OEA4 zq^)M(Fq5siJ;6{Qzx*rfILd+2(}_;k@Ikt{mg_uf#<hyYG;f*TW3+i33gN}|^yjtI zXyu=W3R2G3phIRC)ATjytY%x9Y|m2-h~}5dsbX*QXqf{^S?I~wz>Iz^_4Kd_f!Ygb zfscyaEPT2u@L9I2zW)!mx4Bxrw+}6g&W+NuMVcA|B&ioNx!Ea=BMYXRQev+`^JBV7 zm)FUMt1H_+k-ny=uSlB<c8&IIjqm%N)_R;J43anKTIKFUt!LJ~{n((2C;w`4e*5=+ zi%R@wR<)NAyQUY1>Qnt?Mv)NFW-Jju6v=i91V2PpHB_efUGGGG1g*2RSCl|b2NQ!Z zWh*724q})LBtvK*lW8z&rPegYG-$;>P*O9NxylF@^Mb`m89lJshfGv~1N-0@OJ&@} z<!|PuxILIA^V_OJ9m`XTyKISM|8_4yk2-)fQD2G14b|Tb0~w3D{EoGeMCfmAe+azA zm!3f(O#dNV63g!3Cue`48~()KYez(P01+U<Fmg*S3~ll7JIN1;@2YtK>R8;Wk2wFu zcijQ96j>FQHXP`DNI70Lbp#?2!6=Fv;VWUPXhS}6Kq+(xWKa2)f4`<MFm`~Q#Icg# zij$gvY%rLTXV}8MCxY7N;wKqJmZl;a+zu0E9;V{LYJ;fE2<S01S(9j3H+wv#Af7mW zR)eyCnuYI0E2L#w>p*>CmOD3$Pn%MlXWYE4^oB4VFoQAKdE}h+Nu%NPEHh>Pd>m2n za2X)6`3~3gIf-=kG>KI)R)XSX?ubWuAj7R=4ynn`+#9|PBX5p+%1FQc%CV-<!WO+n z*JO8~(six0@qXg!^uFnxRq1-E+dTfT&ci4seUQEs8wU{b>gKvX9g5N6YW?xdAO9fo z9sc(BbPI^bRvwSSm5paP^{hVD+`=k38-HexH=!8&H!ly5btAd9NPa#k=`MPo$nKa# z@SytFh9PzG=Np&pp~pzLgpm4ayTgeC#pFi(C}&oC_MuyI_B8@9B8SuJ_-%n%N7KHy z&ZnF2>}f)tKC^ZuFaYMp8`i8tavc^jE^onXK7`dpz943aY7WEmz^k+y<9;i;PK~z# z%eYLm*RZU0e8w6tmecbY;yur}k106&b%5k!=(65@EIa!8)R({C{^J~_`ZFp6yOY~& zzST;YOGLY2_$SV8-H|;04gzL&UXL+~vYchOSinFziG7hN$$&b0<3zuDvDCy;sK3%^ zZLf4NGL-tr4~b+jMzE4{GFcu~iP#q$+FYmzQNK=ePJ<sOT)VnY^=3Altx|CGKUm;4 z#Cp@nh2trOv&)=8P+Cy>ZHe3gpel7}SW)U5R?!`Gp%N$(&I-(KV>U<&D>EeBBt^B@ zrk4z-4IFHP){LL0ug-0llN2~6yOnr4V>AFHe@l6Au<>g^akolXZhdkYc`bcdcA=8A z&UBOai#Z_!pG~}q8Wsa?-JO=p0<*eaXIg%iFYT1q?5*3eKv!VO+r5n2#wBkAi$Mz{ zy<aYpTzr3=G_hk=Fk9k#{K(KLA#*&b+!wJC2Z3Ct!><<}L*B%(S*$(%^AbHPnh)2P z7dsCO>zKCoe#a6PlEUGD2&~wzI|5wuy!D-3#%}xFp~jH^f~^_WbLWWKU9mX89K0ri zl)n^9LP3jMojEw(oV+LwZ&tRSwX%lJB*7@5P^6O9nl2K?0CN^k6^Ra1kJ6wi9qG)7 zfzuFb4t31E`B~k-GOHqrfuwmU6_93LPpV&Aw#LvBr%kHFp#k+<9|X8JB>HVFCOV)| zuMN>ZR3IoRn7_d(-SJ2=`b#LlFf!hBOJtyojjT8;t?qh>eRu4KcnTY?&W3s4AeIJi z-N>o0BbSDLW_%!&2fVzXoM~>rpdW5v89>MHAwM@<<H#8*3{QJdl$$MfL=E!9VP80B zeYhq~dEN)B^9XhHYcRi+T@5*jQpEfbX7Pq0S?!zFd46n>)*dHf^WWmKJnI_cVViL7 zLTYNSV@X?KV=|b_QsO!wd)OG-Tml)SNO#KD``B<2j#%=qL~Fe>LjHxDOa*8u;_B40 z9W`l8Ord3L!pAu`aea!$v1(plHtj{YM0a!yRlMSrmjg$C$?*0h14`jU*=Hp|or7@3 zh*fZwN$~}A@CZ)s*~hu=Wu!esg}--I;uBbcC%+v=YUmFB?0SHgZ$H9$nMWk&jC2LS zlSiyaX0#)+7lBTlg!^XdZB0k7*O3=)T!YH1+QP9v#u1*6n?7g-uB)r}3Volv=)LDt z>(vLo*Tu*t1R-7r>!LYKzcDJ&IgMO~dn)}}yy$)61?4gFw0T>{vk_sQngDddl9wFW zXs5p;kq`rDlgK%v)Xk`=^qor(-=Xh!7S`Kb6C^hg+)&#g?Z5SK`y;ubdv{~j@!si# z%nc6UtYt1>EkT8eZn%6xV~fxQ_8=NeWhl>o;Ufz~Rjq>-{~il<?5~7~W~_y^Kzu(e zW4tbd!i5lUi@EVAc@sZ6LHd=PNaf><gK$f(dUe$P^M#)O!(NZD**E&(&(+#t%+=W; z5RY6cGNga|$Z(uDchk(LXlUFyq~+ME#C%vT2vZV2x#f9X)-IFcG5pqF4h;>_Y_rZ< z2e}g73-!B_RA8QBD+`ob*k22uDhby~rjE+KyGeI*iZ*BS1F8u3Kqz#mo!rH8N$^Wr zfn$_Cq8m{Pt@b_Dq4WX8m$oJ~=fi_xG>ILgm8okx0NH>VX2R;>?+yLwRCwni&%hsq z=-epbIHTi&Y946Ev#F;{4ds1rcLcXiEI8dfl&|;Jh=wzQE1{wikO4w(DD&ft`*SEo zID^gXC-_f>U|ey`bDaWVN+oFwg;>E7kq(Q&zkh&cO)|zo;r`TAN2&DR%u~(M^vh*@ z>&I-Y(|*)TOgT%{2F?`$)LQQ}-Fv9B-iH(pk3Zj~lQUT+ZMZ^`|CrsfxBiUnGtqa1 z-yK3$k{wr+9apM6tGT(`&$z2kz!jh>TX|ogcMjC8!wD6GW;L8XE|9dtH!4w_7ys2h z6KytC#i9^>kDo0dYBJGam2Af<jw+RBAMhsx2^)+5C*yBf5Kqv<?D5AP1!3na(Iph; z@p$$+4%+KZed+<2Z-Y`F%^$>>ur;uy7I1rutm<<Ld+Bqv>uI~=&iFRy`$=~#y~?9q zW$b*~_%ZFeuAh;4NZQ91@NKc{bs7eaX|xJ2CauJgkwik+Kb!=`48|fW^UsH5^QruP zTnNE}IZA=cT%6l3JPuKIP_@KRybO$BfT5gVWU<Ehk2CS1<>IJap5CUeQqHDeeO$Mz zPAa=rM}*xmS_y(_^MUZlA$Beo1ujWM5OmMw&gj?=df((92WFUu`a3v;@Mj(szhX^R z$P|37MrNxaIA$$|B7006&0@x~=MTdzDAO-#6y>f5m6aVP-A8Y;bx6|w*rp#Q-lEg{ zw*DBwBs=7vaGWH|Vwv=7U$%H%$lQy}0oO!@&raI^G48!O`r@?qvyH^QKHm?IhwI&D zs4ffPP<Myx5N$s+KdE%x$=L-qEeb0Me#sw!A*eh{?Z*dZmJ@vt%M?)Zh@~O_3*xSn z<4KJ<_K;15+u-eXFAdFPOTBTQBho?@u6aG(+Uq+PJ0ClNnQ$J{c&ZfEhK6DQLhix4 za;<41Z@rX=IJI;hWVzwIF>8-vxq+Axx)~-lj11nlXf%=ia2zcu;|wut#0?Fm{$KZQ zr@+D8GWdX;d$b^o$e_4ulK7(UVfk@ItTuy87KDARGz)bf89(=Eg0kfQ{Zvc(2`J~( z_~SH$<+8azQJ;8!_)Ur*JYCRFuGr!~AC<pWT0Z%)6E+szwT|AtBgXjAw0YA8t2o0T z<m4uq!NMe6*wFtckqIwqg)$!~Zmm9zY7^9ixq;!Pvo)}b)xyM@hLbc30EYK##!zD= zfyhnZKqP_U;J#XKi3_2e>ujZgg^b=j!N&k0PY5^wl(F~31#J82kQ|@?g0WxO!!ynt zhWCnyVz^J3(>i4eqvO|=bde>`iSN_%96m(j1wvPy$z`jFd3Oa;@-znW-%p?BD2m;W zYW!=|93G%WLY=1-4HLdrzg(;FUUo$~j?9X?tqhEDUglx8AMKC1Z;y$O9Ous%ojcOe zcX~ylvrqc12C)$q-|Ak~!=&hO^>Q7WHs{GO`W4LYz9Bf#cRDAUjS-OF>pF|27aPp( z)Q%0d+{FXwJ5Bw^st9(;7Udk~S=5E+g`g7UQSs%vqL^?<6RSjLw0!njxT@Xuf6#Xr zXB6wPPY$F+J5D$aK2K}VTlAsgnknt@vZgtFK+{#VdvPhWS^7uN<88;&h(ArIRBu(V zpv{SG7Z(pLV;8(FStmQ~&*$rUTr<<RSYm4Mdw(<8je7~#F6)gmSNfF!(wZCG+N~8< znfZa~bLbd2VL_5EKg8?u{dr;6>XJL`;SN}D&M}j*D!8B}v0@NLH^^iMca3WZY?wDo zGX)SyRz~$!LX_Tuk|;DvGvRl|5qki#=5WSWc=;T`D52Nl9w1fC>$^4Hk(<D?rO5rm zs9DWwH=Y1VWVYzeJE~fLMl?;=-kN%PXbXhK2^&Aw93Y1F_Iw?!ffdD|1|_2{6JHNT z!2LN1DzwJWd2+dSa?T*bAVVZDfMH9PSW~Q$0+bc&!Fq40jcS8g_)d?f3gMQyygq#H z;*XkdZsZU)=&&TZum+2&GXIrC0h(Ep0(r1f5^)MS!u{ooU=6T=s;0*}#fgEw<qiyM zZqcDgZEWK!=m0XN9HY-i=V>`v4&GI8bUVNF&RnrK_Far_l>gFWiiT<XlQCV|b7?M5 zEjW-o8Q5rtza3XurwXj#8qGIHJ2ZFOKp5nDd?Oh}<G+pj>ie`Bb2V_v1AxNTjr%cQ zClq0I;p-OO+vhk`Wzvqje48I_KSKyMgpOV{yz==fk-cz*c)HmA#=i97=2!IXhTIg2 z!{;Y#*JtwT^Q?f|Zyq~39KuFjmwiU`F<y0QVU)<q%O%x7MWt4Ec^>=Z@+_vwr`YX5 z`^2}N%Z-WG&4!3ltNkZ*75%4ttaMqEieg$M4qut)BTt^UkxPNm&5wB#8;|Z9FHGL^ zoB7CS*CUPD3Z6;Fi3aovEjr#GF}sz%*Ob1m3lh&4NSIc(8#H)k5F~DlN?%ch=N!vK z_sizVwQ68ed9gnKS{<!p@7Q%Ee$b`t*tMZubmF-mN!M1UOs}~!J&&iF-r|pV;9DkI zkF5XbZ&1uedHi*a1BAm|2-H5^&ew26v5`c@MmqNTBN!b>AoGQk3lEWeiL!|)xRWYX z=HU3ZmjAc}S741QKk<U16{Ot$a2?0hj)6Coz)K2)ao;h`@v8gForxl-;rHko&jwDH zo+vdcu$0w{I_jw``EKg{d*<`0RL%269y}m@f%%u9Bnc=^(5)LEU&|NOpNSKYP=qsU z+|1YMqiB%q`pTc^WEck`3Ei1bFr}LGlr{*IZ*eNxb@A%--l^ulXS}}emmzRq<8wp1 zFho@)0Vrl0vy#Ysn`(Cn#qKZ;#crp~|IzlRNZ5bD-y?>Bw@<`d|KWt3!OMM=ETw^x z+e&Uv_^w71h54fETa64k%DY1TcrVI?t(+Vu>!<?(op~GZ9ikGo<c$?y0ql68WvdIB z-Qklq<>kzwbNTJiiD+rUg8vrq@5M0*W=Wf<b+V4J!&a}XL2UYB*3=gqmF2?IXt$4N z*@%&Ay!_k53!{;be<~lDYo=&mNwCE5#BqDNP5o-?TfWyxKG~`ZC8<d-kfK2`Gvf5z z;}iWJ_}wq=y8AhWaAX)|?dhJ1|8A0w*XI*#_aq(T>+#Ar?)puFFu`fM5I5-*CF3g7 z{%psIXnBy%;L+=vCBf?keY0>iD5*S9y-uQ#PhLPps|BsmMtS3!L&xpt!EDX-6@}>a z=yAF6=hYJILNwl{9P5K74$OBYI5Tf)_2~G?YEbsNpwj^$txbVq-39ArDYY3^KHuq8 zYJA-tzT+}Gy6uqm&hM5nMpyFT>3NT5GMCAnKI*w{xQ!wK3!ia7yWn?sD@nzaWIM@y za6ft<mNZnOelkr-@UW4Nf+TpoMap5YKNhTvI)@4eKnDg3G2)d_9&xnZiMOeaQ45#% zr$fab-I1AoovIvajPA6z64+A=>uo7c>U8$Dza@xIj1}EB3_^?Y3^G*qFOZxmSyxqo z!Yynnkt3-=SiC7!F1dT*Pd(=b28BNaSPZRAp5NLXG`9R$)bO-<k0`kA-t0P6xL9)q z^T7!_%WU?o_xV^Hy?>{k$^R7o<wLRU$stG5JzGU^=+1y%W{k#im3ozI?)k3<DV5zK zgMa+2ez%QdGR`7^Ok~bHFzDb+4&&jaaPG8b1tfW5w%iQ|F9tG9II^pR?-82>PsEW` z0$viL@w@mW7I2E^!FdCmj~lC7HRpfK*(!A6YR;MZs-!Hdg4N2MDkdHJ<CG|yog@a9 z!eQ`Zh>A}hxGu-%_kcF5+*5nb{+9UQhefyCX&e%3`Ku+;=;ddAW21Sn#D3AgYSbRQ zZfRjPkJ<xX>qUfHr>m{ZTZ~)M(8$<=vE}xWS}PS|`@U9E8UNFra(8wc%d7a)LAUkv zV7I<%x?L-cDhj3?OhIBIX|2X~A@Zv&J*PX1VAOAeuQ0|lC0XTsoY>}(hCumK4wN?Y z@oOCE3K(T3P`qJ-&`z*agk$X_I4v_D_cXhA_)e?7F-zuQSPb;2=fCDowdP2&{or)% znkn=1l1mjiTkig8`Dl`bk)_y}XDHz@I#-KOs7+gJOfD9KRB~Ea*Ix~v4h&Rn%*#%` zOMs^!3C328P>N6r_?`%(i}v^jB&h6^T6m3NC6$`&Mld*NRtFO>Z_|0!d}&sIa4{3% zC@H#~h2I$kGK&Sk69ou(<O9&Tpc-ImfRHj;K&cIJS@|@iU0r20?Vq0Gw2`CBKWZr* zJJxSm(u>+|vs39_?bFL!yQq+!3z^S9WVsIvK57*7UqgsKmQEkRcT=BF6HzI;x6yn> zzOX&ro<d<`ej+XFC3O#+L>3R``2!XLbNf!&OVQlTFKJ2bN3EEFj6nFPgMS~728&KN zR<<se4qjJ!3J$NX)H5J7q;Im%GV{4?SlSJ-xFbV3pVa-SJ^eFz{*Pqm!K6ve2G?gc z;?|U;b&BIO?{>P`>L-ki19P&2vQs3$dVIP@-Xk~TSJt$?u;O~H4v%Oynsn#lt?1Rp zS)4k82BlJSbI#p<@>{3Tb!2KQCpfP!rThP4)C?EOfP5Xvwdror;|3Bj5dFKqxNSfv z#Z(Y$h#jnl6O}QVO}rv^KpIm~kumf{dsN|Gq7zU1O>s!`Nh-Ro$G$Xu%bTRUfQ9#3 zs90z}&v9H6QkdTmktar+<%E?@aIxQFNi5;-u=KPe@_WH>Eb{9Pd?<F1X7+c`bWz0u zt>Bshy;$6g5dsNSTEPIPyFJ^)MO=MxOi_n5>2Y$@pJTV)fMWEEHVD@#G7MKeS@%P; zX3uJ2qGmMrJNUC?1S|P$`EpN!i5<8bW3mY_7ZQi~P6$eNJ_%V#)T=@n$$X+Jiz;*b zgabLe6wq;mCZ3o)tn6J{>W?JkAg=NVE(=Yqih{uD?}7iWmMbMF0(V4`5zo%6Z!v64 z{&i9(7+QM8exSO7mfVU~&hrp?-&WC=Z`kG$tWn%x2qYas4ws8X8}85D!V9;|Z|++u z{14l+KCc~@e9zuQFWo^L|FQt|%aB*`Dc*JW{@C6Z^%{DvyFVG4AJTpQSUKGj&MsXg z57@2}6>LO9?c5kyeI$?s9{o*RvD_|(pE!f#|J;UI^fkr~>o(J<+A5e05!{}k3E|qW zS1NM#<bV5@`@8KxO^d>0(u`DQsn{M7g-1n*6jeQwhR`|H&2u5AmdQ9};b)(UvktMs zTk4qjJ3M%#&a?@?NA6*({tJ6J1dy=Y4041yF1GQYWz^`N9&%?V(D`FGkD|lgbKW#D z3#(ogf-r?|@f>U9;hN2JL8X{(6p8zr!?>V#2~7$kz9b%oSTmB{QB8M@0u5IT2y+QV zFGv~!I!Be2!i18_+7=zrt|@;R-GU$5S1=ekx$nKJxaoZ4o4ov(mh(F5L;ia#?ys0c zHV7}KhVn~oOd`KBB50IGC?1C=*QfIy>U;cA;Yx9uX6RsJFbeRSvGs{bo;TF=%M1w8 zI#HE2IkKNaYMn9)%vA}-6nQ7Lnj(_0zH!4_mCwC?(%Os3ir{todf`_`c_9$+;a#k_ z=EOVTjsLGc4I*9P`?3dj)HjRS4ezfaEEY2t8M1Z0tWm~nR!q_}_6h2?74~8@+Q^OM zFog?k6V#dvODNE3EfXWc;%tXjV}B<xNyog`cPZE3^pSUBVaBuH&~tUpv(Qukq8JHz zAONDg2xY)2R@GwWsocbrbK~U=^Q-7S1(8zfN7~52hj{#R_K%{^P9blDm+s3cpPTim z&g(iN?#tvUpS_zQfxD~Qmnp9i3T+0j0gJ`Xv(_oS=be=GyD<j$kuOB>`zQAMF7I7j z0(T2xW)knxo^Jc|Y6G<$I!z2-6Xp1%RatMih(ke+?!S7dsDH<P7m|{lqvS-GA=p<T zLhyRoY!ohyWU$T|tn+dYC>;rZ{1~I}e9Tmm<&IVf;D}RTq8y}=vbE*J;qWxd6=LGm zl>Neu8kN;f-BGL1v@|$NKgIcRgvbHQ;cFe<9#`W8??E`2j2o>9{eHnqBD1ufYGy2# zf=Ls2fjB+|5Emb8-u*gtAvLrFKelX9W!Mafyv{L1irnD#<hUP-WSe!H0aX5iyz%Wf zO>j4k=)uW^WL~wuE0m`6W*<7KB`#_P%Wn@{ER66hfAVH(3m3c<kv|^Z;`;}{qP)dy ziCNqQf<je7mrLb2t%VAyBbP1w?9CpEPuu8_3$30;3NHdU!T9>$%eKF>sffF4hN{RF zbCmt*u1|Jm33wj`S?|JMSezL`YPnh6D^Vj3L6lUM!QkM(#DOrA6o70r;mDJMv@Ir8 z$TDuX2sIfjv^08)r6yb?6T~*N`Z3JCj``ou4ND_Y_3Q?cx7%Z}u=M0>-b@#b#i*U0 zxCf0il9#Ridz}c9M0^3xuTreVF~wY6e$M7}Q5W#q?@B9X>EmpStZ<D&W@s2X<+44v z61dbhMpn%SXYg7Nl_o0^KJ^z4f~^t=4ke<H-3RNd{SQT%r{Tzihcp=s8Ls=g8~1h^ z=iU<`&&Z~gSLwIwm7in<Jd<xvn^`a8$RGPsT^}R9oQI@~pSuGM)8y@M#f?$zZ`egK zo(ttf?OX2Et*1l!e?GDV?AR2ZG~<aJWk$+ktXj|Lr0SmEwrdVj`|>MyZ^WH=OQbSP z@NC~_H|Tf(XXrgvf_M)ixQK4Mjzz*z6a~^oP$YisTs;>2klAm0F0I~h#><VQSKE)5 zdy}hpd*@h_lxfsp))&IiyoD{`mkqPaQ!CpBiaGTdVq;VUvMe80{LE50&<nsKgKMnZ zw|1m1t0mkVzG-c3cRK_Fn9u8Akv*Y9jW<R&<vjq7<|!R|yYtp{o5q;xG!C5S;=Mw# zS!WB5uW?sN8Oov@4q=w(I){64`ePy!Q#z6Xd$Bz6RI+~*73?$Rcsrp|pH8aezt_fz zeSegs#tH)U#I7a=i#`i&Qu5!10xfa5g2LE<BD<JQZM=`0jR;H*+ey~Vceq^Z7km}^ zE$RR6N4N#K0$IDqHD3dvg~`;kzzWFn=t<2w-rTg4d38yqQ4Pl6@xwJ=i_tv{0&nd> zCxgz&>-~grIs2kadE?W44HO0A`mc=f#F7}3=VIlg5;<RzZg;Abi*W!PLdI`-NBK(G zbnM)PVxHI$fz2Nj|8gf196+it`&oy4)-oV-Q+S1@M7}46)*(*qvx$^>Oh6_+T#S9U zKz-cJMnXxaFZY0+h02B#<jZj3ut`d+U1#86vW%r|*RR|WC!AECr0EML(@ZmZDjl${ zI2PVsm6S5;VT?5qIz8|8n?!W|5N|ump2lp)*{=r<`*ZB6m!K4L^3TFWN)ha^nih)X z6TX=AtxE}>$A<gW^pEqY%|DxLqjeis9c*~P^3okPjMNgqD3f>)--Oz}czzmLd>9EP zDW*DOFvcn7F7-_REDgcr>c!gHT$j%qx<$L)W?TbD>n+&ZP)>_^<=o*;&sD+T>cUmF z%f-}fUAr0vOtqJlYBbd%lxS!jmpDk**MU&L{smT@IvfnEVKBS3r!x3_bFbIw%TwS^ zTGoIThFXZis##I^RU8X^d+zq$p=hsl(a`7Rnl@HF?zS9L1!5X)oKV4G3$2NywPxw; z{d?Ifx0!Y5lzqg)!xcP%_R^ZLJNbLBRfBM-zr+ljUd$mdP#Z=vNP%aw0l4(lNRc1} zZ`FoVA3IDw+g5ohO+Hbsd7koqK0VO4nWtwstB;gdr5jF2H^1{l|EpM~<J5{l&br>` zaXX)?*ga~vI!3nNE;q1IVH(x7Py2jG&WIY~cpg1$YrlL~u}r((!H&6&v>?B09rbR) z^g80ZwPYT!_IZ$u7ND{)M>8*Sowh@)v1#|azPd)1zfH1N$FLf8GFaQfowC__8J$Dd z(;bRyFuV^|BDdJG|L{UsZK}*;{`N73z(U_uA(Y%5T^a3Tk?ghf$7TShGzhuVlVbC& z7e|XFDgvSsd||QK!Zi0P`Dys4{#E*%tt<{ls$^FfMm4X=>a6a%xj2v2TM|JQOMvWD zC|_onVxFBMqJXciBi+{L4`Q7)K3)3r_cLybcU+GXB?|BNoraVTr}VhWL5ob#a-H5< z)&j3s`$d$%@=-9a`(gISL{=!ejKi~n_wF96K}XFrL1zhzfU7L&lzMSIp^RaaQom@v zGOa%#YATogAT-<mUb+aXXL}&9bmMH-sl%4xxp#=Z%j)<(Igh7!;nX;f@n=t0r^!u2 ze&6Zh%StR|S<y*-i2}f{8NFbO23gz4HY^E;e9Tfh-gJCwGOlP^lgz&0Nl{`1=__Ur zIc`<0sg^iOOaW#y;96#f1Cf}xDCdWsJWpLu!y>z8CvU7_9xFFoCOz*9<=RUJz3ciy zPtvX-^Bniw!_|t#dvJGMc3nn7v_?NZsC(U&+Ti_14D1DFym>?{)}0rTHI2`%oQZ5C z$m{xc_4$Z`;Q22g{_(j~1F7bka;$BWYeLU8pvXkinsLO%=Z!+cp_geig<tO`RpD_& zdslYi=hHq1UNlc*4|dnz-QDagGJ7^${Iq>B2K})xik<^l#7j3Fq3U$TcH>|g-+~dY z!voXQoI>Ufk*AlGwzap)uk=<bg)j*hJ6wxZhii3T##YGFs1Te-yLWYh9y{xXqQ8kO zwS#2HTdwk$=vz6B?x}mgwi5Y%=Q>D>zN1cu6Tl)!@_R>yIYvcQF+_|ZN0f_gh!2yR zr}xVi;k#Z45LzgtHQMu<AGe&+j&~`Ll1yLP|6i?bjMd$7E8RX7#dU*qmix&fLeqff zOHu0Ts|GER_fFse5ZOPKuAF&KtJC1;=jRNc!F|Ld`>j_2?%Ufnq^o)|YqmPKr#V<+ zrK%t(PRT?MtSSXb!*;I5$S<n*>ED^{5s)fL03&{Kq8y%Q;4(VWh5Qo5q4()$K$+ZV zLe+Y^@j`4pDlFcn$G&#|UK+9SUfrh8!rbno2Pc*I7mWviXpAD-kL4C$-#0CxQ`;_4 z2PtNs#VQ3B$>((PB>KZX;EA1SrwYtfh}SL~W#(Y%HA!by{Xu;mC#k<ma(0XnfQ`aB z=Sa*W7$ZKry+*Lmyo4+4Z-k>!Us^_P6(6AKA9heH*_}eQp|RwJKR6zz9r1**Xivf% zUPJeiL~1L73%JkHb%~$pTOnTu115qUjG|$j_S}TIf}8phH8VnJ%LQHH$|S}T4RzeK z0e~@3*!i~A_Ap9%ju>z}zTjIwoy41{bBub3?U}zb{sL!3<FqlxD0@_enBU*NxD^b8 z3B%cQO(eEHqWStPtfzZ`6i`%x;n1A%cozp9=ynIE5*exNLM}N=0#X`9xk?&Zz|Tkg z!=V(KFytfo^!XjD>oX`wLJn)^lk;geyB}K4CPoqVrsg_SRAvX#0<|E|nWryoXv*hd zzM6Bl!+jE6YjS*vGJSVLHFUT;+xL^xH1EovBP*fxp^dyXw`OJaPBVWQ7j1k$tf2V0 z%m!bE8b=8I3fC%rJA+~jWAW11S_2Lj(Syh}NxGld=uc0icqs;+T)}|x`=80FGmnA_ zm-jnteup0Y9^$Wo`o*=ABP)5VyB$>(UANJtGMl%Z-xiUOD|wg$dEt%f**#4!i&0kp zUjW|~AnH)C@dU@~e}0H0i{)&5XQ)QiRv;QrhkDmw25!rBwPIlB*1#YAUP-T;N7v~3 zT6;QPea!$tqmM+I8jKCN$`OK+rm@>pr3Xz&Yy)edaxu;TX0RoBAUZA^L|kM@eINu+ zo;L_V@wN4y*MKn@B47!)s!N)rRBG`UtW~rs5g)MR1Y@Iip^jD^LPcsLx98Lmh#|kM z1X3$hK7chba7(bDF+QR-8O|H5p^m6hM(@)QKois@q&A}{`lOANswTPw#n=)J4kOX4 z6cc@JLP+sSj341G#z2x3F~|!^6m$kx&-)o7N$pi>W4)p^q28mi{Le%j4@-yP;&v<| zAo2CpDr||7nIq*|C@Cs9H{*{zVdp1a{_^8K)NJxlv%!uuV>U^(D<=3PNvefP_k*Ra z*$aR3mzWQ3`}TRhedM`b<&=!{1QB~ifC(g8VR=_-VuKhw1dk!kPQFr7YjIUUBTWg; zMOT0USD;{P?x1#;U)WFvg^+j(7jWIYqL_c*kom|@zW-gn@}xI2KyN-+=fm25X(oC- zIpVH6r!RibzwUg+(9rrLgXVFjA3W?xY!_evLYI|m=6T7Fu4H^7_P-E={zikLMJta` zpC4at{aHs6+Vqg)L+|TQm7~#Kp^jFxH&IaHuD5#~+M_es2XQtzQ0^Y=DKVIB4vazW z;zsQ6Sbc-YqT`FdKN<E{Zhx(+dwyie7GZy7*-xDua#=AFqi~Dai+f}63Sz0fj{hKV zz(q>^3<mvE7(~yi`(7Q@8|xxZ5e!BX%Koh1c;e1aUiZplKiF*YP@}=lEMw+BgeY9~ z#v88bwU79dis56kq|r>QMiGoA(NnT!m-7sK)x+YEV89CrIaVy8icb4V9s5ufTN8pf z0JYYo4x+6~y~ko8_@G7CJ(27D&wS_|C&qoZ4gtM+jYOehqT4k`-hJ2f1@C#+<SW|k z^&5g_@vaw9f<@j^aoJ+}gv!&(Q*2U_Wr5%##}yg7TIVl5T9Va{<0hoh@l<2Dv7$0m zRf<WPI8T&R*Tyn?u!l|k!D8_s{`Wyqbb(k6KKFWfi@qP|_+soCdV78^#{RDHWXCx` zefz)uV1v4NOSPp~eU8fhX7C>*WYP0j^jzu*G}`LddyNQqjk`_<5yaMJ^ueGmMYQLS zId<#EU-4tdez^7TAPW16T^GS8qplko>w-2bt7(XApvNEt=dmU_m{cW*G!SXwy(O^? zob&h)Ww;olK?GmhXnSjLCdLNws8*utMAaG83wR?aqP{9h!`%0t3PIR|y7vm$gsu_m zjTp3^@u3cNy~L<1asmk^9bvxLVs>tf$;o9*&yF)QH_puL1T(YCn4MY1?Cb<{Go#GT zjWRns#?0I(GqdAN&n{zbZaKaF5R#;nu2=6nI3NeQC_%vCDeL6$)cb4fm7+;`OoQ?P zUz?>lsc@!`lLCjw#T8m@XH*cRPoRjl@~XANrzh?%SQ0dv(Z=NKvW}n{!=MqUOrKz8 zq8-4%oI(}V0;R;^>UvzPlQPyd*o#4<H{zb;>qPy#jCHAt!A};>adlo<ABzJzKAAp2 zdW-HsYojx_kkA--H>TRtwVr_XdL6PS3Dm6L4?ab$!yfI!AR#qdZM61F9{ks6L^e=` ziml!H!B|0!_hNkCM0R*U^5jqr`JS}UuKB62QFiV(+H)avy59GDK9sJk<_MwV`@K2u zod?bFuIZ|(<&ZH~xKx8lDZHm!725ZXqH_Jx`yxQ)penp~J?C7{`EIAIif-kK`J$NV zx~fw_*$-8}kp5iB%%3c6*TG=oCPI}&OKg`|=B&sraP|5%b_`Wl@8h`F*+@tU0c@t& zT+!6Ucz|)wT(B{Ss*!*(uHGuo#207-#ztRwD^Wk4nv9%$Aqea~5K}9-2hKSIdKTBs zG41I@F<wkvc41LD2v@%#x!Kd{#njGLgFP<lJhcl>Sc9T_kBU7raqLe?tY7Nmp`NxR z9^W&N>h@48?V*l#IjD0{oA)}FEYuZ$YkXc(vyy{Y74_v~9L&MFwGY2W>w|@Rkeb(C zz~FnmR2@vkOYZkS6?+kh!M)bTRfFd?*dSPl$3uxVfy6`(TWU}L#CXbLes`;F9;w&J z`{{5`j>S)Fzc~BNkG_t4>`$wzoHvQJ1Xro=el@lBPBiUUo30Z{FGJGPT^V{-NDY3M z!CkLa^+=xQ#yMT%oxj?M9AzXF-Z>*7+>zPjo1#4CilV7r&k!|NT9f1kO+zSyHRT7t z__xRZ*QISb7}TlsdOFeT>#BZfR&U<y&i=}mreFE+18mIFWsRbYTfn86P=yi`8VlzN zwLQEll2l+kK3Ied21}m$J;r~&j@DGiJ2V06^<8SgRXz&;)SyOD8)x?gES3}<5R2dI zU=Y+T8T8|YPQBNGMaN8Jhb6?k#oKfaI;2w9t1;RXk#ML+Q}!SMBSkdI(QJXfg<427 zXxW}?FK)x&bLssK?rq87l|g?Vw5=w1gEA7Lv6t4wLTeYmx~e_r*UxG&?qSJuq7KJj zA79jj7^+PcwYx5}&-X>g7T?+-qwX{HB68trX*^<xwiJf=j$*J}SBDKu>N8`X4xvwy z?RxN8&sqD~(@xL6(roCaMlO>{%6yV&&)85MZ27R?TX^BmesFloSM7QCM5lSo8{LlH z^c&JFeZ6-&+wF9Jccj(1F~IRYRO>2N+&S7>Iqh8fhDM|L(?zfMoo=u5YtDBkhnhnd zWJyzIrslr2e0X@wn&i(k`18uL_xC2aw`X~CqAZK!aelJ|?o3E85wU-$UX#A>{+<ro zk2S08QtP@a8)3(HuK$ON4`~PLP^$Dxo#^#g*)L>Or^|-#e0%#dzw*V|r{(#|b!ZD~ z6THUwenPsJ0ZWwc#8<P|T7Rz&!+y&sG1U3N%SFUv`+W_IO6?Cz&RN`7_wdK{AdiD0 z<}W(Frx8oa>z)CLK{c|b2r+UqaTAq6ohq?Q$GaH_H3yBUFQP0Go({<3B8~u-+>`F- z_~JSj5t9QF$N`qLWdTcn?~SFx$3w&31ABiM<nJjLpU2>wrRN%=JGF?!CtUl-sF&zx zV(RB^DvJK(%n?TyU;UBi9CgR4HQ}aKOExzevOBSKl2m(#B2!rW7I@BEZk*WFTlPj6 zdag-I?e^!&QkH#f*Sve{ilOFO6Z~w`Fzl1;H`TbaRH`flKkIyW&t#|k^CMQQI;&q5 z52pBwB!u5I!7f*yNMf>Gs^O1vW4`RfpHOr=cL?(HiLoywgr<muey_N>>=$nyYYvIW zjD*B=gZke|RL;&#YP8>*&h55uW%i*reEM&Hw70n3OW{hDs$jg|XQEfKYObRjcJ0zL zZ@zKc<+t9{J-*RgIg%s|$|?q?h_>*HSk8Jq8`<}zwLf{8sH{BHy4aUfSm-JBpjdp) z!c1Dvo=}G-U!=Vla4!t}U6Oj1U3}g^Z#w9mgBg`Yd7<WlV#KY1)<uX~A{OqGxCV~% z*urcU??09sc!|d9ea(dcn(uv2gZowX5RgG#11#nskiF~PE5E)cwTto>)xTHyJ=yzU z@$>&dK<hTtx3l;#^`XHk$1qUEMlJ%4nkzvdlob7`&ct%}*d<r4edNRw&4=@rZXas# zc;1l7#L}^8=o_Q%DG`M$e*LcZ&iJwC2FadKSL{fw9S_nx%2je}XSVl`BNHaY``<FO zM#So^CiR;_@aGgo*jN_kV+r;njfS2TLgyFNSG$H=BVYBUX$B|fI%P#r{U=qvBf-B& zBs|j^9!`zDDY5DColfthqA0gkfj?;4e6*RGpRuMq*7><_TQjyf(friROs@0&`=0gX ze|qlSi`%^vu2gXqBSoL_qGV#O7ml2p=a_9<<l=k2KXclhw|8(=x@Ks2bjbSvI?(SA z1~U7fC2DH@WMy<<U~`aidmw{XU;nH>YggSpW#XqmbmFN^`$Us^y)SzPgZR3>nytn} z4T(5(VUXyea#ELFG;<G#0#dW6b&YDFjwBS_(c_XNM!B|8t-R2V!MzOHps4iYo{lQ0 zHfuSBMscaQJ?+t2))6aMloma!1;qBp93S_45Eq||=5<{VeIA#d`@bJcdI0SA4kI@( zAkM)kM&rE(=X}3Aw|V_~GkN-%tHbdp*pD|`Y#kZXN1F|{WSPvQiFRzFeKGpfIE72z z^xZdveEG@F_dasvl_!4dt~<ILcTE;QXEb?<_kN_CYf#bMZJ++*>apS9`Q-m6{Y!p( z?u>q?`Xlk?iquN#eLq0|?q<&a{Mzpv^<jXke`DrHXS?p#L#U1pzH}P2E5_cCB-!uY z^k*w?dC6bs(BqFz{yMI@&IdQ*U1c-amHPSjv|Hc%z0dyDYdV*{?)w{)ASdPNiceqv z*DLn1*Io=QRVqib=rdk8mUYWw&3w<Uo}D(QOz$!$ZhpA4e9M+<)k6<XZMQaC6;u*1 z7$Xul8Hm;_8hibodNsI%mvQb;>e|~-Zcmqp%3I<9sy`Rl<AuYzXuvL+3DG4>fqF|Q z<7*aR!1nJcx4_vfS<}ZZ7)uaq9_**LkAOBV8Z3h?u|)=p3Pob@_gI6tMQxA!Mxa3> z5n5EI4wTkPEfHLd+G?jBErV|ixD!v*y_lL)vV-TcxSl1?f8p?+<NGu3*mreM|E`Pf z)6}@Sigrc|Y)LJx5JABXgc^%hU-31^Sx68O5mgOA)d#OZ#R|p*^}atlHs08N)Y0Q7 zA9YlI_quh-J<V46=;&znV3vp3M#JpLGiH)R=WHT{NKk7BPWk)CzBgTC)z9BNw%v9* zS0tBf(w@84&_89TYTA|b%OkzUcROL~M5lhe(e@p~8NG&-FG!7BQx-ZUS>v<YX6GhH z^89@36O793X{$Zz`a7?&+RdCZkB~LKURD#WG|7+k{qA&ItNW7{XKR?fr1IS=1bf@g z&bF_#^RZJ!(y@*U_ucpQGoM)6&I6(BYO^dEEgfUsvb(xh$jV-)v9dEOM|5Y|Fh3hc z=Q`C;<z-prXoWyl2YZbH`}PB|>JC=MrrJG}x)$}TeR|PiEX_Q?BIJNrdj9_KWECFh z{Jn<JqVGQlEN$Nbt~V%lfb6}oXk;&;*8AWf*$2g*_Qaiy7ad--jN5Z~(XTpFqGBPE z2vspu)=(Kkm8ZHpO_JW|n4KRP<-wsLzp2se?`RJt+p;v7YUFlTnlYay%q0n>?Bg-K zFZR0Oqerk~*M0U?X8eR#b!}_hCQbZY_%}cM=%3yHwln7eF8Lk5q2KTSd9Rp1RnjDN zU7b!s=k2q9b=2Q(t{=b|zdZNc%J<%!Bw>~7IT~r}3FqAJ-0?RnzX0%->oK4H^ke_6 z(xF$llBC^C6YcK0AuXqW^_%ZF>j{7}f90;DwQT=ZUg|kjS$f+rJwxZ?<LT6&T>n>B zJt_O+svzFeb`@>srCk;}(kpajuPZByo{aaqtmyZ3RlkrGm8b0-P48&b(Vq{f&$X8F zU}dtL*+Z%8Fb?A>K!T7MsEpu5@Ww`>kXZUz&Qz<(w!Eo3n@!!-Y|75O!H!lgwRtn$ z+Dyoa;E*8J+Pzu5Mc9idJo6WB`lDI1`jtJCbi8CcQkyO>L%AHnm-?OJ@A6@WMdU5s zvs#_pm)W5iN;%er-f+p>`(3afY)XD<F0Efq63Y2v_Lg8slaQViN^zPLf4bZ4ykq6i z$WNxe@j|L(Ge#av6SrPNv7s#domI)7wew~!!M-uK*(s(!f0tOD^y1dGo2*K8$8$dO zw@-UgnSutDs?yx~!QKzj>h~G%7p$lXMvA_U^-DidmNMqNX*;KR@Z=$gCHiRXH-vPO zX!l@cvRtPQrLMy`jHd(v5pe=4f-^=-Yt-39yLm3tja+tSIdfS<rW-kvS;lmpG8I*k z^y_%aE=k3C@5K)G71$5<A_~ua(;aW_xc2#_@$Xrlg>Mz)$M1ICpD04(>cS5<umugK zJ6Y(xUxNGd8~@_st<V0g`Dg5!oBy?`qB>ErrX^m6d~ciUPrdb~f4<-!0nY#V2Y+I2 zp4Yl8Sr@dBmT}~vb4MQBpM2}>7k}*;zxKU#y-xD0eLwWPUe(A_(X>&`&o_PXg^4D= z{o%hqWAnAI|L&QpdP1Y!|I|nR<Z1g2IJp?E($skxA<*y@&9Y>;s95Go+GWX5Rne|0 zMk~jVkL9uu7!2feVXay({!lbY=pC#~mN9cEb-}{wv{p?##r&nme$e@`3;mzdzW@0A zSmJ+IJ_L~kx0?Z{P^1Z+G-WQDG1E&k=Ch2MEM+>ibZkP`CKM7m47JJrtmpPdyznCY z*w6pv_`Cn=7p4ZkpZD{>JF-2w<~fqCI47V*uCq5RzvB<S`q9t5cVS>&{c8`NFw?hJ ziEu*dyN|WYUEhA~v6p}6NB_S)>!}NV{_gX8l{veW*)`IierS{@zVW$#c)=rs{Ga?E zcaA(X*}SH}ToNb><{tmn>h!B$``FumcV<xLslYq6K}mfe_Z1EAXjBzLm1Cr;XnRM~ zd793X2TvB1RO_((L8&)iKv7f$BZ}ID{=v$mDRYNXSN-H=kq+}eBOi^MBmJ=Fhk79V zUy;A?PS`8o06fY03;7y1BM)`*BB(@ffx;L{n`oIO%-TeIX+|eWq?0Bxmn8Izp)!`j z7`(9umnQ)At2qR`_}BlX(a!Sl&fk2+egiWAyzDnW)%w8yytcda_+tFnFaKWl?mzo) z2d?AI?`aYy!w3H84F`>za4<NhX;2dH$U`9aj=XXVdmo8}kHjDkJ|sa&QHf&Wy~O={ zU`z-HE0fqz97<h>aTrex3+fg%Xb^)pMk-?{t<^HI+DQ_+HqpW+(znL+tfj1F3Du!+ z2m>54QTRU%A*h6)Ru!v=4S^(h(%{K`AX85o0*MQup+SujWdH<`AW|FBGq83M5H%*0 z2P<QZ?;T2A#EE0@UG~n8ng9O$gVq0kYW`mL{O`#BLD&C-$`7)~a78eR7bDIXsjQ_E z(I{iETG&JiV<^Rl7tzR7h<IzG53=`_Sep*6wO`261OGR{xge@)M8v3y4N4M%rXkdO zg+>iQqH#(WMPmH=s2DeO4;p+A#sq)RGB!r^I9R#**^5La{UPS7*54Q9#{kNE=WD&C z(9--^e|_wL`3J85$<MFT0rL-jzG{qepmjKxrTK&U7w7MJKKsA^!SeT4|5M3-O7*ko z*#6ExK)zau?=-{_D=I=TA|AnuXfT2k6Pz)WCK7}YjY$*{2?N36|MNs)0PoePVuEU_ z8Z1O@ZwMM=vtb6tMWQMuMgm-TNej@p3(Aw0!RR5?br^?ns8CeUI&!F(K%D&p3L+AJ s8}&x03>pxP#z{s1#oFYMmkt2`KX8P&!CP8(DgXcg07*qoM6N<$f{ccxE&u=k literal 0 HcmV?d00001 diff --git a/readme.md b/readme.md index 50a66b4..cdde509 100644 --- a/readme.md +++ b/readme.md @@ -66,6 +66,10 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/dockur/windows) +##### Via a graphical installer: + +[![Download WinBoat](https://github.com/dockur/windows/raw/dev/.github/winboat.png)](https://winboat.app) + ## FAQ 💬 ### How do I use it? From 44dd2b67c8b7ca3af5b18826089dad0c2a5e49c4 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sat, 11 Oct 2025 17:33:02 +0200 Subject: [PATCH 257/290] docs: Update image link (#1468) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index cdde509..ed27dc3 100644 --- a/readme.md +++ b/readme.md @@ -68,7 +68,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ##### Via a graphical installer: -[![Download WinBoat](https://github.com/dockur/windows/raw/dev/.github/winboat.png)](https://winboat.app) +[![Download WinBoat](https://github.com/dockur/windows/raw/master/.github/winboat.png)](https://winboat.app) ## FAQ 💬 From 8846aad171a415697e8b5a17410907abf1899db4 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 12 Oct 2025 00:22:18 +0200 Subject: [PATCH 258/290] build: Run check for all files (#1469) Removed specific paths from pull request triggers. --- .github/workflows/test.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4903636..c275f1a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,12 +1,6 @@ on: workflow_dispatch: pull_request: - paths: - - '**/*.sh' - - '**/*.xml' - - '.github/workflows/test.yml' - - '.github/workflows/check.yml' - - 'Dockerfile' name: "Test" permissions: {} From 3c029582d64593851d36470046b2b83b1924d906 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 12 Oct 2025 02:03:16 +0200 Subject: [PATCH 259/290] build: Update QEMU base image version to v7.23 (#1470) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 686fb85..59ea59f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.22 / / +COPY --from=qemux/qemu:7.23 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" From 5e2ca4c1b6d822fdd2f4b4b7909e9d33ee19c25b Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 13 Oct 2025 15:06:21 +0200 Subject: [PATCH 260/290] build: Update QEMU base image to v7.24 (#1476) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 59ea59f..9fa65be 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.23 / / +COPY --from=qemux/qemu:7.24 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" From 70dce80aec8576e3cfeeb2a803c0bcc9a826f1c2 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 15 Oct 2025 13:15:31 +0200 Subject: [PATCH 261/290] docs: Readme (#1484) --- readme.md | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/readme.md b/readme.md index ed27dc3..4256727 100644 --- a/readme.md +++ b/readme.md @@ -160,7 +160,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I change the amount of CPU or RAM? - By default, the container will be allowed to use a maximum of 2 CPU cores and 4 GB of RAM. + By default, Windows will be allowed to use 2 CPU cores and 4 GB of RAM. If you want to adjust this, you can specify the desired amount using the following environment variables: @@ -172,9 +172,9 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I configure the username and password? - By default, a user called `Docker` is created during installation and its password is `admin`. + By default, a user called `Docker` is created and its password is `admin`. - If you want to use different credentials, you can configure them in your compose file (only before installation): + If you want to use different credentials during installation, you can configure them in your compose file: ```yaml environment: @@ -186,7 +186,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas By default, the English version of Windows will be downloaded. - But before installation you can add the `LANGUAGE` environment variable to your compose file, in order to specify an alternative language: + But you can add the `LANGUAGE` environment variable to your compose file, in order to specify an alternative language to be downloaded: ```yaml environment: @@ -197,7 +197,7 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas ### How do I select the keyboard layout? - If you want to use a keyboard layout or locale that is not the default for your selected language, you can add `KEYBOARD` and `REGION` variables like this (before installation): + If you want to use a keyboard layout or locale that is not the default for your selected language, you can add `KEYBOARD` and `REGION` variables like this: ```yaml environment: @@ -205,15 +205,6 @@ kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/mas KEYBOARD: "en-US" ``` -### How do I select the edition? - - Windows Server offers a minimalistic Core edition without a GUI. To select those non-standard editions, you can add a `EDITION` variable like this (before installation): - - ```yaml - environment: - EDITION: "core" - ``` - ### How do I install a custom image? In order to download an unsupported ISO image, specify its URL in the `VERSION` environment variable: From ab457abc3c6a12bbbfd6c6ffd9ce00e63cf500bc Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 15 Oct 2025 21:54:52 +0200 Subject: [PATCH 262/290] feat: Add custom .yml for Github Codespaces (#1486) --- .devcontainer.json | 2 +- .github/codespaces.yml | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 .github/codespaces.yml diff --git a/.devcontainer.json b/.devcontainer.json index 14d70b4..a7eeaf5 100644 --- a/.devcontainer.json +++ b/.devcontainer.json @@ -2,5 +2,5 @@ "name": "windows", "service": "windows", "forwardPorts": [8006], - "dockerComposeFile": "compose.yml" + "dockerComposeFile": ".github/codespaces.yml" } diff --git a/.github/codespaces.yml b/.github/codespaces.yml new file mode 100644 index 0000000..7aaba65 --- /dev/null +++ b/.github/codespaces.yml @@ -0,0 +1,22 @@ +services: + windows: + image: dockurr/windows + container_name: windows + environment: + VERSION: "11" + RAM_SIZE: "max" + DISK_SIZE: "max" + CPU_CORES: "max" + devices: + - /dev/kvm + - /dev/net/tun + cap_add: + - NET_ADMIN + ports: + - 8006:8006 + - 3389:3389/tcp + - 3389:3389/udp + volumes: + - ./windows:/storage + restart: on-failure + stop_grace_period: 2m From 8472d700dc2083bebdfdba8610072f21f7eb1a65 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 15 Oct 2025 23:47:29 +0200 Subject: [PATCH 263/290] feat: Improve Github Codespaces configuration (#1487) --- .devcontainer.json | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/.devcontainer.json b/.devcontainer.json index a7eeaf5..b70743f 100644 --- a/.devcontainer.json +++ b/.devcontainer.json @@ -1,6 +1,21 @@ { - "name": "windows", + "name": "Windows 11 Pro", "service": "windows", - "forwardPorts": [8006], + "containerEnv": { + "VERSION": "11" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, "dockerComposeFile": ".github/codespaces.yml" } From 0b0de7de142761383e68c80c8176c5056ff34d0e Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 16 Oct 2025 00:03:24 +0200 Subject: [PATCH 264/290] feat: Improve Github Codespaces configuration (#1488) --- .devcontainer.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.devcontainer.json b/.devcontainer.json index b70743f..3d8577f 100644 --- a/.devcontainer.json +++ b/.devcontainer.json @@ -2,7 +2,10 @@ "name": "Windows 11 Pro", "service": "windows", "containerEnv": { - "VERSION": "11" + "VERSION": "11", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" }, "forwardPorts": [8006], "portsAttributes": { From 42a149d7b91a329fc1a0fd7073b5ff3b78e5fe73 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Thu, 16 Oct 2025 10:54:06 +0200 Subject: [PATCH 265/290] feat: Make Windows version selectable in Codespaces (#1489) --- .../10/devcontainer.json | 6 ++--- .devcontainer/10e/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/10l/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/11e/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/11l/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/2003/devcontainer.json | 21 ++++++++++++++++ .devcontainer/2008/devcontainer.json | 21 ++++++++++++++++ .devcontainer/2012/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/2016/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/2019/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/2022/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/2025/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/2k/devcontainer.json | 21 ++++++++++++++++ .devcontainer/7u/devcontainer.json | 21 ++++++++++++++++ .devcontainer/7u32/devcontainer.json | 21 ++++++++++++++++ .devcontainer/8e/devcontainer.json | 24 +++++++++++++++++++ {.github => .devcontainer}/codespaces.yml | 0 .devcontainer/core11/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/nano11/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/tiny10/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/tiny11/devcontainer.json | 24 +++++++++++++++++++ .devcontainer/vu/devcontainer.json | 21 ++++++++++++++++ .devcontainer/vu32/devcontainer.json | 21 ++++++++++++++++ .devcontainer/xp/devcontainer.json | 21 ++++++++++++++++ .devcontainer/xp64/devcontainer.json | 21 ++++++++++++++++ 26 files changed, 552 insertions(+), 3 deletions(-) rename .devcontainer.json => .devcontainer/10/devcontainer.json (79%) create mode 100644 .devcontainer/10e/devcontainer.json create mode 100644 .devcontainer/10l/devcontainer.json create mode 100644 .devcontainer/11e/devcontainer.json create mode 100644 .devcontainer/11l/devcontainer.json create mode 100644 .devcontainer/2003/devcontainer.json create mode 100644 .devcontainer/2008/devcontainer.json create mode 100644 .devcontainer/2012/devcontainer.json create mode 100644 .devcontainer/2016/devcontainer.json create mode 100644 .devcontainer/2019/devcontainer.json create mode 100644 .devcontainer/2022/devcontainer.json create mode 100644 .devcontainer/2025/devcontainer.json create mode 100644 .devcontainer/2k/devcontainer.json create mode 100644 .devcontainer/7u/devcontainer.json create mode 100644 .devcontainer/7u32/devcontainer.json create mode 100644 .devcontainer/8e/devcontainer.json rename {.github => .devcontainer}/codespaces.yml (100%) create mode 100644 .devcontainer/core11/devcontainer.json create mode 100644 .devcontainer/devcontainer.json create mode 100644 .devcontainer/nano11/devcontainer.json create mode 100644 .devcontainer/tiny10/devcontainer.json create mode 100644 .devcontainer/tiny11/devcontainer.json create mode 100644 .devcontainer/vu/devcontainer.json create mode 100644 .devcontainer/vu32/devcontainer.json create mode 100644 .devcontainer/xp/devcontainer.json create mode 100644 .devcontainer/xp64/devcontainer.json diff --git a/.devcontainer.json b/.devcontainer/10/devcontainer.json similarity index 79% rename from .devcontainer.json rename to .devcontainer/10/devcontainer.json index 3d8577f..bdc023e 100644 --- a/.devcontainer.json +++ b/.devcontainer/10/devcontainer.json @@ -1,8 +1,8 @@ { - "name": "Windows 11 Pro", + "name": "Windows 10 Pro", "service": "windows", "containerEnv": { - "VERSION": "11", + "VERSION": "10", "RAM_SIZE": "max", "DISK_SIZE": "max", "CPU_CORES": "max" @@ -20,5 +20,5 @@ "hostRequirements": { "storage": "64gb" }, - "dockerComposeFile": ".github/codespaces.yml" + "dockerComposeFile": "../codespaces.yml" } diff --git a/.devcontainer/10e/devcontainer.json b/.devcontainer/10e/devcontainer.json new file mode 100644 index 0000000..e401fea --- /dev/null +++ b/.devcontainer/10e/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows 10 Enterprise", + "service": "windows", + "containerEnv": { + "VERSION": "10e", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/10l/devcontainer.json b/.devcontainer/10l/devcontainer.json new file mode 100644 index 0000000..25109bb --- /dev/null +++ b/.devcontainer/10l/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows 10 LTSC", + "service": "windows", + "containerEnv": { + "VERSION": "10l", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/11e/devcontainer.json b/.devcontainer/11e/devcontainer.json new file mode 100644 index 0000000..c67781a --- /dev/null +++ b/.devcontainer/11e/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows 11 Enterprise", + "service": "windows", + "containerEnv": { + "VERSION": "11e", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/11l/devcontainer.json b/.devcontainer/11l/devcontainer.json new file mode 100644 index 0000000..6cda36c --- /dev/null +++ b/.devcontainer/11l/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows 11 LTSC", + "service": "windows", + "containerEnv": { + "VERSION": "11l", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/2003/devcontainer.json b/.devcontainer/2003/devcontainer.json new file mode 100644 index 0000000..ffe7dc5 --- /dev/null +++ b/.devcontainer/2003/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Windows Server 2003", + "service": "windows", + "containerEnv": { + "VERSION": "2003", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/2008/devcontainer.json b/.devcontainer/2008/devcontainer.json new file mode 100644 index 0000000..5930e9c --- /dev/null +++ b/.devcontainer/2008/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Windows Server 2008 R2", + "service": "windows", + "containerEnv": { + "VERSION": "2008", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/2012/devcontainer.json b/.devcontainer/2012/devcontainer.json new file mode 100644 index 0000000..8d3519c --- /dev/null +++ b/.devcontainer/2012/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows Server 2012 R2", + "service": "windows", + "containerEnv": { + "VERSION": "2012", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/2016/devcontainer.json b/.devcontainer/2016/devcontainer.json new file mode 100644 index 0000000..2ede9d5 --- /dev/null +++ b/.devcontainer/2016/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows Server 2016", + "service": "windows", + "containerEnv": { + "VERSION": "2016", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/2019/devcontainer.json b/.devcontainer/2019/devcontainer.json new file mode 100644 index 0000000..68e2829 --- /dev/null +++ b/.devcontainer/2019/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows Server 2019", + "service": "windows", + "containerEnv": { + "VERSION": "2019", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/2022/devcontainer.json b/.devcontainer/2022/devcontainer.json new file mode 100644 index 0000000..5c66d43 --- /dev/null +++ b/.devcontainer/2022/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows Server 2022", + "service": "windows", + "containerEnv": { + "VERSION": "2022", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/2025/devcontainer.json b/.devcontainer/2025/devcontainer.json new file mode 100644 index 0000000..f5b2984 --- /dev/null +++ b/.devcontainer/2025/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows Server 2025", + "service": "windows", + "containerEnv": { + "VERSION": "2025", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/2k/devcontainer.json b/.devcontainer/2k/devcontainer.json new file mode 100644 index 0000000..2aa0e55 --- /dev/null +++ b/.devcontainer/2k/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Windows 2000 Professional", + "service": "windows", + "containerEnv": { + "VERSION": "2k", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/7u/devcontainer.json b/.devcontainer/7u/devcontainer.json new file mode 100644 index 0000000..ac4314c --- /dev/null +++ b/.devcontainer/7u/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Windows 7 Ultimate (64-bit)", + "service": "windows", + "containerEnv": { + "VERSION": "7u", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/7u32/devcontainer.json b/.devcontainer/7u32/devcontainer.json new file mode 100644 index 0000000..612ddc2 --- /dev/null +++ b/.devcontainer/7u32/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Windows 7 Ultimate (32-bit)", + "service": "windows", + "containerEnv": { + "VERSION": "7ux86", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/8e/devcontainer.json b/.devcontainer/8e/devcontainer.json new file mode 100644 index 0000000..d27348b --- /dev/null +++ b/.devcontainer/8e/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows 8.1 Enterprise", + "service": "windows", + "containerEnv": { + "VERSION": "8e", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.github/codespaces.yml b/.devcontainer/codespaces.yml similarity index 100% rename from .github/codespaces.yml rename to .devcontainer/codespaces.yml diff --git a/.devcontainer/core11/devcontainer.json b/.devcontainer/core11/devcontainer.json new file mode 100644 index 0000000..44ba15f --- /dev/null +++ b/.devcontainer/core11/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Tiny 11 Core", + "service": "windows", + "containerEnv": { + "VERSION": "core11", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..7a9ad96 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Windows 11 Pro", + "service": "windows", + "containerEnv": { + "VERSION": "11", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "codespaces.yml" +} diff --git a/.devcontainer/nano11/devcontainer.json b/.devcontainer/nano11/devcontainer.json new file mode 100644 index 0000000..a5ea04a --- /dev/null +++ b/.devcontainer/nano11/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Tiny 11 Nano", + "service": "windows", + "containerEnv": { + "VERSION": "nano11", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/tiny10/devcontainer.json b/.devcontainer/tiny10/devcontainer.json new file mode 100644 index 0000000..9b7dd6b --- /dev/null +++ b/.devcontainer/tiny10/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Tiny 10", + "service": "windows", + "containerEnv": { + "VERSION": "tiny10", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/tiny11/devcontainer.json b/.devcontainer/tiny11/devcontainer.json new file mode 100644 index 0000000..a659705 --- /dev/null +++ b/.devcontainer/tiny11/devcontainer.json @@ -0,0 +1,24 @@ +{ + "name": "Tiny 11", + "service": "windows", + "containerEnv": { + "VERSION": "tiny11", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/vu/devcontainer.json b/.devcontainer/vu/devcontainer.json new file mode 100644 index 0000000..2b9e871 --- /dev/null +++ b/.devcontainer/vu/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Windows Vista Ultimate (64-bit)", + "service": "windows", + "containerEnv": { + "VERSION": "vu", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/vu32/devcontainer.json b/.devcontainer/vu32/devcontainer.json new file mode 100644 index 0000000..7c5be1c --- /dev/null +++ b/.devcontainer/vu32/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Windows Vista Ultimate (32-bit)", + "service": "windows", + "containerEnv": { + "VERSION": "vux86", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/xp/devcontainer.json b/.devcontainer/xp/devcontainer.json new file mode 100644 index 0000000..d7a8dfd --- /dev/null +++ b/.devcontainer/xp/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Windows XP (32-bit)", + "service": "windows", + "containerEnv": { + "VERSION": "xp", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/xp64/devcontainer.json b/.devcontainer/xp64/devcontainer.json new file mode 100644 index 0000000..a03df31 --- /dev/null +++ b/.devcontainer/xp64/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Windows XP (64-bit)", + "service": "windows", + "containerEnv": { + "VERSION": "xp64", + "RAM_SIZE": "max", + "DISK_SIZE": "max", + "CPU_CORES": "max" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} From 0ab3198ded9678c96389e113d9dd9352d5039ae8 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 17 Oct 2025 10:05:12 +0200 Subject: [PATCH 266/290] build: Validate JSON and YML files (#1493) --- .dockerignore | 1 + .github/workflows/check.yml | 26 ++++++++++++++++++-------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/.dockerignore b/.dockerignore index 258778b..154d44a 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,5 @@ .dockerignore +.devcontainer .git .github .gitignore diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 788a2b0..9e9d278 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -7,19 +7,29 @@ jobs: name: shellcheck runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 - - name: Run ShellCheck + - + name: Checkout + uses: actions/checkout@v5 + - + name: Run ShellCheck uses: ludeeus/action-shellcheck@master env: SHELLCHECK_OPTS: -x --source-path=src -e SC1091 -e SC2001 -e SC2002 -e SC2034 -e SC2064 -e SC2153 -e SC2317 -e SC2028 - - name: Validate XML - uses: action-pack/valid-xml@v1 - with: - path: "assets" - file-endings: ".xml" - - name: Lint Dockerfile + - + name: Lint Dockerfile uses: hadolint/hadolint-action@v3.3.0 with: dockerfile: Dockerfile ignore: DL3006,DL3008 failure-threshold: warning + - + name: Validate XML + uses: action-pack/valid-xml@v1 + with: + path: "assets" + file-endings: ".xml" + - + name: Validate JSON and YML files + uses: GrantBirki/json-yaml-validate@v4 + with: + yaml_exclude_regex: ".*\\kubernetes\\.yml$" From f1ea8ee227c4943e1729610e64dd9681bcd2234a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 17 Oct 2025 12:53:48 +0200 Subject: [PATCH 267/290] build: Update VirtIO drivers to v1.9.48 (#1494) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 9fa65be..2a58348 100644 --- a/Dockerfile +++ b/Dockerfile @@ -27,7 +27,7 @@ RUN set -eu && \ COPY --chmod=755 ./src /run/ COPY --chmod=755 ./assets /run/assets -ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.47-0/virtio-win-1.9.47.tar.xz /var/drivers.txz +ADD --chmod=664 https://github.com/qemus/virtiso-whql/releases/download/v1.9.48-0/virtio-win-1.9.48.tar.xz /var/drivers.txz FROM dockurr/windows-arm:${VERSION_ARG} AS build-arm64 FROM build-${TARGETARCH} From c6a8c0b702d921caff883d839f8d79d6832c717f Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 17 Oct 2025 13:38:11 +0200 Subject: [PATCH 268/290] feat: Load memory module (#1495) --- src/entry.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/entry.sh b/src/entry.sh index 1b440a0..2929503 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -22,7 +22,9 @@ cd /run . boot.sh # Configure boot . proc.sh # Initialize processor . power.sh # Configure shutdown +. memory.sh # Check available memory . config.sh # Configure arguments +. finish.sh # Finish initialization trap - ERR From c997bf7765faba8ba497898cf289b34d45b97b1a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 17 Oct 2025 13:42:41 +0200 Subject: [PATCH 269/290] feat: Improve Github Codespaces configuration (#1497) --- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 7 ++---- .../devcontainer.json | 18 ++++++++++++++ .../devcontainer.json | 18 ++++++++++++++ .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 5 +--- .../devcontainer.json | 7 ++---- .../devcontainer.json | 7 ++---- .../devcontainer.json | 7 ++---- .devcontainer/210 - Tiny10/devcontainer.json | 21 ++++++++++++++++ .devcontainer/7u/devcontainer.json | 21 ---------------- .devcontainer/7u32/devcontainer.json | 21 ---------------- .devcontainer/codespaces.yml | 3 ++- .devcontainer/devcontainer.json | 5 +--- .devcontainer/nano11/devcontainer.json | 24 ------------------- .devcontainer/vu/devcontainer.json | 21 ---------------- .devcontainer/vu32/devcontainer.json | 21 ---------------- .devcontainer/xp64/devcontainer.json | 21 ---------------- 29 files changed, 82 insertions(+), 210 deletions(-) rename .devcontainer/{11e => 010 - Windows 11 Enterprise}/devcontainer.json (80%) rename .devcontainer/{11l => 020 - Windows 11 LTSC}/devcontainer.json (79%) rename .devcontainer/{10 => 030 - Windows 10 Pro}/devcontainer.json (79%) rename .devcontainer/{10e => 040 - Windows 10 Enterprise}/devcontainer.json (80%) rename .devcontainer/{10l => 050 - Windows 10 LTSC}/devcontainer.json (79%) rename .devcontainer/{8e => 060 - Windows 8.1 Enterprise}/devcontainer.json (80%) rename .devcontainer/{xp => 070 - Windows 7 Ultimate}/devcontainer.json (69%) create mode 100644 .devcontainer/080 - Windows Vista Ultimate/devcontainer.json create mode 100644 .devcontainer/090 - Windows XP Professional/devcontainer.json rename .devcontainer/{2k => 100 - Windows 2000 Professional}/devcontainer.json (77%) rename .devcontainer/{2025 => 110 - Windows Server 2025}/devcontainer.json (79%) rename .devcontainer/{2022 => 120 - Windows Server 2022}/devcontainer.json (79%) rename .devcontainer/{2019 => 130 - Windows Server 2019}/devcontainer.json (79%) rename .devcontainer/{2016 => 140 - Windows Server 2016}/devcontainer.json (79%) rename .devcontainer/{2012 => 150 - Windows Server 2012 R2}/devcontainer.json (79%) rename .devcontainer/{2008 => 160 - Windows Server 2008 R2}/devcontainer.json (77%) rename .devcontainer/{2003 => 170 - Windows Server 2003}/devcontainer.json (77%) rename .devcontainer/{tiny10 => 180 - Tiny11}/devcontainer.json (74%) rename .devcontainer/{tiny11 => 190 - Tiny11 Core}/devcontainer.json (74%) rename .devcontainer/{core11 => 200 - Tiny11 Nano}/devcontainer.json (73%) create mode 100644 .devcontainer/210 - Tiny10/devcontainer.json delete mode 100644 .devcontainer/7u/devcontainer.json delete mode 100644 .devcontainer/7u32/devcontainer.json delete mode 100644 .devcontainer/nano11/devcontainer.json delete mode 100644 .devcontainer/vu/devcontainer.json delete mode 100644 .devcontainer/vu32/devcontainer.json delete mode 100644 .devcontainer/xp64/devcontainer.json diff --git a/.devcontainer/11e/devcontainer.json b/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json similarity index 80% rename from .devcontainer/11e/devcontainer.json rename to .devcontainer/010 - Windows 11 Enterprise/devcontainer.json index c67781a..4e67f1a 100644 --- a/.devcontainer/11e/devcontainer.json +++ b/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows 11 Enterprise", "service": "windows", "containerEnv": { - "VERSION": "11e", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "11e" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/11l/devcontainer.json b/.devcontainer/020 - Windows 11 LTSC/devcontainer.json similarity index 79% rename from .devcontainer/11l/devcontainer.json rename to .devcontainer/020 - Windows 11 LTSC/devcontainer.json index 6cda36c..e93fbf1 100644 --- a/.devcontainer/11l/devcontainer.json +++ b/.devcontainer/020 - Windows 11 LTSC/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows 11 LTSC", "service": "windows", "containerEnv": { - "VERSION": "11l", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "11l" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/10/devcontainer.json b/.devcontainer/030 - Windows 10 Pro/devcontainer.json similarity index 79% rename from .devcontainer/10/devcontainer.json rename to .devcontainer/030 - Windows 10 Pro/devcontainer.json index bdc023e..573f6ab 100644 --- a/.devcontainer/10/devcontainer.json +++ b/.devcontainer/030 - Windows 10 Pro/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows 10 Pro", "service": "windows", "containerEnv": { - "VERSION": "10", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "10" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/10e/devcontainer.json b/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json similarity index 80% rename from .devcontainer/10e/devcontainer.json rename to .devcontainer/040 - Windows 10 Enterprise/devcontainer.json index e401fea..b5ef076 100644 --- a/.devcontainer/10e/devcontainer.json +++ b/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows 10 Enterprise", "service": "windows", "containerEnv": { - "VERSION": "10e", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "10e" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/10l/devcontainer.json b/.devcontainer/050 - Windows 10 LTSC/devcontainer.json similarity index 79% rename from .devcontainer/10l/devcontainer.json rename to .devcontainer/050 - Windows 10 LTSC/devcontainer.json index 25109bb..30ced2a 100644 --- a/.devcontainer/10l/devcontainer.json +++ b/.devcontainer/050 - Windows 10 LTSC/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows 10 LTSC", "service": "windows", "containerEnv": { - "VERSION": "10l", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "10l" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/8e/devcontainer.json b/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json similarity index 80% rename from .devcontainer/8e/devcontainer.json rename to .devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json index d27348b..41870d0 100644 --- a/.devcontainer/8e/devcontainer.json +++ b/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows 8.1 Enterprise", "service": "windows", "containerEnv": { - "VERSION": "8e", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "8e" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/xp/devcontainer.json b/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json similarity index 69% rename from .devcontainer/xp/devcontainer.json rename to .devcontainer/070 - Windows 7 Ultimate/devcontainer.json index d7a8dfd..ffaf504 100644 --- a/.devcontainer/xp/devcontainer.json +++ b/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json @@ -1,11 +1,8 @@ { - "name": "Windows XP (32-bit)", + "name": "Windows 7 Ultimate", "service": "windows", "containerEnv": { - "VERSION": "xp", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "7u" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json b/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json new file mode 100644 index 0000000..2cdfe89 --- /dev/null +++ b/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json @@ -0,0 +1,18 @@ +{ + "name": "Windows Vista Ultimate", + "service": "windows", + "containerEnv": { + "VERSION": "vu" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/090 - Windows XP Professional/devcontainer.json b/.devcontainer/090 - Windows XP Professional/devcontainer.json new file mode 100644 index 0000000..1e375ff --- /dev/null +++ b/.devcontainer/090 - Windows XP Professional/devcontainer.json @@ -0,0 +1,18 @@ +{ + "name": "Windows XP Professional", + "service": "windows", + "containerEnv": { + "VERSION": "xp" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/2k/devcontainer.json b/.devcontainer/100 - Windows 2000 Professional/devcontainer.json similarity index 77% rename from .devcontainer/2k/devcontainer.json rename to .devcontainer/100 - Windows 2000 Professional/devcontainer.json index 2aa0e55..9ee27cb 100644 --- a/.devcontainer/2k/devcontainer.json +++ b/.devcontainer/100 - Windows 2000 Professional/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows 2000 Professional", "service": "windows", "containerEnv": { - "VERSION": "2k", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "2k" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/2025/devcontainer.json b/.devcontainer/110 - Windows Server 2025/devcontainer.json similarity index 79% rename from .devcontainer/2025/devcontainer.json rename to .devcontainer/110 - Windows Server 2025/devcontainer.json index f5b2984..2ef30e8 100644 --- a/.devcontainer/2025/devcontainer.json +++ b/.devcontainer/110 - Windows Server 2025/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows Server 2025", "service": "windows", "containerEnv": { - "VERSION": "2025", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "2025" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/2022/devcontainer.json b/.devcontainer/120 - Windows Server 2022/devcontainer.json similarity index 79% rename from .devcontainer/2022/devcontainer.json rename to .devcontainer/120 - Windows Server 2022/devcontainer.json index 5c66d43..4994c5f 100644 --- a/.devcontainer/2022/devcontainer.json +++ b/.devcontainer/120 - Windows Server 2022/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows Server 2022", "service": "windows", "containerEnv": { - "VERSION": "2022", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "2022" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/2019/devcontainer.json b/.devcontainer/130 - Windows Server 2019/devcontainer.json similarity index 79% rename from .devcontainer/2019/devcontainer.json rename to .devcontainer/130 - Windows Server 2019/devcontainer.json index 68e2829..333902b 100644 --- a/.devcontainer/2019/devcontainer.json +++ b/.devcontainer/130 - Windows Server 2019/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows Server 2019", "service": "windows", "containerEnv": { - "VERSION": "2019", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "2019" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/2016/devcontainer.json b/.devcontainer/140 - Windows Server 2016/devcontainer.json similarity index 79% rename from .devcontainer/2016/devcontainer.json rename to .devcontainer/140 - Windows Server 2016/devcontainer.json index 2ede9d5..f611b12 100644 --- a/.devcontainer/2016/devcontainer.json +++ b/.devcontainer/140 - Windows Server 2016/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows Server 2016", "service": "windows", "containerEnv": { - "VERSION": "2016", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "2016" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/2012/devcontainer.json b/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json similarity index 79% rename from .devcontainer/2012/devcontainer.json rename to .devcontainer/150 - Windows Server 2012 R2/devcontainer.json index 8d3519c..d9d72f5 100644 --- a/.devcontainer/2012/devcontainer.json +++ b/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows Server 2012 R2", "service": "windows", "containerEnv": { - "VERSION": "2012", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "2012" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/2008/devcontainer.json b/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json similarity index 77% rename from .devcontainer/2008/devcontainer.json rename to .devcontainer/160 - Windows Server 2008 R2/devcontainer.json index 5930e9c..cca5f42 100644 --- a/.devcontainer/2008/devcontainer.json +++ b/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows Server 2008 R2", "service": "windows", "containerEnv": { - "VERSION": "2008", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "2008" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/2003/devcontainer.json b/.devcontainer/170 - Windows Server 2003/devcontainer.json similarity index 77% rename from .devcontainer/2003/devcontainer.json rename to .devcontainer/170 - Windows Server 2003/devcontainer.json index ffe7dc5..14eb337 100644 --- a/.devcontainer/2003/devcontainer.json +++ b/.devcontainer/170 - Windows Server 2003/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows Server 2003", "service": "windows", "containerEnv": { - "VERSION": "2003", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "2003" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/tiny10/devcontainer.json b/.devcontainer/180 - Tiny11/devcontainer.json similarity index 74% rename from .devcontainer/tiny10/devcontainer.json rename to .devcontainer/180 - Tiny11/devcontainer.json index 9b7dd6b..0ed1384 100644 --- a/.devcontainer/tiny10/devcontainer.json +++ b/.devcontainer/180 - Tiny11/devcontainer.json @@ -1,11 +1,8 @@ { - "name": "Tiny 10", + "name": "Tiny11", "service": "windows", "containerEnv": { - "VERSION": "tiny10", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "tiny11" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/tiny11/devcontainer.json b/.devcontainer/190 - Tiny11 Core/devcontainer.json similarity index 74% rename from .devcontainer/tiny11/devcontainer.json rename to .devcontainer/190 - Tiny11 Core/devcontainer.json index a659705..1873cbc 100644 --- a/.devcontainer/tiny11/devcontainer.json +++ b/.devcontainer/190 - Tiny11 Core/devcontainer.json @@ -1,11 +1,8 @@ { - "name": "Tiny 11", + "name": "Tiny11 Core", "service": "windows", "containerEnv": { - "VERSION": "tiny11", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "core11" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/core11/devcontainer.json b/.devcontainer/200 - Tiny11 Nano/devcontainer.json similarity index 73% rename from .devcontainer/core11/devcontainer.json rename to .devcontainer/200 - Tiny11 Nano/devcontainer.json index 44ba15f..f05b707 100644 --- a/.devcontainer/core11/devcontainer.json +++ b/.devcontainer/200 - Tiny11 Nano/devcontainer.json @@ -1,11 +1,8 @@ { - "name": "Tiny 11 Core", + "name": "Tiny11 Nano", "service": "windows", "containerEnv": { - "VERSION": "core11", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "nano11" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/210 - Tiny10/devcontainer.json b/.devcontainer/210 - Tiny10/devcontainer.json new file mode 100644 index 0000000..5039698 --- /dev/null +++ b/.devcontainer/210 - Tiny10/devcontainer.json @@ -0,0 +1,21 @@ +{ + "name": "Tiny10", + "service": "windows", + "containerEnv": { + "VERSION": "tiny10" + }, + "forwardPorts": [8006], + "portsAttributes": { + "8006": { + "label": "Web", + "onAutoForward": "openBrowser" + } + }, + "otherPortsAttributes": { + "onAutoForward": "silent" + }, + "hostRequirements": { + "storage": "64gb" + }, + "dockerComposeFile": "../codespaces.yml" +} diff --git a/.devcontainer/7u/devcontainer.json b/.devcontainer/7u/devcontainer.json deleted file mode 100644 index ac4314c..0000000 --- a/.devcontainer/7u/devcontainer.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "Windows 7 Ultimate (64-bit)", - "service": "windows", - "containerEnv": { - "VERSION": "7u", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" - }, - "forwardPorts": [8006], - "portsAttributes": { - "8006": { - "label": "Web", - "onAutoForward": "openBrowser" - } - }, - "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" -} diff --git a/.devcontainer/7u32/devcontainer.json b/.devcontainer/7u32/devcontainer.json deleted file mode 100644 index 612ddc2..0000000 --- a/.devcontainer/7u32/devcontainer.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "Windows 7 Ultimate (32-bit)", - "service": "windows", - "containerEnv": { - "VERSION": "7ux86", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" - }, - "forwardPorts": [8006], - "portsAttributes": { - "8006": { - "label": "Web", - "onAutoForward": "openBrowser" - } - }, - "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" -} diff --git a/.devcontainer/codespaces.yml b/.devcontainer/codespaces.yml index 7aaba65..f9682d1 100644 --- a/.devcontainer/codespaces.yml +++ b/.devcontainer/codespaces.yml @@ -4,7 +4,8 @@ services: container_name: windows environment: VERSION: "11" - RAM_SIZE: "max" + ALLOCATE: "Y" + RAM_SIZE: "half" DISK_SIZE: "max" CPU_CORES: "max" devices: diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 7a9ad96..5de96d5 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -2,10 +2,7 @@ "name": "Windows 11 Pro", "service": "windows", "containerEnv": { - "VERSION": "11", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" + "VERSION": "11" }, "forwardPorts": [8006], "portsAttributes": { diff --git a/.devcontainer/nano11/devcontainer.json b/.devcontainer/nano11/devcontainer.json deleted file mode 100644 index a5ea04a..0000000 --- a/.devcontainer/nano11/devcontainer.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "Tiny 11 Nano", - "service": "windows", - "containerEnv": { - "VERSION": "nano11", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" - }, - "forwardPorts": [8006], - "portsAttributes": { - "8006": { - "label": "Web", - "onAutoForward": "openBrowser" - } - }, - "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" -} diff --git a/.devcontainer/vu/devcontainer.json b/.devcontainer/vu/devcontainer.json deleted file mode 100644 index 2b9e871..0000000 --- a/.devcontainer/vu/devcontainer.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "Windows Vista Ultimate (64-bit)", - "service": "windows", - "containerEnv": { - "VERSION": "vu", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" - }, - "forwardPorts": [8006], - "portsAttributes": { - "8006": { - "label": "Web", - "onAutoForward": "openBrowser" - } - }, - "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" -} diff --git a/.devcontainer/vu32/devcontainer.json b/.devcontainer/vu32/devcontainer.json deleted file mode 100644 index 7c5be1c..0000000 --- a/.devcontainer/vu32/devcontainer.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "Windows Vista Ultimate (32-bit)", - "service": "windows", - "containerEnv": { - "VERSION": "vux86", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" - }, - "forwardPorts": [8006], - "portsAttributes": { - "8006": { - "label": "Web", - "onAutoForward": "openBrowser" - } - }, - "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" -} diff --git a/.devcontainer/xp64/devcontainer.json b/.devcontainer/xp64/devcontainer.json deleted file mode 100644 index a03df31..0000000 --- a/.devcontainer/xp64/devcontainer.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "Windows XP (64-bit)", - "service": "windows", - "containerEnv": { - "VERSION": "xp64", - "RAM_SIZE": "max", - "DISK_SIZE": "max", - "CPU_CORES": "max" - }, - "forwardPorts": [8006], - "portsAttributes": { - "8006": { - "label": "Web", - "onAutoForward": "openBrowser" - } - }, - "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" -} From 6f84823117bd5e79b94a69854e378ba1a0bce43d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 17 Oct 2025 13:45:46 +0200 Subject: [PATCH 270/290] build: Update QEMU base image version to v7.25 (#1496) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 2a58348..1f8a231 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.24 / / +COPY --from=qemux/qemu:7.25 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" From b998cd4c7fbee6d8e1be74024b5004c02d5cde7a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 17 Oct 2025 19:03:03 +0200 Subject: [PATCH 271/290] fix: Remove version variable in Codespaces (#1500) --- .devcontainer/codespaces.yml | 1 - .devcontainer/devcontainer.json | 3 --- 2 files changed, 4 deletions(-) diff --git a/.devcontainer/codespaces.yml b/.devcontainer/codespaces.yml index f9682d1..02c57be 100644 --- a/.devcontainer/codespaces.yml +++ b/.devcontainer/codespaces.yml @@ -3,7 +3,6 @@ services: image: dockurr/windows container_name: windows environment: - VERSION: "11" ALLOCATE: "Y" RAM_SIZE: "half" DISK_SIZE: "max" diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 5de96d5..9772d1c 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -14,8 +14,5 @@ "otherPortsAttributes": { "onAutoForward": "silent" }, - "hostRequirements": { - "storage": "64gb" - }, "dockerComposeFile": "codespaces.yml" } From 10449a3d2968ae07db4567bae5e2f4fe29689829 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 19 Oct 2025 01:31:23 +0200 Subject: [PATCH 272/290] feat: Improve Github Codespaces configuration (#1506) --- .../010 - Windows 11 Enterprise/devcontainer.json | 8 +++----- .devcontainer/020 - Windows 11 LTSC/devcontainer.json | 8 +++----- .devcontainer/030 - Windows 10 Pro/devcontainer.json | 8 +++----- .../040 - Windows 10 Enterprise/devcontainer.json | 8 +++----- .devcontainer/050 - Windows 10 LTSC/devcontainer.json | 8 +++----- .../060 - Windows 8.1 Enterprise/devcontainer.json | 8 +++----- .devcontainer/070 - Windows 7 Ultimate/devcontainer.json | 7 ++++--- .../080 - Windows Vista Ultimate/devcontainer.json | 7 ++++--- .../090 - Windows XP Professional/devcontainer.json | 7 ++++--- .../100 - Windows 2000 Professional/devcontainer.json | 7 ++++--- .devcontainer/110 - Windows Server 2025/devcontainer.json | 8 +++----- .devcontainer/120 - Windows Server 2022/devcontainer.json | 8 +++----- .devcontainer/130 - Windows Server 2019/devcontainer.json | 8 +++----- .devcontainer/140 - Windows Server 2016/devcontainer.json | 8 +++----- .../150 - Windows Server 2012 R2/devcontainer.json | 8 +++----- .../160 - Windows Server 2008 R2/devcontainer.json | 7 ++++--- .devcontainer/170 - Windows Server 2003/devcontainer.json | 7 ++++--- .devcontainer/180 - Tiny11/devcontainer.json | 8 +++----- .devcontainer/190 - Tiny11 Core/devcontainer.json | 8 +++----- .devcontainer/200 - Tiny11 Nano/devcontainer.json | 8 +++----- .devcontainer/210 - Tiny10/devcontainer.json | 8 +++----- .devcontainer/devcontainer.json | 7 ++++--- 22 files changed, 73 insertions(+), 96 deletions(-) diff --git a/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json b/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json index 4e67f1a..0c80313 100644 --- a/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json +++ b/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/020 - Windows 11 LTSC/devcontainer.json b/.devcontainer/020 - Windows 11 LTSC/devcontainer.json index e93fbf1..07a560e 100644 --- a/.devcontainer/020 - Windows 11 LTSC/devcontainer.json +++ b/.devcontainer/020 - Windows 11 LTSC/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/030 - Windows 10 Pro/devcontainer.json b/.devcontainer/030 - Windows 10 Pro/devcontainer.json index 573f6ab..579209b 100644 --- a/.devcontainer/030 - Windows 10 Pro/devcontainer.json +++ b/.devcontainer/030 - Windows 10 Pro/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json b/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json index b5ef076..891be73 100644 --- a/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json +++ b/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/050 - Windows 10 LTSC/devcontainer.json b/.devcontainer/050 - Windows 10 LTSC/devcontainer.json index 30ced2a..d18b867 100644 --- a/.devcontainer/050 - Windows 10 LTSC/devcontainer.json +++ b/.devcontainer/050 - Windows 10 LTSC/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json b/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json index 41870d0..77debb3 100644 --- a/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json +++ b/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json b/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json index ffaf504..b6da3da 100644 --- a/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json +++ b/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json @@ -12,7 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" + "onAutoForward": "ignore" + }, + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json b/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json index 2cdfe89..1b907fe 100644 --- a/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json +++ b/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json @@ -12,7 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" + "onAutoForward": "ignore" + }, + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/090 - Windows XP Professional/devcontainer.json b/.devcontainer/090 - Windows XP Professional/devcontainer.json index 1e375ff..560ad6b 100644 --- a/.devcontainer/090 - Windows XP Professional/devcontainer.json +++ b/.devcontainer/090 - Windows XP Professional/devcontainer.json @@ -12,7 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" + "onAutoForward": "ignore" + }, + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/100 - Windows 2000 Professional/devcontainer.json b/.devcontainer/100 - Windows 2000 Professional/devcontainer.json index 9ee27cb..7faee4b 100644 --- a/.devcontainer/100 - Windows 2000 Professional/devcontainer.json +++ b/.devcontainer/100 - Windows 2000 Professional/devcontainer.json @@ -12,7 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" + "onAutoForward": "ignore" + }, + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/110 - Windows Server 2025/devcontainer.json b/.devcontainer/110 - Windows Server 2025/devcontainer.json index 2ef30e8..547c1ac 100644 --- a/.devcontainer/110 - Windows Server 2025/devcontainer.json +++ b/.devcontainer/110 - Windows Server 2025/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/120 - Windows Server 2022/devcontainer.json b/.devcontainer/120 - Windows Server 2022/devcontainer.json index 4994c5f..a490a66 100644 --- a/.devcontainer/120 - Windows Server 2022/devcontainer.json +++ b/.devcontainer/120 - Windows Server 2022/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/130 - Windows Server 2019/devcontainer.json b/.devcontainer/130 - Windows Server 2019/devcontainer.json index 333902b..fbcd4bf 100644 --- a/.devcontainer/130 - Windows Server 2019/devcontainer.json +++ b/.devcontainer/130 - Windows Server 2019/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/140 - Windows Server 2016/devcontainer.json b/.devcontainer/140 - Windows Server 2016/devcontainer.json index f611b12..eb48544 100644 --- a/.devcontainer/140 - Windows Server 2016/devcontainer.json +++ b/.devcontainer/140 - Windows Server 2016/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json b/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json index d9d72f5..c2dd726 100644 --- a/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json +++ b/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json b/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json index cca5f42..2f5d724 100644 --- a/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json +++ b/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json @@ -12,7 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" + "onAutoForward": "ignore" + }, + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/170 - Windows Server 2003/devcontainer.json b/.devcontainer/170 - Windows Server 2003/devcontainer.json index 14eb337..f06440f 100644 --- a/.devcontainer/170 - Windows Server 2003/devcontainer.json +++ b/.devcontainer/170 - Windows Server 2003/devcontainer.json @@ -12,7 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "../codespaces.yml" + "onAutoForward": "ignore" + }, + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/180 - Tiny11/devcontainer.json b/.devcontainer/180 - Tiny11/devcontainer.json index 0ed1384..cf91e35 100644 --- a/.devcontainer/180 - Tiny11/devcontainer.json +++ b/.devcontainer/180 - Tiny11/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/190 - Tiny11 Core/devcontainer.json b/.devcontainer/190 - Tiny11 Core/devcontainer.json index 1873cbc..969072d 100644 --- a/.devcontainer/190 - Tiny11 Core/devcontainer.json +++ b/.devcontainer/190 - Tiny11 Core/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/200 - Tiny11 Nano/devcontainer.json b/.devcontainer/200 - Tiny11 Nano/devcontainer.json index f05b707..cb35030 100644 --- a/.devcontainer/200 - Tiny11 Nano/devcontainer.json +++ b/.devcontainer/200 - Tiny11 Nano/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/210 - Tiny10/devcontainer.json b/.devcontainer/210 - Tiny10/devcontainer.json index 5039698..2111084 100644 --- a/.devcontainer/210 - Tiny10/devcontainer.json +++ b/.devcontainer/210 - Tiny10/devcontainer.json @@ -12,10 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" + "onAutoForward": "ignore" }, - "hostRequirements": { - "storage": "64gb" - }, - "dockerComposeFile": "../codespaces.yml" + "dockerComposeFile": "../codespaces.yml", + "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 9772d1c..533b39e 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -12,7 +12,8 @@ } }, "otherPortsAttributes": { - "onAutoForward": "silent" - }, - "dockerComposeFile": "codespaces.yml" + "onAutoForward": "ignore" + }, + "dockerComposeFile": "codespaces.yml", + "initializeCommand": "docker system prune --all --force" } From c3ba25bfb7f658f5a93ac19095446fd2780fc7b4 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 19 Oct 2025 10:50:46 +0200 Subject: [PATCH 273/290] feat: Improve Github Codespaces configuration (#1510) --- .devcontainer/010 - Windows 11 Enterprise/devcontainer.json | 4 ++-- .devcontainer/020 - Windows 11 LTSC/devcontainer.json | 4 ++-- .devcontainer/030 - Windows 10 Pro/devcontainer.json | 4 ++-- .devcontainer/040 - Windows 10 Enterprise/devcontainer.json | 4 ++-- .devcontainer/050 - Windows 10 LTSC/devcontainer.json | 4 ++-- .../060 - Windows 8.1 Enterprise/devcontainer.json | 4 ++-- .devcontainer/070 - Windows 7 Ultimate/devcontainer.json | 4 ++-- .../080 - Windows Vista Ultimate/devcontainer.json | 4 ++-- .../090 - Windows XP Professional/devcontainer.json | 4 ++-- .../100 - Windows 2000 Professional/devcontainer.json | 4 ++-- .devcontainer/110 - Windows Server 2025/devcontainer.json | 4 ++-- .devcontainer/120 - Windows Server 2022/devcontainer.json | 4 ++-- .devcontainer/130 - Windows Server 2019/devcontainer.json | 4 ++-- .devcontainer/140 - Windows Server 2016/devcontainer.json | 4 ++-- .../150 - Windows Server 2012 R2/devcontainer.json | 4 ++-- .../160 - Windows Server 2008 R2/devcontainer.json | 4 ++-- .devcontainer/170 - Windows Server 2003/devcontainer.json | 4 ++-- .devcontainer/180 - Tiny11/devcontainer.json | 4 ++-- .devcontainer/190 - Tiny11 Core/devcontainer.json | 4 ++-- .devcontainer/200 - Tiny11 Nano/devcontainer.json | 4 ++-- .devcontainer/210 - Tiny10/devcontainer.json | 4 ++-- .devcontainer/codespaces.yml | 3 +-- .devcontainer/devcontainer.json | 6 +++--- 23 files changed, 46 insertions(+), 47 deletions(-) diff --git a/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json b/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json index 0c80313..a5ddea1 100644 --- a/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json +++ b/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "11e" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/020 - Windows 11 LTSC/devcontainer.json b/.devcontainer/020 - Windows 11 LTSC/devcontainer.json index 07a560e..eef73ca 100644 --- a/.devcontainer/020 - Windows 11 LTSC/devcontainer.json +++ b/.devcontainer/020 - Windows 11 LTSC/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "11l" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/030 - Windows 10 Pro/devcontainer.json b/.devcontainer/030 - Windows 10 Pro/devcontainer.json index 579209b..4a37735 100644 --- a/.devcontainer/030 - Windows 10 Pro/devcontainer.json +++ b/.devcontainer/030 - Windows 10 Pro/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "10" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json b/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json index 891be73..14f1ce6 100644 --- a/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json +++ b/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "10e" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/050 - Windows 10 LTSC/devcontainer.json b/.devcontainer/050 - Windows 10 LTSC/devcontainer.json index d18b867..d5755e9 100644 --- a/.devcontainer/050 - Windows 10 LTSC/devcontainer.json +++ b/.devcontainer/050 - Windows 10 LTSC/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "10l" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json b/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json index 77debb3..ec1ed4d 100644 --- a/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json +++ b/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "8e" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json b/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json index b6da3da..0ad77d6 100644 --- a/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json +++ b/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "7u" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json b/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json index 1b907fe..e8514f8 100644 --- a/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json +++ b/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "vu" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/090 - Windows XP Professional/devcontainer.json b/.devcontainer/090 - Windows XP Professional/devcontainer.json index 560ad6b..43322dc 100644 --- a/.devcontainer/090 - Windows XP Professional/devcontainer.json +++ b/.devcontainer/090 - Windows XP Professional/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "xp" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/100 - Windows 2000 Professional/devcontainer.json b/.devcontainer/100 - Windows 2000 Professional/devcontainer.json index 7faee4b..c730760 100644 --- a/.devcontainer/100 - Windows 2000 Professional/devcontainer.json +++ b/.devcontainer/100 - Windows 2000 Professional/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "2k" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/110 - Windows Server 2025/devcontainer.json b/.devcontainer/110 - Windows Server 2025/devcontainer.json index 547c1ac..73e5edd 100644 --- a/.devcontainer/110 - Windows Server 2025/devcontainer.json +++ b/.devcontainer/110 - Windows Server 2025/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "2025" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/120 - Windows Server 2022/devcontainer.json b/.devcontainer/120 - Windows Server 2022/devcontainer.json index a490a66..4586bf8 100644 --- a/.devcontainer/120 - Windows Server 2022/devcontainer.json +++ b/.devcontainer/120 - Windows Server 2022/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "2022" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/130 - Windows Server 2019/devcontainer.json b/.devcontainer/130 - Windows Server 2019/devcontainer.json index fbcd4bf..9bc29ff 100644 --- a/.devcontainer/130 - Windows Server 2019/devcontainer.json +++ b/.devcontainer/130 - Windows Server 2019/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "2019" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/140 - Windows Server 2016/devcontainer.json b/.devcontainer/140 - Windows Server 2016/devcontainer.json index eb48544..94629c4 100644 --- a/.devcontainer/140 - Windows Server 2016/devcontainer.json +++ b/.devcontainer/140 - Windows Server 2016/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "2016" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json b/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json index c2dd726..bd12659 100644 --- a/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json +++ b/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "2012" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json b/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json index 2f5d724..0af33f4 100644 --- a/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json +++ b/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "2008" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/170 - Windows Server 2003/devcontainer.json b/.devcontainer/170 - Windows Server 2003/devcontainer.json index f06440f..f02be87 100644 --- a/.devcontainer/170 - Windows Server 2003/devcontainer.json +++ b/.devcontainer/170 - Windows Server 2003/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "2003" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/180 - Tiny11/devcontainer.json b/.devcontainer/180 - Tiny11/devcontainer.json index cf91e35..1224be1 100644 --- a/.devcontainer/180 - Tiny11/devcontainer.json +++ b/.devcontainer/180 - Tiny11/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "tiny11" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/190 - Tiny11 Core/devcontainer.json b/.devcontainer/190 - Tiny11 Core/devcontainer.json index 969072d..f928c24 100644 --- a/.devcontainer/190 - Tiny11 Core/devcontainer.json +++ b/.devcontainer/190 - Tiny11 Core/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "core11" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/200 - Tiny11 Nano/devcontainer.json b/.devcontainer/200 - Tiny11 Nano/devcontainer.json index cb35030..e7afeae 100644 --- a/.devcontainer/200 - Tiny11 Nano/devcontainer.json +++ b/.devcontainer/200 - Tiny11 Nano/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "nano11" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/210 - Tiny10/devcontainer.json b/.devcontainer/210 - Tiny10/devcontainer.json index 2111084..4f39fe0 100644 --- a/.devcontainer/210 - Tiny10/devcontainer.json +++ b/.devcontainer/210 - Tiny10/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "tiny10" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" }, "dockerComposeFile": "../codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } diff --git a/.devcontainer/codespaces.yml b/.devcontainer/codespaces.yml index 02c57be..85e3f64 100644 --- a/.devcontainer/codespaces.yml +++ b/.devcontainer/codespaces.yml @@ -1,9 +1,8 @@ services: windows: - image: dockurr/windows container_name: windows + image: ghcr.io/dockur/windows environment: - ALLOCATE: "Y" RAM_SIZE: "half" DISK_SIZE: "max" CPU_CORES: "max" diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 533b39e..10cf271 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -4,16 +4,16 @@ "containerEnv": { "VERSION": "11" }, - "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", - "onAutoForward": "openBrowser" + "onAutoForward": "notify" } }, "otherPortsAttributes": { "onAutoForward": "ignore" - }, + }, "dockerComposeFile": "codespaces.yml", + "workspaceFolder": "/workspaces/windows", "initializeCommand": "docker system prune --all --force" } From 4e0a29605befce06cef110ae41141f2506f5d3c5 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 19 Oct 2025 11:08:57 +0200 Subject: [PATCH 274/290] feat: Display extraction progress (#1511) --- src/install.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/install.sh b/src/install.sh index 50cf7ea..a9cbb2f 100644 --- a/src/install.sh +++ b/src/install.sh @@ -460,11 +460,15 @@ extractImage() { fi rm -rf "$dir" + /run/progress.sh "$dir" "$size" "$msg ([P])..." & if ! 7z x "$iso" -o"$dir" > /dev/null; then + fKill "progress.sh" error "Failed to extract ISO file: $iso" && return 1 fi + fKill "progress.sh" + if [[ "${UNPACK:-}" != [Yy1]* ]]; then LABEL=$(isoinfo -d -i "$iso" | sed -n 's/Volume id: //p') @@ -1095,6 +1099,8 @@ buildImage() { error "Not enough free space in $STORAGE, have $space_gb available but need at least $size_gb." && return 1 fi + /run/progress.sh "$out" "$size" "$msg ([P])..." & + if [[ "${BOOT_MODE,,}" != "windows_legacy" ]]; then genisoimage -o "$out" -b "$ETFS" -no-emul-boot -c "$cat" -iso-level 4 -J -l -D -N -joliet-long -relaxed-filenames -V "${LABEL::30}" \ @@ -1115,6 +1121,8 @@ buildImage() { fi + fKill "progress.sh" + if [ -n "$failed" ]; then [ -s "$log" ] && echo "$(<"$log")" error "Failed to build image!" && return 1 From 0caa4d76b8784a2b15fd9ffffed21f030779c55d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 19 Oct 2025 12:49:32 +0200 Subject: [PATCH 275/290] feat: Improve Github Codespaces configuration (#1512) --- .devcontainer/010 - Windows 11 Enterprise/devcontainer.json | 3 ++- .devcontainer/020 - Windows 11 LTSC/devcontainer.json | 3 ++- .devcontainer/030 - Windows 10 Pro/devcontainer.json | 3 ++- .devcontainer/040 - Windows 10 Enterprise/devcontainer.json | 3 ++- .devcontainer/050 - Windows 10 LTSC/devcontainer.json | 3 ++- .devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json | 3 ++- .devcontainer/070 - Windows 7 Ultimate/devcontainer.json | 3 ++- .devcontainer/080 - Windows Vista Ultimate/devcontainer.json | 3 ++- .devcontainer/090 - Windows XP Professional/devcontainer.json | 3 ++- .../100 - Windows 2000 Professional/devcontainer.json | 3 ++- .devcontainer/110 - Windows Server 2025/devcontainer.json | 3 ++- .devcontainer/120 - Windows Server 2022/devcontainer.json | 3 ++- .devcontainer/130 - Windows Server 2019/devcontainer.json | 3 ++- .devcontainer/140 - Windows Server 2016/devcontainer.json | 3 ++- .devcontainer/150 - Windows Server 2012 R2/devcontainer.json | 3 ++- .devcontainer/160 - Windows Server 2008 R2/devcontainer.json | 3 ++- .devcontainer/170 - Windows Server 2003/devcontainer.json | 3 ++- .devcontainer/180 - Tiny11/devcontainer.json | 3 ++- .devcontainer/190 - Tiny11 Core/devcontainer.json | 3 ++- .devcontainer/200 - Tiny11 Nano/devcontainer.json | 3 ++- .devcontainer/210 - Tiny10/devcontainer.json | 3 ++- .devcontainer/devcontainer.json | 1 + 22 files changed, 43 insertions(+), 21 deletions(-) diff --git a/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json b/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json index a5ddea1..cc0e5ae 100644 --- a/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json +++ b/.devcontainer/010 - Windows 11 Enterprise/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "11e" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/020 - Windows 11 LTSC/devcontainer.json b/.devcontainer/020 - Windows 11 LTSC/devcontainer.json index eef73ca..23e54ff 100644 --- a/.devcontainer/020 - Windows 11 LTSC/devcontainer.json +++ b/.devcontainer/020 - Windows 11 LTSC/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "11l" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/030 - Windows 10 Pro/devcontainer.json b/.devcontainer/030 - Windows 10 Pro/devcontainer.json index 4a37735..c5a647b 100644 --- a/.devcontainer/030 - Windows 10 Pro/devcontainer.json +++ b/.devcontainer/030 - Windows 10 Pro/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "10" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json b/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json index 14f1ce6..1466e11 100644 --- a/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json +++ b/.devcontainer/040 - Windows 10 Enterprise/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "10e" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/050 - Windows 10 LTSC/devcontainer.json b/.devcontainer/050 - Windows 10 LTSC/devcontainer.json index d5755e9..dfc8f5c 100644 --- a/.devcontainer/050 - Windows 10 LTSC/devcontainer.json +++ b/.devcontainer/050 - Windows 10 LTSC/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "10l" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json b/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json index ec1ed4d..e58f7ad 100644 --- a/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json +++ b/.devcontainer/060 - Windows 8.1 Enterprise/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "8e" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json b/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json index 0ad77d6..85878f0 100644 --- a/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json +++ b/.devcontainer/070 - Windows 7 Ultimate/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "7u" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json b/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json index e8514f8..b99c942 100644 --- a/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json +++ b/.devcontainer/080 - Windows Vista Ultimate/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "vu" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/090 - Windows XP Professional/devcontainer.json b/.devcontainer/090 - Windows XP Professional/devcontainer.json index 43322dc..a2c51c4 100644 --- a/.devcontainer/090 - Windows XP Professional/devcontainer.json +++ b/.devcontainer/090 - Windows XP Professional/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "xp" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/100 - Windows 2000 Professional/devcontainer.json b/.devcontainer/100 - Windows 2000 Professional/devcontainer.json index c730760..e5fab13 100644 --- a/.devcontainer/100 - Windows 2000 Professional/devcontainer.json +++ b/.devcontainer/100 - Windows 2000 Professional/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "2k" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/110 - Windows Server 2025/devcontainer.json b/.devcontainer/110 - Windows Server 2025/devcontainer.json index 73e5edd..96089cc 100644 --- a/.devcontainer/110 - Windows Server 2025/devcontainer.json +++ b/.devcontainer/110 - Windows Server 2025/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "2025" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/120 - Windows Server 2022/devcontainer.json b/.devcontainer/120 - Windows Server 2022/devcontainer.json index 4586bf8..9897a67 100644 --- a/.devcontainer/120 - Windows Server 2022/devcontainer.json +++ b/.devcontainer/120 - Windows Server 2022/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "2022" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/130 - Windows Server 2019/devcontainer.json b/.devcontainer/130 - Windows Server 2019/devcontainer.json index 9bc29ff..9903599 100644 --- a/.devcontainer/130 - Windows Server 2019/devcontainer.json +++ b/.devcontainer/130 - Windows Server 2019/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "2019" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/140 - Windows Server 2016/devcontainer.json b/.devcontainer/140 - Windows Server 2016/devcontainer.json index 94629c4..614b171 100644 --- a/.devcontainer/140 - Windows Server 2016/devcontainer.json +++ b/.devcontainer/140 - Windows Server 2016/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "2016" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json b/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json index bd12659..158036c 100644 --- a/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json +++ b/.devcontainer/150 - Windows Server 2012 R2/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "2012" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json b/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json index 0af33f4..5dc1af6 100644 --- a/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json +++ b/.devcontainer/160 - Windows Server 2008 R2/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "2008" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/170 - Windows Server 2003/devcontainer.json b/.devcontainer/170 - Windows Server 2003/devcontainer.json index f02be87..c47effb 100644 --- a/.devcontainer/170 - Windows Server 2003/devcontainer.json +++ b/.devcontainer/170 - Windows Server 2003/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "2003" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/180 - Tiny11/devcontainer.json b/.devcontainer/180 - Tiny11/devcontainer.json index 1224be1..225a746 100644 --- a/.devcontainer/180 - Tiny11/devcontainer.json +++ b/.devcontainer/180 - Tiny11/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "tiny11" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/190 - Tiny11 Core/devcontainer.json b/.devcontainer/190 - Tiny11 Core/devcontainer.json index f928c24..78da098 100644 --- a/.devcontainer/190 - Tiny11 Core/devcontainer.json +++ b/.devcontainer/190 - Tiny11 Core/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "core11" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/200 - Tiny11 Nano/devcontainer.json b/.devcontainer/200 - Tiny11 Nano/devcontainer.json index e7afeae..c7fdca9 100644 --- a/.devcontainer/200 - Tiny11 Nano/devcontainer.json +++ b/.devcontainer/200 - Tiny11 Nano/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "nano11" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/210 - Tiny10/devcontainer.json b/.devcontainer/210 - Tiny10/devcontainer.json index 4f39fe0..3df1b88 100644 --- a/.devcontainer/210 - Tiny10/devcontainer.json +++ b/.devcontainer/210 - Tiny10/devcontainer.json @@ -3,7 +3,8 @@ "service": "windows", "containerEnv": { "VERSION": "tiny10" - }, + }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 10cf271..d7c98a8 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -4,6 +4,7 @@ "containerEnv": { "VERSION": "11" }, + "forwardPorts": [8006], "portsAttributes": { "8006": { "label": "Web", From 54767605515a040d106d7f4eea83b78a3a9a9bbe Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 19 Oct 2025 13:16:22 +0200 Subject: [PATCH 276/290] feat: Update Tiny11 version to 25H2 (#1513) --- src/define.sh | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/define.sh b/src/define.sh index 9198389..3db2069 100644 --- a/src/define.sh +++ b/src/define.sh @@ -1108,14 +1108,14 @@ getLink4() { url="nano11_25h2/nano11%2025h2.iso" ;; "core11" ) - size=2159738880 - sum="78f0f44444ff95b97125b43e560a72e0d6ce0a665cf9f5573bf268191e5510c1" - url="tiny-11-core-x-64-beta-1/tiny11%20core%20x64%20beta%201.iso" + size=3176654848 + sum="29c055fcfb7b089abd9e007e7abe4bb82c70a03aac9d65e56a38b87ab32d04d2" + url="tiny11_25H2/tiny11core_25H2_Oct25.iso" ;; "tiny11" ) - size=3788177408 - sum="a028800a91addc35d8ae22dce7459b67330f7d69d2f11c70f53c0fdffa5b4280" - url="tiny11-2311/tiny11%202311%20x64.iso" + size=5514559488 + sum="92484f2b7f707e42383294402a9eabbadeaa5ede80ac633390ae7f3537e36275" + url="tiny11_25H2/tiny11_25H2_Oct25.iso" ;; "tiny10" ) size=3839819776 @@ -1123,9 +1123,9 @@ getLink4() { url="tiny-10-23-h2/tiny10%20x64%2023h2.iso" ;; "win11x64" ) - size=5819484160 - sum="b56b911bf18a2ceaeb3904d87e7c770bdf92d3099599d61ac2497b91bf190b11" - url="windows-11-24h2-x64/Windows%2011%2024H2%20x64.iso" + size=7736125440 + sum="d141f6030fed50f75e2b03e1eb2e53646c4b21e5386047cb860af5223f102a32" + url="W11x64_26200.6584/26200.6584.250915-1905.25h2_ge_release_svc_refresh_CLIENT_CONSUMER_x64FRE_en-us.iso" ;; "win11x64-enterprise" | "win11x64-enterprise-eval" ) size=6209064960 From 0e95680704f32a6f0e8739ae099235d25da11991 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 19 Oct 2025 16:59:48 +0200 Subject: [PATCH 277/290] fix: Kill QEMU after 5 seconds when it hangs (#1515) --- src/power.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/power.sh b/src/power.sh index 1c2c223..72b60fd 100644 --- a/src/power.sh +++ b/src/power.sh @@ -74,6 +74,7 @@ ready() { finish() { local pid + local cnt=0 local reason=$1 touch "$QEMU_END" @@ -85,10 +86,20 @@ finish() { { kill -15 "$pid" || true; } 2>/dev/null while isAlive "$pid"; do + sleep 1 + cnt=$((cnt+1)) + # Workaround for zombie pid [ ! -s "$QEMU_PID" ] && break + + if [ "$cnt" == "5" ]; then + error "QEMU did not terminate itself, forcefully killing process..." + { kill -9 "$pid" || true; } 2>/dev/null + fi + done + fi if [ ! -f "$STORAGE/windows.boot" ] && [ -f "$BOOT" ]; then From ac106067bd3dcc79d1534df9b966d0ef6e7dd39d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 19 Oct 2025 17:47:44 +0200 Subject: [PATCH 278/290] feat: Display ESD processing progress (#1514) --- src/install.sh | 90 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 66 insertions(+), 24 deletions(-) diff --git a/src/install.sh b/src/install.sh index a9cbb2f..f9bd402 100644 --- a/src/install.sh +++ b/src/install.sh @@ -339,10 +339,12 @@ extractESD() { local dir="$2" local version="$3" local desc="$4" - local size size_gb space space_gb desc + local size size_gb sizes space space_gb + local desc total total1 total2 total3 total4 + local imageIndex links links1 links2 links3 links4 - local msg="Extracting $desc bootdisk..." - info "$msg" && html "$msg" + local msg="Extracting $desc bootdisk" + info "$msg..." && html "$msg..." if [ "$(stat -c%s "$iso")" -lt 100000000 ]; then error "Invalid ESD file: Size is smaller than 100 MB" && return 1 @@ -351,7 +353,7 @@ extractESD() { rm -rf "$dir" mkdir -p "$dir" - size=16106127360 + size=9606127360 size_gb=$(formatBytes "$size") space=$(df --output=avail -B 1 "$dir" | tail -n 1) space_gb=$(formatBytes "$space") @@ -367,40 +369,68 @@ extractESD() { error "Cannot read the image count in ESD file!" && return 1 fi - wimlib-imagex apply "$iso" 1 "$dir" --quiet 2>/dev/null || { + sizes=$(wimlib-imagex info "$iso" | grep "Total Bytes:") + links=$(wimlib-imagex info "$iso" | grep "Hard Link Bytes:") + + total1=$(awk "NR==1{ print; }" <<< "$sizes" | cut -d':' -f2 | sed 's/^ *//') + links1=$(awk "NR==1{ print; }" <<< "$links" | cut -d':' -f2 | sed 's/^ *//') + total=$(( total1 - links1 )) + + total3=$(awk "NR==3{ print; }" <<< "$sizes" | cut -d':' -f2 | sed 's/^ *//') + links3=$(awk "NR==3{ print; }" <<< "$links" | cut -d':' -f2 | sed 's/^ *//') + total3=$(( total3 - links3 )) + total3=$(( total3 + 60000000 )) + + /run/progress.sh "$dir" "$total" "$msg ([P])..." & + + imageIndex="1" + wimlib-imagex apply "$iso" "$imageIndex" "$dir" --quiet 2>/dev/null || { retVal=$? - error "Extracting $desc bootdisk failed" && return $retVal + fKill "progress.sh" + error "Extracting $desc bootdisk failed ($retVal)" && return 1 } + fKill "progress.sh" + local bootWimFile="$dir/sources/boot.wim" local installWimFile="$dir/sources/install.wim" - local msg="Extracting $desc environment..." - info "$msg" && html "$msg" + local msg="Extracting $desc environment" + info "$msg..." && html "$msg..." - wimlib-imagex export "$iso" 2 "$bootWimFile" --compress=none --quiet || { + imageIndex="2" + /run/progress.sh "$bootWimFile" "$total3" "$msg ([P])..." & + + wimlib-imagex export "$iso" "$imageIndex" "$bootWimFile" --compress=none --quiet || { retVal=$? - error "Adding WinPE failed" && return ${retVal} + fKill "progress.sh" + error "Adding WinPE failed ($retVal)" && return 1 } - local msg="Extracting $desc setup..." - info "$msg" && html "$msg" + local msg="Extracting $desc setup" + info "$msg..." - wimlib-imagex export "$iso" 3 "$bootWimFile" --compress=none --boot --quiet || { + imageIndex="3" + /run/progress.sh "$bootWimFile" "$total3" "$msg ([P])..." & + + wimlib-imagex export "$iso" "$imageIndex" "$bootWimFile" --compress=none --boot --quiet || { retVal=$? - error "Adding Windows Setup failed" && return ${retVal} + fKill "progress.sh" + error "Adding Windows Setup failed ($retVal)" && return 1 } + fKill "progress.sh" + if [[ "${PLATFORM,,}" == "x64" ]]; then LABEL="CCCOMA_X64FRE_EN-US_DV9" else LABEL="CPBA_A64FRE_EN-US_DV9" fi - local msg="Extracting $desc image..." - info "$msg" && html "$msg" + local msg="Extracting $desc image" + info "$msg..." && html "$msg..." - local edition imageIndex imageEdition + local edition imageEdition edition=$(getCatalog "$version" "name") if [ -z "$edition" ]; then @@ -408,15 +438,27 @@ extractESD() { fi for (( imageIndex=4; imageIndex<=esdImageCount; imageIndex++ )); do - imageEdition=$(wimlib-imagex info "$iso" ${imageIndex} | grep '^Description:' | sed 's/Description:[ \t]*//') + + imageEdition=$(wimlib-imagex info "$iso" "$imageIndex" | grep '^Description:' | sed 's/Description:[ \t]*//') [[ "${imageEdition,,}" != "${edition,,}" ]] && continue - wimlib-imagex export "$iso" ${imageIndex} "$installWimFile" --compress=LZMS --chunk-size 128K --quiet || { + + total4=$(du -sb "$iso" | cut -f1) + total4=$(( total4 + 3000000 )) + + /run/progress.sh "$installWimFile" "$total4" "$msg ([P])..." & + + wimlib-imagex export "$iso" "$imageIndex" "$installWimFile" --compress=LZMS --chunk-size 128K --quiet || { retVal=$? - error "Addition of $imageIndex to the $desc image failed" && return $retVal + fKill "progress.sh" + error "Addition of $imageIndex to the $desc image failed ($retVal)" && return 1 } + + fKill "progress.sh" return 0 + done + fKill "progress.sh" error "Failed to find product '$edition' in install.wim!" && return 1 } @@ -440,8 +482,8 @@ extractImage() { return 1 fi - local msg="Extracting $desc image..." - info "$msg" && html "$msg" + local msg="Extracting $desc image" + info "$msg..." && html "$msg..." rm -rf "$dir" mkdir -p "$dir" @@ -1081,8 +1123,8 @@ buildImage() { desc=$(printVersion "$DETECTED" "ISO") - local msg="Building $desc image..." - info "$msg" && html "$msg" + local msg="Building $desc image" + info "$msg..." && html "$msg..." [ -z "$LABEL" ] && LABEL="Windows" From 4cb7e1074f2e5453b46b73f2a88ca5b142eeec40 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 19 Oct 2025 17:57:18 +0200 Subject: [PATCH 279/290] fix: Kill QEMU after 5 seconds if it hangs (#1516) --- src/power.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/power.sh b/src/power.sh index 72b60fd..8acb57b 100644 --- a/src/power.sh +++ b/src/power.sh @@ -82,22 +82,22 @@ finish() { if [ -s "$QEMU_PID" ]; then pid=$(<"$QEMU_PID") - error "Forcefully terminating Windows, reason: $reason..." + echo && error "Forcefully terminating Windows, reason: $reason..." { kill -15 "$pid" || true; } 2>/dev/null while isAlive "$pid"; do sleep 1 cnt=$((cnt+1)) - + # Workaround for zombie pid [ ! -s "$QEMU_PID" ] && break - + if [ "$cnt" == "5" ]; then - error "QEMU did not terminate itself, forcefully killing process..." + echo && error "QEMU did not terminate itself, forcefully killing process..." { kill -9 "$pid" || true; } 2>/dev/null fi - + done fi From b244fa544fbe3a8ae1af566b8afecbf279ed4497 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Sun, 19 Oct 2025 18:01:17 +0200 Subject: [PATCH 280/290] build: Update QEMU base image to v7.26 (#1517) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 1f8a231..7fef6a8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.25 / / +COPY --from=qemux/qemu:7.26 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" From e3cf3ccf3d07ef3dfe90641010b942f2b0b7f95b Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 20 Oct 2025 12:29:03 +0200 Subject: [PATCH 281/290] docs: Update docker run command (#1519) --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 4256727..adbb6bf 100644 --- a/readme.md +++ b/readme.md @@ -53,7 +53,7 @@ services: ##### Via Docker CLI: ```bash -docker run -it --rm --name windows -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v "${PWD:-.}/windows:/storage" --stop-timeout 120 dockurr/windows +docker run -it --rm --name windows -e "VERSION=11" -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v "${PWD:-.}/windows:/storage" --stop-timeout 120 docker.io/dockurr/windows ``` ##### Via Kubernetes: From 8790b4ec7c1baa03de11336c5716efce2f88eb0e Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 20 Oct 2025 13:59:27 +0200 Subject: [PATCH 282/290] fix: Remove SeaBIOS control characters (#1520) --- src/entry.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/entry.sh b/src/entry.sh index 2929503..71e939e 100644 --- a/src/entry.sh +++ b/src/entry.sh @@ -39,6 +39,8 @@ terminal tail -fn +0 "$QEMU_LOG" --pid=$$ 2>/dev/null & cat "$QEMU_TERM" 2> /dev/null | tee "$QEMU_PTY" | \ sed -u -e 's/\x1B\[[=0-9;]*[a-z]//gi' \ +-e 's/\x1B\x63//g' -e 's/\x1B\[[=?]7l//g' \ +-e '/^$/d' -e 's/\x44\x53\x73//g' \ -e 's/failed to load Boot/skipped Boot/g' \ -e 's/0): Not Found/0)/g' & wait $! || : From fa606aec5379b97ee9187ef23b27f1c11f006fc9 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 20 Oct 2025 14:48:46 +0200 Subject: [PATCH 283/290] build: Update wsddn package to v1.22 (#1521) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 7fef6a8..6dd3afd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,7 +19,7 @@ RUN set -eu && \ cabextract \ libxml2-utils \ libarchive-tools && \ - wget "https://github.com/gershnik/wsdd-native/releases/download/v1.21/wsddn_1.21_${TARGETARCH}.deb" -O /tmp/wsddn.deb -q && \ + wget "https://github.com/gershnik/wsdd-native/releases/download/v1.22/wsddn_1.22_${TARGETARCH}.deb" -O /tmp/wsddn.deb -q && \ dpkg -i /tmp/wsddn.deb && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* From 9236127a865707de886c878aeb7f13fa204f21cb Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Mon, 20 Oct 2025 14:50:37 +0200 Subject: [PATCH 284/290] fix: Add SELinux warning for shared folder (#1522) --- src/samba.sh | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index d70cb1a..45228f9 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -46,10 +46,14 @@ addShare() { local cfg="$5" local owner="" - mkdir -p "$dir" || return 1 + if ! mkdir -p "$dir"; then + error "Failed to create directory $dir." && return 1 + fi if ! ls -A "$dir" >/dev/null 2>&1; then - error "Failed to access directory $dir" && return 1 + msg="Failed to access directory $dir." + msg+=" If SELinux is active, you need to add the \":Z\" flag to the bind mount." + error "$msg" && return 1 fi if [ -z "$(ls -A "$dir")" ]; then @@ -136,26 +140,21 @@ share="/shared" [ ! -d "$share" ] && [ -d "$STORAGE/data" ] && share="$STORAGE/data" [ ! -d "$share" ] && share="$tmp" -m1="Failed to add shared folder" -m2="Please check its permissions." - -if ! addShare "$share" "/shared" "Data" "Shared" "$SAMBA_CONFIG"; then - error "$m1 '$share'. $m2" && return 0 -fi +! addShare "$share" "/shared" "Data" "Shared" "$SAMBA_CONFIG" && return 0 if [ -d "/shared2" ]; then - addShare "/shared2" "/shared2" "Data2" "Shared" "$SAMBA_CONFIG" || error "$m1 '/shared2'. $m2" + addShare "/shared2" "/shared2" "Data2" "Shared" "$SAMBA_CONFIG" || : else if [ -d "/data2" ]; then - addShare "/data2" "/shared2" "Data2" "Shared" "$SAMBA_CONFIG" || error "$m1 '/data2'. $m2." + addShare "/data2" "/shared2" "Data2" "Shared" "$SAMBA_CONFIG" || : fi fi if [ -d "/shared3" ]; then - addShare "/shared3" "/shared3" "Data3" "Shared" "$SAMBA_CONFIG" || error "$m1 '/shared3'. $m2" + addShare "/shared3" "/shared3" "Data3" "Shared" "$SAMBA_CONFIG" || : else if [ -d "/data3" ]; then - addShare "/data3" "/shared3" "Data3" "Shared" "$SAMBA_CONFIG" || error "$m1 '/data3'. $m2" + addShare "/data3" "/shared3" "Data3" "Shared" "$SAMBA_CONFIG" || : fi fi From a0bcd719bed4b71228213a00d7b8690e3b44bbd4 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 21 Oct 2025 22:46:06 +0200 Subject: [PATCH 285/290] build: Add review workflow for shell formatting (#1527) --- .github/workflows/review.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 .github/workflows/review.yml diff --git a/.github/workflows/review.yml b/.github/workflows/review.yml new file mode 100644 index 0000000..e18ca8c --- /dev/null +++ b/.github/workflows/review.yml @@ -0,0 +1,19 @@ +on: + pull_request: + +name: "Review" + +jobs: + review: + name: review + runs-on: ubuntu-latest + steps: + - + name: Checkout + uses: actions/checkout@v5 + - + name: Review + uses: reviewdog/action-shfmt@v1 + with: + shfmt_flags: "-i 2 -ci -bn" + github_token: ${{ secrets.REPO_ACCESS_TOKEN }} From f661df3abc0b6bebe97f03919336f1763109308a Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Tue, 21 Oct 2025 23:19:54 +0200 Subject: [PATCH 286/290] build: Update QEMU base image to v7.27 (#1528) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 6dd3afd..bf6dab2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ ARG VERSION_ARG="latest" FROM scratch AS build-amd64 -COPY --from=qemux/qemu:7.26 / / +COPY --from=qemux/qemu:7.27 / / ARG TARGETARCH ARG DEBCONF_NOWARNINGS="yes" From c1c44c4da760d8e9c686db90c6841f9da7b3c4fd Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 22 Oct 2025 01:23:25 +0200 Subject: [PATCH 287/290] build: Add code quality checks (#1529) --- .github/workflows/review.yml | 49 +++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/.github/workflows/review.yml b/.github/workflows/review.yml index e18ca8c..51f8503 100644 --- a/.github/workflows/review.yml +++ b/.github/workflows/review.yml @@ -3,6 +3,11 @@ on: name: "Review" +permissions: + contents: read + pull-requests: write + checks: write + jobs: review: name: review @@ -12,8 +17,50 @@ jobs: name: Checkout uses: actions/checkout@v5 - - name: Review + name: Spelling + uses: reviewdog/action-misspell@v1 + with: + locale: "US" + level: warning + pattern: | + *.md + *.sh + reporter: github-pr-review + github_token: ${{ secrets.REPO_ACCESS_TOKEN }} + - + name: Hadolint + uses: reviewdog/action-hadolint@v1 + with: + level: warning + reporter: github-pr-review + hadolint_ignore: DL3006 DL3008 + github_token: ${{ secrets.REPO_ACCESS_TOKEN }} + - + name: YamlLint + uses: reviewdog/action-yamllint@v1 + with: + level: warning + reporter: github-pr-review + github_token: ${{ secrets.REPO_ACCESS_TOKEN }} + - + name: ActionLint + uses: reviewdog/action-actionlint@v1 + with: + level: warning + reporter: github-pr-review + github_token: ${{ secrets.REPO_ACCESS_TOKEN }} + - + name: Shellformat uses: reviewdog/action-shfmt@v1 with: + level: warning shfmt_flags: "-i 2 -ci -bn" github_token: ${{ secrets.REPO_ACCESS_TOKEN }} + - + name: Shellcheck + uses: reviewdog/action-shellcheck@v1 + with: + level: warning + reporter: github-pr-review + shellcheck_flags: -x -e SC1091 -e SC2001 -e SC2002 -e SC2034 -e SC2064 -e SC2153 -e SC2317 -e SC2028 + github_token: ${{ secrets.REPO_ACCESS_TOKEN }} From 122d1ff98ed91a0813c8b31637289f7f5e89d05d Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 22 Oct 2025 10:06:26 +0200 Subject: [PATCH 288/290] fix: Inherit owner from parent folder (#1526) --- src/install.sh | 84 ++++++++++++++++++++++++++++++++++++++++---------- src/mido.sh | 5 ++- src/power.sh | 4 ++- 3 files changed, 74 insertions(+), 19 deletions(-) diff --git a/src/install.sh b/src/install.sh index f9bd402..89d1795 100644 --- a/src/install.sh +++ b/src/install.sh @@ -22,7 +22,11 @@ backup () { fi - mkdir -p "$root" + if ! makeDir "$root"; then + error "Failed to create directory \"$root\" !" + return 1 + fi + local folder="$name" local dir="$root/$folder" @@ -34,7 +38,11 @@ backup () { done rm -rf "$dir" - mkdir -p "$dir" + + if ! makeDir "$dir"; then + error "Failed to create directory \"$dir\" !" + return 1 + fi [ -f "$iso" ] && mv -f "$iso" "$dir/" find "$STORAGE" -maxdepth 1 -type f -iname 'data.*' -not -iname '*.iso' -exec mv -n {} "$dir/" \; @@ -156,7 +164,9 @@ startInstall() { ! backup "" && error "Backup failed!" fi - mkdir -p "$TMP" + if ! makeDir "$TMP"; then + error "Failed to create directory \"$TMP\" !" + fi if [ -z "$CUSTOM" ]; then @@ -178,6 +188,20 @@ startInstall() { return 0 } +writeFile() { + + local txt="$1" + local path="$2" + + echo "$txt" >"$path" + + if ! setOwner "$path"; then + error "Failed to set the owner for \"$path\" !" + fi + + return 0 +} + finishInstall() { local iso="$1" @@ -188,6 +212,10 @@ finishInstall() { error "Failed to find ISO file: $iso" && return 1 fi + if [[ "$iso" == "$STORAGE/"* ]]; then + ! setOwner "$iso" && error "Failed to set the owner for \"$iso\" !" + fi + if [[ "$aborted" != [Yy1]* ]]; then # Mark ISO as prepared via magic byte byte="16" && [[ "$MANUAL" == [Yy1]* ]] && byte="17" @@ -196,56 +224,68 @@ finishInstall() { fi fi - cp -f /run/version "$STORAGE/windows.ver" + local file="$STORAGE/windows.ver" + cp -f /run/version "$file" + ! setOwner "$file" && error "Failed to set the owner for \"$file\" !" if [[ "$iso" == "$STORAGE/"* ]]; then if [[ "$aborted" != [Yy1]* ]] || [ -z "$CUSTOM" ]; then base=$(basename "$iso") - echo "$base" > "$STORAGE/windows.base" + file="$STORAGE/windows.base" + writeFile "$base" "$file" fi fi if [[ "${PLATFORM,,}" == "x64" ]]; then if [[ "${BOOT_MODE,,}" == "windows_legacy" ]]; then - echo "$BOOT_MODE" > "$STORAGE/windows.mode" + file="$STORAGE/windows.mode" + writeFile "$BOOT_MODE" "$file" if [[ "${MACHINE,,}" != "q35" ]]; then - echo "$MACHINE" > "$STORAGE/windows.old" + file="$STORAGE/windows.old" + writeFile "$MACHINE" "$file" fi else # Enable secure boot + TPM on manual installs as Win11 requires if [[ "$MANUAL" == [Yy1]* || "$aborted" == [Yy1]* ]]; then if [[ "${DETECTED,,}" == "win11"* ]]; then BOOT_MODE="windows_secure" - echo "$BOOT_MODE" > "$STORAGE/windows.mode" + file="$STORAGE/windows.mode" + writeFile "$BOOT_MODE" "$file" fi fi # Enable secure boot on multi-socket systems to workaround freeze if [ -n "$SOCKETS" ] && [[ "$SOCKETS" != "1" ]]; then BOOT_MODE="windows_secure" - echo "$BOOT_MODE" > "$STORAGE/windows.mode" + file="$STORAGE/windows.mode" + writeFile "$BOOT_MODE" "$file" fi fi fi if [ -n "${ARGS:-}" ]; then ARGUMENTS="$ARGS ${ARGUMENTS:-}" - echo "$ARGS" > "$STORAGE/windows.args" + file="$STORAGE/windows.args" + writeFile "$ARGS" "$file" fi if [ -n "${VGA:-}" ] && [[ "${VGA:-}" != "virtio"* ]]; then - echo "$VGA" > "$STORAGE/windows.vga" + file="$STORAGE/windows.vga" + writeFile "$VGA" "$file" fi if [ -n "${USB:-}" ] && [[ "${USB:-}" != "qemu-xhci"* ]]; then - echo "$USB" > "$STORAGE/windows.usb" + file="$STORAGE/windows.usb" + writeFile "$USB" "$file" fi if [ -n "${DISK_TYPE:-}" ] && [[ "${DISK_TYPE:-}" != "scsi" ]]; then - echo "$DISK_TYPE" > "$STORAGE/windows.type" + file="$STORAGE/windows.type" + writeFile "$DISK_TYPE" "$file" fi if [ -n "${ADAPTER:-}" ] && [[ "${ADAPTER:-}" != "virtio-net-pci" ]]; then - echo "$ADAPTER" > "$STORAGE/windows.net" + file="$STORAGE/windows.net" + writeFile "$ADAPTER" "$file" fi rm -rf "$TMP" @@ -351,7 +391,10 @@ extractESD() { fi rm -rf "$dir" - mkdir -p "$dir" + + if ! makeDir "$dir"; then + error "Failed to create directory \"$dir\" !" && return 1 + fi size=9606127360 size_gb=$(formatBytes "$size") @@ -407,6 +450,8 @@ extractESD() { error "Adding WinPE failed ($retVal)" && return 1 } + fKill "progress.sh" + local msg="Extracting $desc setup" info "$msg..." @@ -486,14 +531,17 @@ extractImage() { info "$msg..." && html "$msg..." rm -rf "$dir" - mkdir -p "$dir" + + if ! makeDir "$dir"; then + error "Failed to create directory \"$dir\" !" && return 1 + fi size=$(stat -c%s "$iso") size_gb=$(formatBytes "$size") space=$(df --output=avail -B 1 "$dir" | tail -n 1) space_gb=$(formatBytes "$space") - if ((size<100000000)); then + if (( size < 100000000 )); then error "Invalid ISO file: Size is smaller than 100 MB" && return 1 fi @@ -1177,6 +1225,8 @@ buildImage() { [[ "$error" != "$hide" ]] && echo "$error" mv -f "$out" "$BOOT" || return 1 + ! setOwner "$BOOT" && error "Failed to set the owner for \"$BOOT\" !" + return 0 } diff --git a/src/mido.sh b/src/mido.sh index cc5b251..369fc17 100644 --- a/src/mido.sh +++ b/src/mido.sh @@ -487,8 +487,11 @@ getESD() { info "$msg" && html "$msg" rm -rf "$dir" - mkdir -p "$dir" + if ! makeDir "$dir"; then + error "Failed to create directory \"$dir\" !" && return 1 + fi + local xFile="products.xml" local eFile="esd_edition.xml" local fFile="products_filter.xml" diff --git a/src/power.sh b/src/power.sh index 8acb57b..98a6f73 100644 --- a/src/power.sh +++ b/src/power.sh @@ -105,7 +105,9 @@ finish() { if [ ! -f "$STORAGE/windows.boot" ] && [ -f "$BOOT" ]; then # Remove CD-ROM ISO after install if ready; then - touch "$STORAGE/windows.boot" + local file="$STORAGE/windows.boot" + touch "$file" + ! setOwner "$file" && error "Failed to set the owner for \"$file\" !" if [[ "$REMOVE" != [Nn]* ]]; then rm -f "$BOOT" 2>/dev/null || true fi From 544501107af0d4c4ede89ffb2e108ccbfd5f8028 Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Wed, 22 Oct 2025 12:19:39 +0200 Subject: [PATCH 289/290] feat: Check if shared folder is writeable (#1531) --- src/samba.sh | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/samba.sh b/src/samba.sh index 45228f9..7cd3210 100644 --- a/src/samba.sh +++ b/src/samba.sh @@ -46,16 +46,23 @@ addShare() { local cfg="$5" local owner="" - if ! mkdir -p "$dir"; then - error "Failed to create directory $dir." && return 1 + if [ ! -d "$dir" ]; then + if ! mkdir -p "$dir"; then + error "Failed to create shared folder ($dir)." && return 1 + fi fi if ! ls -A "$dir" >/dev/null 2>&1; then - msg="Failed to access directory $dir." + msg="No permission to access shared folder ($dir)." msg+=" If SELinux is active, you need to add the \":Z\" flag to the bind mount." error "$msg" && return 1 fi + if [ ! -w "$dir" ]; then + msg="shared folder ($dir) is not writeable!" + warn "$msg" + fi + if [ -z "$(ls -A "$dir")" ]; then if ! chmod 2777 "$dir"; then error "Failed to set permissions for directory $dir" && return 1 From 11a19f6a9d88857be72ccf0fa6215daeef5c4f4f Mon Sep 17 00:00:00 2001 From: Kroese <kroese@users.noreply.github.com> Date: Fri, 24 Oct 2025 04:33:47 +0200 Subject: [PATCH 290/290] fix: Remove unnecessary operation (#1534) --- src/install.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/src/install.sh b/src/install.sh index 89d1795..7be2996 100644 --- a/src/install.sh +++ b/src/install.sh @@ -135,7 +135,6 @@ startInstall() { if [[ "${VERSION,,}" == "http"* ]]; then file=$(basename "${VERSION%%\?*}") - file="${file//+/ }" printf -v file '%b' "${file//%/\\x}" file="${file//[!A-Za-z0-9._-]/_}"