From c3ba25bfb7f658f5a93ac19095446fd2780fc7b4 Mon Sep 17 00:00:00 2001 From: Kroese Date: Sun, 19 Oct 2025 10:50:46 +0200 Subject: [PATCH 1/8] 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 Date: Sun, 19 Oct 2025 11:08:57 +0200 Subject: [PATCH 2/8] 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 Date: Sun, 19 Oct 2025 12:49:32 +0200 Subject: [PATCH 3/8] 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 Date: Sun, 19 Oct 2025 13:16:22 +0200 Subject: [PATCH 4/8] 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 Date: Sun, 19 Oct 2025 16:59:48 +0200 Subject: [PATCH 5/8] 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 Date: Sun, 19 Oct 2025 17:47:44 +0200 Subject: [PATCH 6/8] 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 Date: Sun, 19 Oct 2025 17:57:18 +0200 Subject: [PATCH 7/8] 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 Date: Sun, 19 Oct 2025 18:01:17 +0200 Subject: [PATCH 8/8] 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"