From 8472d700dc2083bebdfdba8610072f21f7eb1a65 Mon Sep 17 00:00:00 2001 From: Kroese Date: Wed, 15 Oct 2025 23:47:29 +0200 Subject: [PATCH 01/28] 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 Date: Thu, 16 Oct 2025 00:03:24 +0200 Subject: [PATCH 02/28] 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 Date: Thu, 16 Oct 2025 10:54:06 +0200 Subject: [PATCH 03/28] 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 Date: Fri, 17 Oct 2025 10:05:12 +0200 Subject: [PATCH 04/28] 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 Date: Fri, 17 Oct 2025 12:53:48 +0200 Subject: [PATCH 05/28] 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 Date: Fri, 17 Oct 2025 13:38:11 +0200 Subject: [PATCH 06/28] 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 Date: Fri, 17 Oct 2025 13:42:41 +0200 Subject: [PATCH 07/28] 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 Date: Fri, 17 Oct 2025 13:45:46 +0200 Subject: [PATCH 08/28] 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 Date: Fri, 17 Oct 2025 19:03:03 +0200 Subject: [PATCH 09/28] 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 Date: Sun, 19 Oct 2025 01:31:23 +0200 Subject: [PATCH 10/28] 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 Date: Sun, 19 Oct 2025 10:50:46 +0200 Subject: [PATCH 11/28] 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 12/28] 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 13/28] 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 14/28] 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 15/28] 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 16/28] 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 17/28] 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 18/28] 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 Date: Mon, 20 Oct 2025 12:29:03 +0200 Subject: [PATCH 19/28] 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 Date: Mon, 20 Oct 2025 13:59:27 +0200 Subject: [PATCH 20/28] 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 Date: Mon, 20 Oct 2025 14:48:46 +0200 Subject: [PATCH 21/28] 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 Date: Mon, 20 Oct 2025 14:50:37 +0200 Subject: [PATCH 22/28] 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 Date: Tue, 21 Oct 2025 22:46:06 +0200 Subject: [PATCH 23/28] 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 Date: Tue, 21 Oct 2025 23:19:54 +0200 Subject: [PATCH 24/28] 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 Date: Wed, 22 Oct 2025 01:23:25 +0200 Subject: [PATCH 25/28] 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 Date: Wed, 22 Oct 2025 10:06:26 +0200 Subject: [PATCH 26/28] 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 Date: Wed, 22 Oct 2025 12:19:39 +0200 Subject: [PATCH 27/28] 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 Date: Fri, 24 Oct 2025 04:33:47 +0200 Subject: [PATCH 28/28] 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._-]/_}"